2017-01-23 28 views
0

此問題有各種變種。不幸的是,他們無法幫助我。由於文件格式或文件擴展名無效所導致的Excel無法打開文件 - 通過php下載excel

下面的代碼工作得很好(使用slim)。用戶頭()如果不使用苗條。

$response = $res->withHeader('Content-Description', 'My File transfer') 
    ->withHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
    ->withHeader('Content-Disposition', 'attachment;filename="'.basename($filePath).'"') 
    ->withHeader('Expires', '0') 
    ->withHeader('Content-Transfer-Encoding', 'binary') 
    ->withHeader('Cache-Control', 'must-revalidate') 
    ->withHeader('Pragma', 'public') 
    ->withHeader('Content-Length', filesize($filePath)); 

    readfile($filePath); 

我試着從其他答案ob_start,刷新,結束組合,但沒有任何幫助。

我能夠打開服務器上的文件,但只要我通過上面的代碼下載後試圖打開它,Excel無法打開它 - Excel無法打開文件,因爲文件格式或文件擴展名無效。

回答

0

以十六進制打開文件(來源和下載)以查找任何明顯的差異。

在我來說,這是一個領先的0D0A(換行和回車)

這是從一個新的行之後?>(PHP結束標記)來!我刪除了新行後?>我可以得到它的工作(可以打開文件)

我希望它可以幫助某人。剛剛失去了3個小時搞清楚。

+0

但是換行是如何得到文件的?這並不告訴你如何修復代碼,只是如何找到問題 – nogad

+0

對不起,如果答案不清楚。代碼流包括其他相關的php文件。其中一個文件在?>(手動錯誤)之後有一個新行。發送二進制輸出時,這一新行導致問題。它適用於json,因爲json解析器會忽略新行。我必須找到後面有新行的文件?>並將其刪除以解決問題。在很多回答中都提到使用ob_clean,但是這也沒有解決問題。所以我的結論是,代碼修復在這種情況下無法幫助,而且是語法。 –

+0

例如http://stackoverflow.com/questions/11593326/unwanted-new-line-returned-after-ajax-request –

相關問題