0

我正在尝试通过从 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();

方法二:

$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 页面时,它就不起作用了。我的代码有什么错误?

4

2 回答 2

0

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

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

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

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

于 2012-05-20T13:13:20.857 回答
0

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

$zip->addFile($filename);

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

于 2012-05-21T02:33:29.263 回答