2012-07-26 70 views
1

我有一個WordPress站點,我正在爲我工​​作的公司創建一個HR插件。一個功能允許管理員下載包含多個文檔的zip文件。我測試了下面的代碼,它工作正常,但我希望在我選擇的目錄中創建ZIP存檔。在一個單獨的目錄中用PHP創建一個ZIP壓縮包

function direct_download() 
{ 
    if ($_REQUEST['action'] == 'download') 
    { 
     $App = new DHR_Application(); 
     $file_name=str_replace(" ","_",$App->Fname)."_".str_replace(" ","_",$App->Lname)."_".$App->ID; 
     $txt_name=$file_name.".txt"; 
     $txt_path="../user-upload/temp/".$file_name.".txt"; 
     $arc_name=$file_name.".zip"; 


     $txt=$App->Fname." ".$App->Lname."\r\n".$App->ID; 
     $file=fopen($txt_path,"w+"); 
     fwrite($file,$txt); 

     $zip = new ZipArchive(); 

     if ($zip->open($arc_name, ZIPARCHIVE::CREATE)!==TRUE) 
     { 
      exit("cannot open <$arc_name>\n"); 
     } 
     $nameAtt1 = pathinfo($App->Att1,PATHINFO_BASENAME); 
     $zip->addFile($App->Att1,$nameAtt1); 
     if (($App->Att2 != '') && ($App->Att2 != null)) 
     { 
      $nameAtt2 = pathinfo($App->Att2,PATHINFO_BASENAME); 
      $zip->addFile($App->Att2,$nameAtt2); 
     } 

     $zip->addFile($txt_name,$txt_path); 
     $zip->close(); 
     fclose($file); 

     header("Content-type: application/zip"); 
     header("Content-Disposition: attachment; filename=$arc_name"); 
     header("Pragma: no-cache"); 
     header("Expire: 0"); 
     readfile("$arc_name"); 
     exit(); 
    } 
} 

通常,ZIP存檔文件是在/ wp-admin /目錄下創建的。我不想在此目錄中創建和刪除臨時文件,因爲它運行的是wordpress的後端。

當我在$arc_name中包含文件的路徑時,代碼會中斷。我查看了$ zip-> filename的值,並將值從「C:/wamp/www/company/user-upload/temp/Tony_Beroni_000001.zip」更改爲「C:\ wamp \ www \ company \ user-上傳\\ TEMP \ Tony_Beroni_000001.zip」。我認爲這可能是一個問題,因爲WAMP和本地Apache服務器之間的區別(沒有雙關意圖)。

有誰知道如何在特定的目錄下用PHP創建ZIP壓縮文件?

編輯:我注意到,我在相反有參數爲$zip->addFile($txt_name,$txt_path);應該$zip->addFile($txt_path, $txt_name);

回答

2

如果你在做跨平臺開發(即Windows和Linux)。你應該alwasy指定使用PHP DIRECTORY_SEPARATOR常數像路徑:

$full_file_path = DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'to'. DIRECTORY_SEPARATOR . 'file' . DIRECTORY_SEPARATOR . $file_name; 

可以,只要你喜歡定義路徑,只要運行Web服務器有權限寫入該路徑。

+0

使用DIRECTORY_SEPARATOR進行更改後,我的編輯中的代碼完美工作。至於標題信息,我將文件名保存爲$ arc_name,當我調用$ zip-> open()和readfile()時,我使用一個新值$ arc_path,其中包含名稱和路徑。謝謝,邁克。 – Gecko 2012-07-26 16:23:57

0

$ arc_name是您定義zip路徑 的第一個參數,用於打開zip。

相關問題