2015-04-05 79 views
0

我知道這個問題在這個論壇發佈了很多次,但相信我我已經嘗試了所有可能的解決方案建議,但它並沒有爲我工作。ZIP文件下載php讀取文件()錯誤

我試圖下載使用壓縮多個文件,但zip文件被下載的成功,它的腐敗,我在記事本打開它後遇到錯誤:

警告:ReadFile的(E:\下載/ IMG -20140831-WA0000.zip)[function.readfile]:未能打開流:在...

我嘗試了所有在論壇中提到的可能的解決方案,如頭檢查沒有這樣的文件或目錄,網頁服務器用戶對我創建ZIP文件的文件夾具有寫入權限,下載前進行錯誤檢查等,但它沒有任何問題d出來。

進行錯誤檢查後,我遇到了類似

錯誤創建ZIP文件:IMG-20140831-WA0000.zip

我的代碼片段:

function zipFilesDownload($file_names, $archive_file_name, $file_path) { 
    $zip = new ZipArchive; 
    if ($zip->open($archive_file_name, ZipArchive::CREATE) !== TRUE) { 
     exit("cannot open <$archive_file_name>\n"); 
    } 
    foreach($file_names as $files) { 
     $zip->addFile($file_path . $files, $files); 
    } 
    if ($zip->close() === false) { 
     exit("Error creating ZIP file : " . $archive_file_name); 
    } 
    if (file_exists($archive_file_name)) { 
     header("Content-Description: File Transfer"); 
     header("Content-type: application/zip"); 
     header("Content-Disposition: attachment; filename=" . $archive_file_name . ""); 
     header("Pragma: no-cache"); 
     header("Expires: 0"); 
     readfile("E:\Downloads/" . $archive_file_name); 
     ob_clean(); 
     flush(); 
     exit; 
    } else { 
     exit("Could not find Zip file to download"); 
    } 
} 
$fileNames = array(
    'D:\\xampp\htdocs\BE\Multimedia/' . $fullName, 
    'D:\\xampp\htdocs\BE\Decrypt/' . $decrypt_file 
); 
$zip_file_name = $actualName . '.zip'; 
$file_path = dirname("E:\Downloads") . '/'; 
zipFilesDownload($fileNames, $zip_file_name, $file_path); 

請建議一些解決方案

+0

'目錄名( 「E:\下載」)''返回 「E:\」'。如果你不使用'dirname()'會發生什麼? – 2015-04-05 07:37:02

+0

另外,'$ actualName'從哪裏來? – 2015-04-05 07:42:32

+0

@SevrriMOslen'$ actualName'是要下載的zipFile的名稱。例如。如果'$ actualName ='hello';'然後'$ zip_file_name = hello.zip' – 2015-04-05 15:09:50

回答

1

的問題看起來是這一行:

$file_path = dirname("E:\Downloads") . '/'; 

的目錄名稱功能 「Returns parent directory's path」。這意味着$file_path將是E:\

在您的功能中,您在$zip->addFile()方法中使用$file_path來引用應該添加到ZIP歸檔文件中的文件。

換句話說,如果你有文件的數組,如:

$files = array(
    'file1.txt', 
    'file2.txt', 
    'file3.txt', 
); 

然後將被添加到檔案文件將是:

E:\file1.txt 
E:\file2.txt 
E:\file3.txt 

你可能想要的是添加這些文件:

E:\Downloads\file1.txt 
E:\Downloads\file2.txt 
E:\Downloads\file3.txt 

據我所知,要修復您的代碼,您只需要使用dirname(),像這樣:

$file_path = "E:\Downloads\\"; 
+0

@SevrriMOslen根據你的建議和來自php手冊的教程,我改變了'dirname(「E:\ Downloads」)。 '/';'到'dirname(__ FILE__);'nd'$ file_path = dirname($ archive_file_name)。 '/';'最後'$ fileNames = array(\ folder1 /'。$ fullName1,'\ folder2 /'。$ fullName2);'。該代碼終於工作了,Zip文件成功下載沒有任何損壞的消息。感謝您的支持。 – 2015-04-05 15:18:54