Zip文件未创建

时间:2012-05-20 13:04:48

标签: php html forms zip

我试图通过从HTML表单发送文件名来将文件添加到zip中。 HTML代码是

<form action="act.php" method="POST">
<input type="checkbox" name="send1" value="filename1.extension">
<input type="checkbox" name="send1" value="filename2.extension">
</form>

PHP

我试过两种方式 方法1:

$zipfilename="abcd.zip";
$zip= new ZipArchive();
$zip->open($zipfilename, ZipArchive::CREATE);
foreach($_POST['send1'] as $filename)
{
$zip->addFile($filename);
}
$zip->close();

方法2:

$zipfilename="abcd.zip";
$filestozip=array();
foreach($_POST['send1'] as $filename)
{
$filestozip[]=$filename;
}

$zip= new ZipArchive();
$zip->open($zipfilename, ZipArchive::CREATE);

foreach($filestozip as $filename2)
{
$zip->addFile($filename2);}
}

$zip->close();

但是Zip文件没有被创建。我试图用$ filetozip的静态代码检查Zip语法为

$filestozip[0]="filename1.extension";
$filestozip[0]="filename1.extension";

有效。但是当数据来自另一个HTML页面时,它不起作用。我的代码中有什么错误?

2 个答案:

答案 0 :(得分:0)

您正在使用ZipArchive :: addFile($ file),它希望这些文件存在于服务器上的某个位置,或者如果使用支持的协议,则位于另一台服务器上的某个位置。

您的脚本是否可访问/读取这些文件?它是你正在使用的完整路径还是相对的路径?

如果你使用file_get_contents($ filename);它会输出预期的数据吗?

在使用addFile()之前,您应该始终检查file_exists。

答案 1 :(得分:0)

发现问题。我的逻辑没有问题。

$zip->addFile($filename);

正如我之前所说,$ filename变量的数据是从HTML中收到的,其中任何空格都被我故意替换为%20。这种替换的原因是使用数据启用到文件的链接。但如果空格被%20替换,zipArchive :: addFile()不会添加最终导致Zip创建失败的zip文件。