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