PHP压缩功能问题

问题描述:

喂我usign下面的代码来压缩在上传包:PHP压缩功能问题

$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文件夹里面的二进制文件,而不是应该在那里的图像或文件!

这到底是怎么回事?

请告知

谢谢

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

试试这个:

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

第二个参数,可以指定该文件的名称应该是拉链内的东西。

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

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

谢谢!有没有办法给ZIP包一个自定义名称?我真的需要这个选项! – 2011-06-09 22:08:37

+0

自定义名称?它保存的文件名是,你的意思是?这是您在' - > open()'调用中指定的$ conpress。 – 2011-06-10 01:27:29

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

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


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

+0

谢谢!有没有办法给ZIP包一个自定义名称?我真的需要这个选项! – 2011-06-09 22:08:43