2016-01-27 25 views
0

我試圖使用zip歸檔創建一個zip文件,雖然壓縮文件在兩個不同的文件夾中同時下載兩次,但源代碼位於htdocs文件夾中,瀏覽器設置的默認下載文件夾。有什麼方法可以防止這種情況發生?我只希望它被下載一次到下載文件夾...在兩個不同的文件夾中阻止兩次zip歸檔文件下載兩次

$file_names = explode(',', $_REQUEST['files']); 

    $dir = $_REQUEST['currentdir']; 

    //Archive name 
    $archive_file_name="Downloaded_".date("Y-m-d_G-i-s").".zip"; 

    //Download Files path 
    $file_path=$dir; 

    //cal the function 
    zipFilesAndDownload($file_names,$archive_file_name,$file_path); 

    function zipFilesAndDownload($file_names,$archive_file_name,$file_path) 
    { 
    $zip = new ZipArchive(); 
    $res = $zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); 
if ($res===TRUE) { 
//add each files of $file_name array to archive 
foreach($file_names as $files) 
{ 
    $tt=$file_path."/".$files; 
    if (file_exists($tt)){ 
    $zip->addFile($tt,$files); 
    } 
    else{ 
     return false; 
     exit; 
    } 
} 
$zip->close(); 

//then send the headers to force download the zip file 
header('Content-type: application/zip'); 
header("Content-Disposition: attachment; filename=\"".basename($archive_file_name)."\""); 
header('Pragma: no-cache'); 
header('Expires: 0'); 
//header('Content-Length: ' . filesize($archive_file_name)); 
ob_end_clean(); 
//flush(); 
readfile($archive_file_name); 
exit; 
} 
else{ 
    return false; 
    exit; 
} 

} 
+0

創建在htdocs文件夾中的zip(PHP將其保存在那裏),這就是爲什麼它的存在的原因。你只下載一次。 –

+0

該代碼必須在htdocs中運行它,因爲我所有的php代碼都在htdocs中運行...是否有任何代碼或方式來阻止它生成文件到htdocs中? – Annie

+0

你可以使用一個目錄名稱作爲文件名,然後將其保存在所述目錄中。 –

回答

2

你的PHP腳本在本地目錄中創建ZIP,這是你的htdocs目錄。

您有幾種選擇現在:

  • 刪除ZIP檔案讀取與PHP(readfile
  • 存檔創建一個子目錄中的zip壓縮包,如果你需要保存起來以備以後(後歸檔)
  • 創建的臨時文件夾的zip和使用

我會去的選項3,因爲這將確保拉鍊被徹底刪除我之後刪除ZIP如果腳本在能夠刪除之前死亡。

您可以使用unlink()命令刪除文件。您只需將文件名或文件路徑傳遞給它即可(如果該文件存在)。如果你想把它保存在一個子目錄中,你只需要在目錄名前添加目錄分隔符到文件名即可。如果你想保存它,例如在子目錄'downloads'中,你只需在文件名之前加上downloads/即可。 $archive_file_name="downloads/Downloaded_".date("Y-m-d_G-i-s").".zip";

這裏更好的選擇是在服務器中創建的臨時目錄中的zip和手動刪除它,所以zip獲取只要它做清理。您將得到服務器的臨時目錄sys_get_temp_dir(),您可以將其預先添加到文件名中。在您完成業務後,您可以使用unlink()刪除該文件。 $archive_file_name=sys_get_temp_dir()."Downloaded_".date("Y-m-d_G-i-s").".zip";

完成並想刪除文件後,您只需執行unlink($archive_file_name);

功能參考:

http://php.net/unlink

http://php.net/sys_get_temp_dir

+0

嗨,感謝您的回覆,我已經嘗試了所有的建議。它會刪除默認下載文件夾中的文件,而不是我想要的htdocs文件夾中的文件它是相反的。所以我試圖手動把unlink('C:\\ xampp \\ htdocs \\ test \\'。$ archive_file_name);刪除它,但結果仍然會刪除默認文件夾中的文件,而不是htdocs .. – Annie

+0

這幾乎是不可能的。 PHP不知道你要保存的文件在哪裏下載。你確定你沒有把你要下載的文件保存到htdocs文件夾中? –

+0

哦,親愛的,我的錯誤,我在幾分鐘前打勾瀏覽器設置將其保存到另一個默認文件夾,現在一切正常!非常感謝!!!! – Annie

0

下載後,您可以刪除服務器上的文件:

(...) 

ob_end_clean(); 
//flush(); 
readfile($archive_file_name); 
unlink($archive_file_name); 

(...) 
+0

嗨,我試過這個,但它會刪除默認下載文件夾中的文件,而不是htdocs文件夾內的文件... – Annie

+0

我的錯誤^^「我在瀏覽器設置幾分鐘前打勾將其保存到另一個默認文件夾,現在一切正常!謝謝你!!!! – Annie