您好我使用以下代码在上传时压缩包裹
$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文件夹而不是图像或应该存在的文件!
到底是怎么回事?
请告知
谢谢
答案 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。