我试图通过从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页面时,它不起作用。我的代码中有什么错误?
答案 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文件。