Нет ошибки при создании почтового индекса, но он не создается - PullRequest
17 голосов
/ 10 января 2011

Я написал этот код для создания 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!";
}

Что я делаю не так и как я могу это исправить?

Ответы [ 6 ]

15 голосов
/ 10 января 2011

Возможно, apache или php не имеют прав для создания zip-архивов в этом каталоге.Из одного комментария к ZipArchice :: open :

Если каталог, в который вы пишете или сохраняете, не имеет правильных установленных разрешений, вы не получите никакой ошибкисообщений, и все будет выглядеть так, как будто все работало нормально ... за исключением того, что оно не изменилось!

Вместо этого убедитесь, что вы собрали возвращаемое значение ZipArchive :: close ().Если это ложь ... это не сработало.

Добавьте предложение else к вашему оператору if и выведите $ res, чтобы увидеть результаты:

if($res === TRUE) {
    ...
} else {
    var_dump($res);
}
9 голосов
/ 23 января 2013

Есть 2 случая, когда zip не генерирует ошибку.

  1. Убедитесь, что каждый файл, который вы добавляете в zip-файл, действителен.Даже если один файл недоступен, когдаzip->close вызывается, тогда архив завершится ошибкой, и ваш zip-файл не будет создан.
  2. Если ваша папка не имеет прав на запись, zip не сообщит об ошибке.Это закончится, но ничего не будет создано.
8 голосов
/ 26 января 2011

Убедитесь, что каждый ваш файл существует, прежде чем вызывать $ 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';
}
5 голосов
/ 22 октября 2014

У меня была точно такая же проблема, даже когда с полными правами на запись / чтение.

Решено созданием файла ".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!";
}
1 голос
/ 23 августа 2017

Одной из причин того, что zip-файл не создан, является отсутствие проверки, если вы добавляете файл, а не каталог.

if (!$file->isDir())

Я нашел решение здесь .

1 голос
/ 10 января 2011

разбить его на шаги.

if ($res === TRUE) {

  check if file_exist

check if addFile give any error
}

if($zip->close())
{
 $zip_created = true; 
    echo "FILE ADDED!"
}

Проверьте, включен ли phpinfo для zip:)

...