Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

cyj's avatar
Level 1

Why composer.json requires PHP 7.4 but server is running PHP 7.3 doesn't break in deployment?

Our server is running PHP 7.3 but composer.json file requires PHP 7.4. We accidentally deployed to the server but it didn’t break. We are wondering if this is a cache issue or something else? Can somebody share some lights here? We would like to know which potential parts prevent server crashing.

We are not able to run composer install or update manually to do some experiments because it is on production server. However, we have tried to reproduce in our local (using PHP 7.3) and it always break when we run composer install.

NOTE: We are using Forge to do deployment

Here is our deployment script

date
cd /home/forge/default
git pull origin master
composer install --no-dev --prefer-dist
php artisan migrate --force
npm install
npm run production
echo “” | sudo -S service php7.3-fpm reload

Here is our composer.json

{
    “name”: “laravel/laravel”,
    “type”: “project”,
    “description”: “The Laravel Framework.“,
    “keywords”: [
        “framework”,
        “laravel”
    ],
    “license”: “MIT”,
    “require”: {
        “php”: “^7.4|^8.0",
        “algolia/algoliasearch-client-php”: “^2.7",
        “algolia/scout-extended”: “^1.10",
        “backup-manager/laravel”: “^2.0",
        “ckfinder/ckfinder-laravel-package”: “v3.5.1.6",
        “cviebrock/eloquent-sluggable”: “^7.0",
        “davejamesmiller/laravel-breadcrumbs”: “^5.3",
        “doctrine/dbal”: “^2.11",
        “fideloper/proxy”: “^4.4",
        “fruitcake/laravel-cors”: “^2.0",
        “geoip2/geoip2”: “^2.9",
        “graham-campbell/markdown”: “^13.1",
        “guzzlehttp/guzzle”: “^6.3.1|^7.0.1",
        “intervention/image”: “^2.5",
        “jenssegers/agent”: “^2.6",
        “jordanmiguel/laravel-popular”: “^1.0",
        “kyslik/column-sortable”: “^6.3",
        “laracasts/presenter”: “^0.2.1",
        “laravel/framework”: “^7.29",
        “laravel/passport”: “^9.3",
        “laravel/scout”: “^8.3",
        “laravel/tinker”: “^2.5",
        “laravel/ui”: “^2.0",
        “laravelcollective/html”: “^6.2",
        “laravelium/sitemap”: “^7.0",
        “league/flysystem-aws-s3-v3”: “^1.0",
        “mtownsend/read-time”: “^1.1",
        “otisz/laravel-imgix”: “^3.0",
        “renatomarinho/laravel-page-speed”: “^1.8",
        “sentry/sentry-laravel”: “^2.1",
        “spatie/dns”: “^1.4",
        “spatie/laravel-csp”: “^2.6",
        “spatie/laravel-permission”: “^3.17",
        “themsaid/forge-sdk”: “^2.2",
        “toin0u/geocoder-laravel”: “^4.1",
        “torann/geoip”: “^1.2",
        “tucker-eric/eloquentfilter”: “^2.3",
        “unisharp/laravel-filemanager”: “dev-master”
    },
    “require-dev”: {
        “barryvdh/laravel-debugbar”: “^3.5”,
        “laravel/dusk”: “^6.11”,
        “laravel/telescope”: “^3.5”,
        “laravel/tinker”: “^2.5”,
        “mockery/mockery”: “^1.3.1”,
        “nunomaduro/collision”: “^4.3”,
        “phpunit/phpunit”: “^8.5.8|^9.3.3”,
        “fakerphp/faker”: “^1.9.1”,
        “facade/ignition”: “^2.0”
    },
    “config”: {
        “optimize-autoloader”: true,
        “preferred-install”: “dist”,
        “sort-packages”: true,
        “platform”: {
            “php”: “7.4”
        }
    },
    “extra”: {
        “laravel”: {
            “dont-discover”: [
                “laravel/telescope”
            ]
        }
    },
    “autoload”: {
        “psr-4”: {
            “App\“: “app/“,
            “Mpociot\Versionable\“: “packages/mpociot/versionable/src/Mpociot/Versionable/“,
            “CKSource\CKFinderBridge\“: “packages/ckfinder/ckfinder-laravel-package/src/“,
            “CKSource\CKFinder\“: “packages/ckfinder/ckfinder-laravel-package/_connector/”
        },
        “classmap”: [
            “database/seeds”,
            “database/factories”
        ]
    },
    “autoload-dev”: {
        “psr-4": {
            “Tests\“: “tests/”
        }
    },
    “minimum-stability”: “dev”,
    “prefer-stable”: true,
    “scripts”: {
        “post-autoload-dump”: [
            “Illuminate\Foundation\ComposerScripts::postAutoloadDump”,
            “@php artisan package:discover --ansi”
        ],
        “post-root-package-install”: [
            “@php -r \“file_exists(‘.env’) || copy(‘.env.example’, ‘.env’);\“”
        ],
        “post-create-project-cmd”: [
            “@php artisan key:generate --ansi”
        ]
    }
}
0 likes
3 replies
jlrdw's avatar

Run phpinfo(); somewhere in a script and verify your version.

1 like
rodrigo.pedra's avatar

Adding on what @jlrdw said, my bet is that the PHP version running on the CLI might be different from the one configured on FPM.

If you can ssh into that server run:

$ php -v

And check the CLI version PHP is running.

As composer install is run as a CLI command, that might be where the difference lies.

Please or to participate in this conversation.