2014-03-29 39 views
0

我試圖創建一個在線系統,藉此我將文件(各種圖片)組織到服務器上的文件夾中,並將它們壓縮到一個文件夾中,然後下載。從一個HTML表格數組中壓縮和下載文件

到目前爲止,看到了stackoverflow,我想到了這一點,當我測試使用鏈接的HTML時,下載的結果zip文件是一個帶zip擴展名的文本文件(即user-date.zip)在收容有幾個誤區:

<head> 
<title>File Zipper</title> 
</head> 

<br /> 
<b>Warning</b>: filesize(): stat failed for Files/adsfa-20140329.zip in <b>D:\xampp\htdocs\filezipper\ZipScript2.php</b> on line <b>33</b><br /> 
<br /> 
<b>Warning</b>: readfile(Files/adsfa-20140329.zip): failed to open stream: No such file or directory in <b>D:\xampp\htdocs\filezipper\ZipScript2.php</b> on line <b>35</b><br /> 

這裏是我ZipScript2.php代碼:

<head> 
<title>File Zipper</title> 
</head> 

<?php 
$filelist = $_POST['filestozip']; 
$username = $_POST['user']; 
$today = date("Ymd"); 
$packagename = $username.'-'.$today.'.zip'; 
$package = new ZipArchive; 

$package->open($packagename, ZipArchive::CREATE); 

foreach ($filelist as $file) { 
    $package->addFile('/Files/'.$file.'/pics', 'Files/pics'); 
} 
$package->close(); 

if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { 
    header('Content-Type: "application/octet-stream"'); 
    header('Content-Disposition: attachment; filename="'.basename('Files/'.$packagename).'"'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Pragma: public'); 
    header("Content-Length: ".filesize('Files/'.$packagename)); 
} else { 
    header('Content-Type: "application/octet-stream"'); 
    header('Content-Disposition: attachment; filename="'.basename('Files/'.$packagename).'"'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Expires: 0'); 
    header('Pragma: no-cache'); 
    header("Content-Length: ".filesize('Files/'.$packagename)); 
} 
readfile('Files/'.packagename); 
?> 

在我的htdocs文件夾(我使用Dreamweaver創建這個)我有我的PHP文件單獨與我「文件」目錄,其中包含各自子目錄中的圖片。注意:子目錄根據我的HTML表單傳遞的名稱進行命名,並且它們匹配(我通過插入各種回顯命令來檢查)。

我不確定是否會導致這種情況發生 - 你們中的任何一個人都可以看出這種情況嗎?希望有一個修復? :)

回答

0

您必須解決兩個錯誤:

  • 線21,26,29和35:把一個斜槓 「文件」 之前,你用$套餐 - > addFile()聲明沒有。

  • 清除打開「<?php」標記之前的所有HTML代碼。 HTTP標題將被髮送,但如果在發送到瀏覽器之前有HTML,它將不起作用。開放的php標籤應該是腳本的第一行。

參見:Creating and Downloading a file using PHP

問候,

-Gorka