Yii2.0 PHPExcel導出Excel文件報找不到該文件錯誤?

闡述下:我改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











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章