Bagisto修复php弃用警告,看着难受

复制代码
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 时会覆盖手动修改的文件,所以只是临时解决方案。

相关推荐
黎雁·泠崖13 分钟前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
季明洵41 分钟前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
墨雪不会编程1 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++
浅念-1 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
小宋10211 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
一晌小贪欢2 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
阿猿收手吧!2 小时前
【C++】异步编程:std::async终极指南
开发语言·c++
小程故事多_802 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
沐知全栈开发2 小时前
SQL 日期处理指南
开发语言
黎雁·泠崖2 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言