我写了这段代码来创建一个ZIP文件并保存它。但不知何故,它只是没有显示任何错误,但它也没有创建ZIP文件。这是代码:
$zip = new ZipArchive;
$time = microtime(true);
$res = $zip->open("maps/zips/test_" . $time . ".zip", ZipArchive::CREATE);
if ($res === TRUE) {
echo "RESULT TRUE...";
$zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
$zip->addFromString('how_to_install.txt', 'Some Explanation...');
$zip->close();
$zip_created = true;
echo "FILE ADDED!";
}
我做错了什么,我该如何解决?
答案 0 :(得分:15)
可能apache或php没有权限在该目录中创建zip存档。来自ZipArchice::open的一条评论:
如果你正在写的目录或 保存到没有正确的 权限设置,你不会得到任何 错误消息,它看起来像 一切都很好......除了它 不会改变!
相反,请确保收集 ZipArchive :: close()的返回值。 如果它是假的......它没有用。
在if语句中添加else子句并转储$ res以查看结果:
if($res === TRUE) {
...
} else {
var_dump($res);
}
答案 1 :(得分:9)
有两种情况,zip不会产生错误。
zip->close
然后存档时,一个文件不可用
将失败,您的zip文件将不会被创建。 答案 2 :(得分:7)
在调用$ zip-> addFile之前,请检查您的每个文件是否存在,否则将不会生成zip并且不会显示错误消息。
if(file_exists($fichier->url))
{
if($zip->addFile($fichier->url,$fichier->nom))
{
$erreur_ouverture = false;
}
else
{
$erreur_ouverture = true;
echo 'Open error : '.$fichier->url;
}
}
else
{
echo 'File '.$fichier->url.' not found';
}
答案 3 :(得分:5)
我有一个完全相同的问题,即使有完整的写作/阅读权限。
通过手动创建“.zip”文件,然后将其传递给ZipArchive来解决:
$zip = new ZipArchive;
$time = microtime(true);
$path = "maps/zips/test_" . $time . ".zip"
touch($path); //<--- this line creates the file
$res = $zip->open($path, ZipArchive::CREATE);
if ($res === TRUE) {
echo "RESULT TRUE...";
$zip->addFile("maps/filename.ogz","filename.ogz"); //Sauerbraten map format
$zip->addFromString('how_to_install.txt', 'Some Explanation...');
$zip->close();
$zip_created = true;
echo "FILE ADDED!";
}
答案 4 :(得分:1)
将其分解为步骤。
if ($res === TRUE) {
check if file_exist
check if addFile give any error
}
if($zip->close())
{
$zip_created = true;
echo "FILE ADDED!"
}
检查是否启用了zip的phpinfo:)
答案 5 :(得分:1)