2016-02-23 62 views
0

我一直在試圖學習如何在php中正確使用zipArchive功能來創建和下載包含選定文件的zip文件夾。PHP關閉zipArchive打印垃圾文本(數據轉儲)

它工作,時尚後,創建zip文件並將其存儲在服務器上,但我一直無法獲得下載自動啓動,並在$ zip-> close()後;命令,它會打印頁面和垃圾字符頁面,就像它打印zip文件一樣。以下是這部分看起來像:http://www.abpdigital.com/uploads/Junk%20Text.png

我從這裏得到了我的基本代碼:http://roshanbh.com.np/2008/09/force-download-mutiple-files-zip-archive-php.html

,這裏是它的外觀在我的代碼:

function zipFilesAndDownload($file_names,$archive_file_name,$file_path) 
    { 
     //create the object 
     $zip = new ZipArchive(); 
     //create the file and throw the error if unsuccessful 
     if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE) 
     { 
      exit("cannot open <$archive_file_name>\n"); 
     } 

     //add each files of $file_name array to archive 
     foreach($file_names as $files) 
     { 
      $zip->addFile($file_path.$files,$files); 
     } 
     $zip->close(); 

     //THIS IS WHEN THE JUNK TEXT STARTS 

     //then send the headers to force download the zip file 
     header("Content-type: application/zip"); 
     header("Content-Disposition: attachment; filename=".$archive_file_name); 
     header("Pragma: no-cache"); 
     header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
     readfile($archive_file_name); 
     exit; 
    } 

有沒有人有什麼可能的想法是造成垃圾文本?我是否錯誤地使用了標題?如有必要,我可以提供進一步的代碼,但我相當肯定變量通道是可靠的。我一直在Chrome中進行測試,但是我已經證實,這一行爲在IE和Firefox中都持續存在。

[UPDATE]我發現如果我在當前目錄的子文件夾中創建zip文件(而不是直接在當​​前目錄中),它不會輸出頁面上的所有垃圾文本。

現在我的問題是更多的是我希望從頭文件中獲得的自動下載功能不是,並且從來沒有工作過。任何我應該尋找的東西,只要有錯誤或事件可能會揭示什麼是錯的?

回答

0

它似乎是有問題的標題。顯示的有線垃圾只是來自zip文件的原始數據。請檢查$ archive_file_name如果它的權利。嘗試更改標題如下:

// It should contain only the filename not the complete path 
header("Content-Disposition: attachment; filename=".basename($archive_file_name)); 

// Adding file-size to header 
header("Content-Length: " . filesize($archive_file_name)); 

// Check that is path to zip with filename 
readfile($archive_file_name); 
+0

感謝您的響應,但不幸的是基名或內容長度的變化都沒有任何區別。 $ archive_file_name是模式爲「CompanyName」的文本變量。$ uploadDate。「。zip」; $ uploadDate的日期格式爲「Y-m-d」。 – wordcross

+0

$ archive_file_name的例子是「CompanyName2016-02-23.zip」 – wordcross

+0

然後這就是代碼中的問題 - 您需要在* $ zip-> open *和* readfile的文件名之前添加路徑*。 – SebTM