2011-04-18 171 views
0

在下載通過代碼(PHP)zip文件,其示出了在瀏覽器的所有ASCII字符:下載ZIP文件

zip successfulPKZAq>.…u[ü¹…¿;../papa/control/other_image/2965Golf Cart Pencil Holder.jpg¤ýwTSOø7ŠÆŠ€ˆ EAˆJi*UZT¤—Q©!"[email protected]é[email protected]@@¤I」€ÔH$」 %PB€$\¾ï=ëܵîzÏZçüN²æ¯ì콟™g>eföìÃ߇ó€ó†zz€cÇ€cG_À! ©c®{ÏÒÔ\ýŠ»‹œçW÷+·äo^¹àõq¿b`¨Åð±®þ•@•ÛÒ²W|ž>‡ú_ѺrëæMŽÃi€Îѹþß}þ;ɱÿ×'ùà9sÌõ˜Ç‰c×ÇyŽà9vØEyêÿ{àÿø;~âä©ÓlgØ98Àœ?vâÄñ「'N:yòè×°£ß'y....... 

這是正在下載的輸出..和圖像的一部分,可以你幫忙?

+0

它看起來像服務器發送一個錯誤的資源內容類型。右鍵點擊鏈接並點擊「下載」即可獲取。 – 2011-04-18 14:00:40

回答

1

我的第一個猜測是服務器在response header中返回了不正確的內容類型。如果服務器告訴瀏覽器內容是文本,瀏覽器將嘗試將其顯示爲文本。在PHP代碼服務的文件時,嘗試添加這樣的事:

header('Content-type: application/zip'); 

請記住,通過HTTP傳輸數據時,絕對不會有一個概念「文件。」有一個請求和響應,每個響應都包含一個標題和數據。客戶端(瀏覽器)可以選擇使用本地系統的API將數據保存爲文件,甚至可以爲該文件建議一個名稱。但它接受的不是一個「文件」。在這種情況下,響應標頭對於發送的數據不正確。

+0

Nah,他也在代碼中顯示「zip成功」的地方,所以即使你將當前內容推送到瀏覽器,它也會被破壞。 – wimvds 2011-04-18 15:38:31

+0

@wimvds:啊,很好。雅,發送郵件時他的輸出流不乾淨。他只是將它附加到當前輸出。 – David 2011-04-18 15:41:58

2

由於您顯示「zip成功」 - 可能在您生成zip的某些代碼中,瀏覽器將無法處理該文件(無論如何,無論使用的是應用程序/ zip標頭,它都將被破壞) 。因此,首先清理您的代碼,並確保在開始發送ZIP之前,不要向瀏覽器輸出任何內容。然後添加以下到拉鍊居然推到客戶端:

header('Content-type: application/zip'); 
header('Content-Disposition: attachment; filename="' . basename($fullPathToFile) . '"') 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($fullPathToFile)); 
header('Cache-Control: private'); 
ob_clean(); 
flush(); 
readfile($fullPathToFile); 
exit; 

其中$ fullPathToFile是對ZIP文件的完整路徑(即/path/to/yourzip.zip)。

有關另一個示例,請參閱readfile文檔。