PHP7在Linux上导出Excel解决ERR_EMPTY_RESPONSE方法

2 下载量 106 浏览量 更新于2024-08-28 收藏 531KB PDF 举报
"在使用PHP7.1版本和PHPExcel 1.8.1在Linux环境中导出Excel时遇到ERR_EMPTY_RESPONSE错误。此问题通常与PHP的配置或输出缓冲有关,而不是实际的代码逻辑。以下是一种可能的解决方案和相关知识点。" 在PHP中,当尝试导出Excel文件并出现`ERR_EMPTY_RESPONSE`错误时,这通常意味着服务器没有正确地返回任何内容,可能是由于输出缓冲区的问题或者是服务器配置限制了输出。在PHP7环境下,特别是从本地环境(如Windows)迁移到Linux生产环境时,这种问题更为常见。 首先,确保你的PHPExcel库是最新的。虽然你提到使用的版本是1.8.1,这是一个较旧的版本,但考虑到作者已三年未更新,你需要确认此版本是否与PHP7.1兼容。不过,从描述来看,你已经将旧插件替换为了这个版本,这是解决问题的第一步。 在代码方面,关键在于如何正确设置HTTP头和输出Excel内容。以下是一个正确的示例: ```php $filename = "模板文件" . date("YmdHis") . rand(1000, 9999); $filename = iconv("utf-8", "gb2312", $filename); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/vnd.ms-excel"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition: attachment; filename="' . $filename . '.xls"'); header("Content-Transfer-Encoding: binary"); // 保存并输出Excel文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); ``` 这段代码首先设置了适当的HTTP头,用于指示浏览器以Excel文件下载的方式处理响应。然后,通过`save('php://output')`将生成的Excel内容直接输出到HTTP响应流中。 检查PHP配置也很重要。确保`output_buffering`在php.ini中被禁用或者设置为合适的值(例如0表示关闭),因为这可能导致内容无法及时输出。另外,如果你使用的是Apache服务器,检查`.htaccess`文件中是否存在阻止输出的Rewrite规则。 在Linux环境下,还应关注安全配置,比如`open_basedir`限制,它可能阻止了文件的写入或读取,导致Excel导出失败。确保你的脚本有权限访问存储临时文件或缓存的目录。 此外,考虑使用更现代的库,如`phpspreadsheet`,它是PHPExcel的替代品,支持更多的特性且持续维护。这可能会解决与旧版库相关的兼容性问题。 解决`ERR_EMPTY_RESPONSE`错误涉及检查PHP版本兼容性、HTTP头设置、服务器配置和库的使用。通过上述步骤和调整,你应该能够成功地在Linux环境下导出Excel文件。如果问题仍然存在,可能需要进一步调试服务器日志或调整服务器配置。