Prestashop 8.1.1删除产品触发PHP致命错误求助
问题描述
在PrestaShop 8.1.1环境中执行批量删除产品的自定义脚本时,通过产品ID创建实例并调用delete()方法触发PHP致命错误;使用Webservice删除产品时,同样出现该错误。具体错误信息如下:
313784 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to a member function get() on null in /usr/share/nginx/html/****/classes/Image.php:642 Stack trace: #0 /usr/share/nginx/html/****/classes/Image.php(210): ImageCore->deleteImage() #1 /usr/share/nginx/html/****/classes/Product.php(1600): ImageCore->delete() #2 /usr/share/nginx/html/****/ext/newtry.php(601): ProductCore->deleteImages() #3 {main}
触发错误的Image.php第642行附近代码:
// Delete auto-generated images $image_types = ImageType::getImagesTypes(); $sfContainer = SymfonyContainer::getInstance(); $isMultipleImageFormatFeatureEnabled = $sfContainer->get('prestashop.core.admin.feature_flag.repository')->isEnabled(FeatureFlagSettings::FEATURE_FLAG_MULTIPLE_IMAGE_FORMAT);
解决思路
- 确保Symfony容器正确初始化:错误核心是
SymfonyContainer::getInstance()返回null,说明执行环境未完成PrestaShop的完整初始化。自定义脚本开头需加载核心配置文件,保证容器实例化:require_once(dirname(__FILE__).'/../config/config.inc.php'); require_once(dirname(__FILE__).'/../init.php'); - 临时跳过多图格式检测:若容器初始化正常,可直接禁用该功能检测,避免调用缺失的服务。将原代码替换为:
// 替换原检测代码 $isMultipleImageFormatFeatureEnabled = false; - 修复核心组件依赖:检查PrestaShop安装完整性,确保
prestashop.core.admin.feature_flag.repository服务已正确注册。可尝试重新覆盖安装PrestaShop 8.1.1的核心文件,或升级到最新的8.1.x补丁版本(该问题可能属于官方已修复的bug)。 - 手动实现图片删除逻辑:如果以上方案无效,可绕过默认的
deleteImages()方法,直接查询产品关联的图片记录,手动删除图片文件与数据库条目,避开报错的代码段。
内容的提问来源于stack exchange,提问作者johny b. good
相关产品推荐
相关产品推荐

