一、首先开启错误显示
error_reporting(E_ALL);
ini_set(‘display_errors’, 1);
重新运行后,将会有报错信息(例如:内存溢出、文件不存在、类未定义)
二、常见导致 500 的原因与解决
1.PHPExcel 未正确加载
2.上传文件路径错误或文件未保存成功
如果你直接用 $_FILES[‘file’][‘tmp_name’] 读取,而临时文件已被删除,也会出错。
3.内存不足(最常见原因)
- 读取大 Excel 文件时(尤其是 .xlsx),PHP 5.4 很容易内存溢出。
- 读取 Excel 文件时消耗的内存与执行时间太大,超出了 PHP 5.4 默认限制(memory_limit = 128M)。
- 超限:Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate XXXX bytes),display_errors 关闭后就报:500 Internal Server Error
- 在 PHP 5.4 下建议使用 PHPExcel 1.8.0 或以下版本
解决:
ini_set(‘memory_limit’, ‘512M’);
set_time_limit(0);
4.缺少 Zip 扩展
.xlsx 文件其实是 ZIP 格式的,如果服务器没有启用 zip 扩展,会导致 500。
5.PHPExcel 版本太新
某些新版 PHPExcel 要求 PHP ≥5.6
在 PHP 5.4 下建议使用 PHPExcel 1.8.0 或以下版本。