使用phpoffice/phpspreadsheet导入Excel数据报错求助
问题排查与解决方案
错误1:libxml_disable_entity_loader() 废弃提示
这个错误是因为你的PHP版本(7.4+)已废弃libxml_disable_entity_loader()函数,但当前使用的PhpSpreadsheet版本仍在调用它。解决方式:
- 升级PhpSpreadsheet到最新稳定版:在项目根目录执行
composer update phpoffice/phpspreadsheet,新版本已移除该废弃函数的调用。 - 临时抑制错误(仅应急,不推荐):在代码开头添加
error_reporting(E_ALL & ~E_DEPRECATED);,屏蔽废弃类错误提示。
错误2:样式文件中访问空值的数组偏移
这个警告源于PhpSpreadsheet读取Excel样式时遇到空值节点,可能是Excel文件存在异常样式,或旧版本PhpSpreadsheet的兼容bug。解决方式:
- 优先升级PhpSpreadsheet到最新版,新版本修复了大量样式解析问题。
- 检查导入的Excel文件:打开文件清除空白单元格的特殊格式等异常样式,重新保存后再导入。
- 临时抑制警告:添加
error_reporting(E_ALL & ~E_DEPRECATED & ~E_WARNING);,但建议从根源解决问题。
关于重定向忽略错误的问题
可以通过修改错误报告级别实现,但不建议这么做——错误提示是在暴露潜在的兼容性或文件问题,忽略可能引发后续严重故障。若一定要临时忽略,在代码最开头(include语句前)添加:
// 关闭所有错误提示 error_reporting(0); // 或精准屏蔽特定错误 error_reporting(E_ALL ^ E_DEPRECATED ^ E_WARNING);
额外提醒:代码存在SQL注入风险
当前代码直接将Excel数据拼接到SQL语句中,极易遭受注入攻击。建议改用MySQLi预处理语句改写插入逻辑:
// 替换原有INSERT代码 $stmt = $con->prepare("INSERT INTO users (UserLevel, NoIC, UEmail, FullName, Password, UserStatus) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->bind_param("ssssss", $UserLevel, $NoIC, $UEmail, $FullName, $NoIC, 'Active'); $stmt->execute(); $stmt->close();
内容的提问来源于stack exchange,提问作者Nsuha
相关产品推荐
相关产品推荐

