PHP 8.2兼容升级:simplexml_load_string参数弃用问题咨询
PHP 8.2兼容:simplexml_load_string()参数类型弃用问题解决
问题
升级代码适配PHP 8.2时,Excel2007.php的365、372行触发弃用错误:simplexml_load_string()的第3个参数传入null(要求为int类型)。该参数由PHPExcel_Settings::getLibXmlLoaderOptions()返回,添加(int)强制转换后错误消失,需确认此操作的合理性。
错误信息
Deprecated: simplexml_load_string(): Passing null to parameter #3 ($options) of type int is deprecated in D:\Apache24\htdocs\import_php\PHPExcel\PHPExcel\Reader\Excel2007.php on line 365 Deprecated: simplexml_load_string(): Passing null to parameter #3 ($options) of type int is deprecated in D:\Apache24\htdocs\import_php\PHPExcel\PHPExcel\Reader\Excel2007.php on line 372
原代码
$wbRels = simplexml_load_string($this->securityScan($this->_getFromZipArchive($zip, "xl/_rels/workbook.xml.rels")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions()); $xmlTheme = simplexml_load_string($this->securityScan($this->_getFromZipArchive($zip, "xl/{$rel['Target']}")), 'SimpleXMLElement', PHPExcel_Settings::getLibXmlLoaderOptions());
修改后代码
$wbRels = simplexml_load_string($this->securityScan($this->_getFromZipArchive($zip, "xl/_rels/workbook.xml.rels")), 'SimpleXMLElement', (int) PHPExcel_Settings::getLibXmlLoaderOptions()); // 第372行对应修改 $xmlTheme = simplexml_load_string($this->securityScan($this->_getFromZipArchive($zip, "xl/{$rel['Target']}")), 'SimpleXMLElement', (int) PHPExcel_Settings::getLibXmlLoaderOptions());
合理性分析
- PHP 8.2类型规则:PHP 8.2开始严格校验参数类型,
simplexml_load_string()的第3参数$options明确要求为int,传入null会触发弃用警告;而PHP 8.0及以前版本中,null会被隐式转为0(该参数的默认值),但这种隐式转换在8.2被标记为弃用。 - 强制转换的逻辑匹配:当
PHPExcel_Settings::getLibXmlLoaderOptions()返回null时,(int)null会转为0,正好对应simplexml_load_string()的默认$options值(无额外LibXML选项),完全贴合PHP 8.2之前的实际运行行为。 - 无额外副作用:若该方法正常返回int类型的LibXML选项值,
(int)强制转换不会改变原值,对正常业务逻辑无任何影响。
如果想从根源解决,也可以修改PHPExcel_Settings::getLibXmlLoaderOptions()方法,让它默认返回0而非null;但如果不想改动PHPExcel核心代码,在调用处添加(int)转换是安全、合理的临时修复方案。
内容的提问来源于stack exchange,提问作者ITG
相关产品推荐
相关产品推荐

