PHP Deprecated: Opis\Closure\unserialize(): Implicitly marking parameter $options as nullable is deprecated, the
explicit nullable type must be used instead in /var/www/html/vendor/opis/closure/functions.php on line 32
Deprecated: Opis\Closure\unserialize(): Implicitly marking parameter $options as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/vendor/opis/closure/functions.php on line 32
问题原因
在PHP 8.1+中,隐式标记参数为可空 (通过= null)已被弃用,需要显式使用可空类型声明(在类型前加?)。
具体来说, /var/www/html/vendor/opis/closure/functions.php 第32行的函数定义:
function unserialize($data, array $options = null)
需要改为:
function unserialize($data, ?array $options = null)
解决方案 方案1:升级Opis\Closure库(推荐)2025.12.24亲测升级后就可以了
这是最根本的解决方案,升级到最新版本的Opis\Closure库,该库可能已经修复了这个兼容性问题:
docker exec bagisto-php composer update opis/closure
方案2:手动修改文件
如果暂时无法升级,可以手动修改文件:
# 进入容器
docker exec -it bagisto-php bash
# 修改文件(使用vi或nano编辑器)
vi /var/www/html/vendor/opis/closure/functions.php
# 将第32行的array改为?array
# 保存并退出
方案3:禁用弃用警告(不推荐)
在开发环境可以禁用弃用警告显示,但生产环境应该修复问题而不是忽略:
# 在.env文件中设置
APP_DEBUG=false
# 或在php.ini中设置
error_reporting = E_ALL & ~E_DEPRECATED
建议
优先选择 方案1 (升级库),这是最符合PHP新版本规范的解决方案,也能避免其他潜在的兼容性问题。
如果选择 方案2 ,需要注意下次执行 composer install 或 composer update 时会覆盖手动修改的文件,所以只是临时解决方案。