Нет ошибки при создании zip, но он не создается

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

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

Ответ 1

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

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

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

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

if($res === TRUE) {
    ...
} else {
    var_dump($res);
}

Ответ 2

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

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

Ответ 3

Проверьте, что каждый из ваших файлов существует до вызова $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';
}

Ответ 4

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

Решено, создав файл ".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!";
}

Ответ 5

разбить его на этапы.

if ($res === TRUE) {

  check if file_exist

check if addFile give any error
}

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

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

Ответ 6

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

if (!$file->isDir())

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