记录一个简单的错误。
背景
用的是PhpOffice/PhpSpreadsheet
在本地环境下是可以正常导出excel的。但是线上就不行。
就会报错unexcepted identifier "Closure",好像是不能用匿名函数。
首先
本地可以正常导出,然后服务器上不可以。看了各种日志。php日志、nginx日志、tp框架的日志 。就是找不到毛病。
然后开始排查php扩展,php本地的扩展,在服务器上都安装了。
还各种修改文件夹的权限,还是没用。
在php.ini中还禁用函数,但是都没有作用。
我连代码都重新clone的一遍。
解决
最后屈服了,把服务器上的php8.0换成了php8.2,(和本地环境一致。)然后就OK了。
需要注意的是:
宝塔环境下,不能单纯的切换php版本。要把nginx的配置文件也要改掉!
php
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-82.sock; # 改为与PHP-FPM配置一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# ThinkPHP 专用参数
fastcgi_param PATH_INFO $fastcgi_path_info;
}