Reading Barcode and QR Code on the Server Side with PHP Laravel

If you want to use the PHP Laravel framework to build a web-based barcode and QR code reader, you can implement the barcode detection logic on either the client side or the server side. Dynamsoft offers a variety of SDKs for different platforms, including desktop, mobile, and web. In this article, we will focus on how to leverage the PHP extension, built with the Dynamsoft C++ Barcode SDK, to read barcodes and QR codes on the server side.


PHP Laravel Installation on Windows and Linux

Install PHP 7.4, Composer and Laravel.

  • PHP 7.4
  • Composer
    • Windows Run Composer-Setup.exe
    • Linux
        php -r "copy('', 'composer-setup.php');"
        php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
        php composer-setup.php
        php -r "unlink('composer-setup.php');"
        sudo mv composer.phar /usr/local/bin/composer
  • Laravel:

      composer global require laravel/installer

Steps to Implement Server-Side Barcode and QR Code Reading Using PHP Laravel

In the following paragraphs, we will guide you through the process of developing a PHP Laravel project that can read barcode and QR code from image files on the server side.

Step 1: Install the PHP Barcode QR Code Reader Extension

There is no pre-built binary package available. To read barcodes and QR codes in PHP, you must build and install the PHP extension from source code on both Windows and Linux.

Step 2: Scaffold a Laravel Project

After installing the extension, initiate a new Laravel project:

composer create-project laravel/laravel web-barcode-qrcode-reader

To avoid compatibility issues, specify the Laravel version:

php artisan --version
Laravel Framework 8.83.23

composer create-project laravel/laravel:^8.0 web-barcode-qrcode-reader

Step 3: Create a Controller

Laravel controllers manage HTTP requests. We can employ a controller to handle uploaded image files and decode the barcodes and QR codes. A new controller can be created using the make:controller Artisan command:

php artisan make:controller ImageUploadController

The command generates an ImageUploadController.php file in the app/Http/Controllers directory. You need to open the file and implement the barcode reading functionality:


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Validator;

class ImageUploadController extends Controller
    function __construct() {

    function page()
     return view('barcode_qr_reader');

    function upload(Request $request)
     $validation = Validator::make($request->all(), [
      'BarcodeQrImage' => 'required'
      $image = $request->file('BarcodeQrImage');
      $image->move(public_path('images'), $image->getClientOriginalName());

      $resultArray = DecodeBarcodeFile(public_path('images/' . $image->getClientOriginalName()), 0x3FF | 0x2000000 | 0x4000000 | 0x8000000 | 0x10000000); // 1D, PDF417, QRCODE, DataMatrix, Aztec Code

      if (is_array($resultArray)) {
        $resultCount = count($resultArray);
        echo "Total count: $resultCount", "\n";
        if ($resultCount > 0) {
            for ($i = 0; $i < $resultCount; $i++) {
                $result = $resultArray[$i];
                echo "Barcode format: $result[0], ";
                echo "value: $result[1], ";
                echo "raw: ", bin2hex($result[2]), "\n";
                echo "Localization : ", $result[3], "\n";
        else {
            echo 'No barcode found.', "\n";

      return response()->json([
       'message'   => 'Successfully uploaded the image.'
      return response()->json([
       'message'   => $validation->errors()->all()
  • You need to replace LICENSE-KEY with a valid license obtained from the Dynamsoft customer portal.
  • Initializing the barcode SDK instance and setting the license key happen in the __construct() method. - Using DBRInitRuntimeSettingsWithString() is optional as the default settings usually suffice.
  • The uploaded images are saved in the public/images directory.
  • The DecodeBarcodeFile() method is used to process the image files.

Next, create the barcode_qr_reader view.

Step 4: Create a Web View

In the resources/views directory, create a barcode_qr_reader.blade.php file containing the HTML5 code for uploading images:

<!DOCTYPE html>

    <title>PHP Laravel Barcode QR Reader</title>
    <meta name="_token" content="{{csrf_token()}}" />

    <H1>PHP Laravel Barcode QR Reader</H1>
    <form action="{{ route('image.upload') }}" method="post" enctype="multipart/form-data">
        Select barcode image:
        <input type="file" name="BarcodeQrImage" id="BarcodeQrImage" accept="image/*"><br>
        <input type="submit" value="Read Barcode" name="submit">
    <img id="image" />
        var input = document.querySelector('input[type=file]');
        input.onchange = function() {
            var file = input.files[0];
            var fileReader = new FileReader();
            fileReader.onload = function(e) {
                    let image = document.getElementById('image');
                    image.src =;


To implement CSRF Protection in Laravel, use the @csrf Blade directive in the form:

<form action="{{ route('image.upload') }}" method="post" enctype="multipart/form-data">

Finally, define the web routes in public/routes/web.php.

Route::get('/barcode_qr_reader', 'App\Http\Controllers\ImageUploadController@page');
Route::post('/barcode_qr_reader/upload', 'App\Http\Controllers\ImageUploadController@upload')->name('image.upload');

Step 5: Run the PHP Laravel Barcode QR Code Reader

Start the Laravel server and access the project by navigating to in your web browser.

php artisan serve

PHP Laravel barcode QR code reader

Source Code