在一个单独的目录中用PHP创建一个ZIP压缩包
问题描述:
我有一个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);
答
如果你在做跨平台开发(即Windows和Linux)。你应该alwasy指定使用PHP DIRECTORY_SEPARATOR常数像路径:
$full_file_path = DIRECTORY_SEPARATOR . 'path' . DIRECTORY_SEPARATOR . 'to'. DIRECTORY_SEPARATOR . 'file' . DIRECTORY_SEPARATOR . $file_name;
可以,只要你喜欢定义路径,只要运行Web服务器有权限写入该路径。
答
$ arc_name是您定义zip路径 的第一个参数,用于打开zip。
使用DIRECTORY_SEPARATOR进行更改后,我的编辑中的代码完美工作。至于标题信息,我将文件名保存为$ arc_name,当我调用$ zip-> open()和readfile()时,我使用一个新值$ arc_path,其中包含名称和路径。谢谢,迈克。 – Gecko 2012-07-26 16:23:57