1

我有一个 wordpress 网站,我正在为我工​​作的公司创建一个 HR 插件。其中一项功能允许管理员下载包含多个文档的 zip 文件。我已经测试了以下代码,它工作正常,但我希望在我选择的目录中创建 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);

4

2 回答 2

2

如果您正在做跨平台开发(即 Windows 和 Linux)。您应该始终使用 PHP DIRECTORY_SEPARATOR 常量指定路径,例如:

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

您可以随意定义路径,只要正在运行的网络服务器有权写入该路径即可。

于 2012-07-26T15:55:53.883 回答
0

$arc_name 是您定义 zip 路径的地方,它的第一个参数是 zip open。

于 2012-07-26T16:01:10.757 回答