PHP zip功能问题

时间:2011-06-09 21:54:34

标签: php upload zip

您好我使用以下代码在上传时压缩包裹

$nameFile = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$download_folder = './CopyrightFiles/';

$zip = new ZipArchive();
$fileconpress = $download_folder.$nameFile.".zip";

$conpress = $zip->open($fileconpress, ZIPARCHIVE::CREATE);
if ($conpress === true)
{

    $zip->addFile($tmpName);
    $zip->close();
    echo $fileconpress."<br/>";
    echo "yess !! Success!!!! ";
}
else echo " Oh No! Error";

似乎工作正常。

但是有两个问题。

首先,它会使用原始扩展名保存文件,例如:image.JPG.zip

此外,当我将zip包移动到我的本地计算机(Mac)并打开ZIP内部时,我只能找到一个内置二进制文件的tmp文件夹而不是图像或应该存在的文件!

到底是怎么回事?

请告知

谢谢

2 个答案:

答案 0 :(得分:1)

那是因为你的“二进制”文件只是PHP用来临时存储上传文件的临时名称。这就是为什么它是$ _FILES数组中的“tmp_name”。

试试这个:

$zip->addFile($tmpName, $nameFile);

第二个参数允许您指定文件名称在zip中的名称。

要防止'file.jpg.zip',请尝试:

$fileconpress = $download_folder .  pathinfo($_FILES['file']['name'], PATHINFO_FILENAME) . ".zip";

答案 1 :(得分:1)

问题#1:
您需要手动删除扩展程序:

$filename = explode('.', $_FILES['file']['name']);
$filename = $filename[0];


问题#2:
$ tmpName不包含文件的文件名。您需要在addFile()中传递$ localname参数。请参阅http://php.net/manual/en/function.ziparchive-addfile.php