Laravel项目部署至cpanel遇PHP语法错误求助(PHP8.1.10/Composer2.4.4)
Laravel部署至cPanel时的语法错误排查与解决
问题详情
- 运行环境:PHP 8.1.10、Composer 2.4.4
- 错误日志:
[1:33 UTC] PHP Parse error: syntax error, unexpected '=' in /vendor/symfony/string/Resources/functions.php on line 34
项目composer.json配置内容:
{ "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7" }, "require-dev": { "fakerphp/faker": "^1.9.1", "laravel/pint": "^1.0", "laravel/sail": "^1.0.1", "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^6.1", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ignition": "^1.0" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-update-cmd": [ "@php artisan vendor:publish --tag=laravel-assets --ansi --force" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] }, "extra": { "laravel": { "dont-discover": [] } }, "config": { "platform-check": false, "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "allow-plugins": { "pestphp/pest-plugin": true } }, "minimum-stability": "dev", "prefer-stable": true }
排查与解决步骤
确认网站实际运行的PHP版本
cPanel中常出现CLI版本与WEB运行版本不一致的情况,即便你CLI用的是8.1.10,网站可能仍在使用更低版本的PHP。进入cPanel的「选择PHP版本」功能,确认网站当前启用的PHP版本为8.0.2或更高,与composer.json要求匹配。重新安装依赖包
旧依赖可能是用不兼容的PHP版本安装的,导致生成了低版本兼容代码。执行以下命令:# 删除旧依赖和锁文件 rm -rf vendor composer.lock # 确认当前CLI的PHP版本 php -v # 重新安装生产环境依赖 composer install --no-dev启用Composer平台版本检查
修改composer.json中的config.platform-check为true,让Composer在安装时验证PHP版本是否符合依赖要求,避免安装不兼容的包:"config": { "platform-check": true, // 其他配置保持不变 }验证symfony/string版本兼容性
Laravel 9.x要求的symfony/string版本完全兼容PHP 8.0+,重新安装后查看composer.lock中该包的版本,确保没有安装针对PHP 7.x的旧版本。
内容的提问来源于stack exchange,提问作者DIPAK SHAH
相关产品推荐
相关产品推荐

