闡述下:我改bug的過程,如下:這個項目是我接手外包項目的二次開發,某天突然發現,線上導出功能報錯。檢查線下代碼無錯誤並導出功能沒有報錯,本地Apache服務器測試-->正常,打開導出的execl文件中數據也正常;到服務器上就會報找不到該文件錯誤,如圖:
谷歌瀏覽器報文件已遷移什麼的。由於代碼已經線上運行了n天,且本地代碼導出功能正常,所以肯定代碼程序沒問題,百度了一下發現大致
第一個是php7版本問題,phpexcel對在php7中使用save(‘php://output’)出現ERR_INVALID_RESPONSE的錯誤,主要是下面錯誤導致:
(1)header和緩衝區的錯誤導致,下面示例代碼可以正常導出:
header('Content-type: application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"');
header("Content-Disposition: attachment; filename=$fileName.xls");
header('Cache-Control: max-age=0');
//header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
//header ('Cache-Control: cache, must-revalidate');
header ('Pragma: public');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
(2)錯誤語法導致:打開PHPExcel\Calculation\Functions.php文件,刪除掉581行的break即可
但是我線上線下php版本都是php5.5,而且phpexcel版本1.8.1已經最新版本,所以這個問題pass。但我還是查看了一下,事實證明不是這個原因導致
第二個是目錄的權限問題
我當即在服務器上修改項目所以的目錄都有777的權限,但是問題還是沒解決,導出還是報錯
沒辦法了所有又去代碼中debug發現都在save(‘php://output’)報錯,期間又百度谷歌了一番,解決的方法都是大同小異,問題還是沒解決。
最後只能線上調試代碼到導出phpexcel文件 \beifen_carrental\vendor\phpoffice\phpexcel\Classes\PHPExcel\Writer\Excel2007.php save方法中
寫死了路徑(圖片//部分),發現導出功能正常。
上面方法中解決了導出問題。
總結:出現這個bug的問題應該是路徑問題,但我不知道爲什麼會出現這個問題,我在php.ini配置文件中修改了upload_tmp_dir路徑
解決圖片上傳問題(和phpexcel導出功能一樣,也是這個原因),大致就是臨時文件地址保存錯誤。
其中解決問題的時候發現幾個類似的bug解決方案:
http://blog.csdn.net/qq_20480611/article/details/48003871
https://www.jianshu.com/p/b93a69bf229e