Laravel 5.8共享主机下PHP unexpected '?'语法错误修复求助
解决Laravel备份定时任务的PHP语法错误问题
这个PHP Parse error: syntax error, unexpected '?'错误的核心原因很明确:你的cron任务调用的PHP CLI版本低于7.1,而zend-diactoros库的代码使用了PHP 7.1才引入的「可空类型声明」(也就是?语法)。虽然你提到主机的PHP版本是7.3.5,但共享主机的网页端PHP版本和命令行(CLI)版本经常不一致,大概率是cron用了低版本PHP导致的。
下面是具体的解决步骤:
1. 确认cron使用的PHP版本
先搞清楚你的cron任务到底在调用哪个版本的PHP:
- 临时创建一个cron任务:
* * * * * php -v > /home/username/php_version_log.txt - 等待1分钟后,查看
php_version_log.txt文件里的版本信息。如果显示的是7.0或更低版本,那就是问题的根源。
2. 使用正确的PHP CLI绝对路径
共享主机通常会提供不同PHP版本的CLI可执行文件,你需要找到对应7.3版本的绝对路径:
- 可以尝试在SSH命令行里执行以下命令查找:
which php73 # 或者 find /usr -name "php73" - 常见的路径比如
/usr/local/php73/bin/php、/opt/cpanel/ea-php73/root/usr/bin/php(取决于主机商配置,如果你找不到,直接联系主机客服索要PHP 7.3 CLI的绝对路径)。 - 把你的cron任务修改为使用这个绝对路径,比如:
* * * * * /usr/local/php73/bin/php /home/username/app-folder/artisan backup:run
3. 备选方案:降级zend-diactoros版本(如果PHP版本确实是7.3)
如果确认cron用的PHP版本已经是7.3,但还是报错,那可能是zend-diactoros的版本太高,和你的环境不兼容。可以降级到支持PHP 7.3的稳定版本:
- 在项目根目录的
composer.json里添加或修改依赖:"require": { "zendframework/zend-diactoros": "^1.8" } - 然后执行:
composer update zendframework/zend-diactoros - 之后再用命令行测试
php /home/username/app-folder/artisan backup:run,确认错误消失。
4. 测试验证
修改完cron命令后,手动执行一次完整的命令(比如/usr/local/php73/bin/php /home/username/app-folder/artisan backup:run),看是否能正常运行备份,没有语法错误。如果手动运行正常,说明cron任务应该也能正常工作了。
内容的提问来源于stack exchange,提问作者Elvis Kirui
相关产品推荐
相关产品推荐

