You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:25:40