Использование zipArchive addFile () не добавит изображения в zip

Я был на это некоторое время. Это действительно работало один раз, а затем никогда больше. он просто не создает zip-файл. Файл существует.

$zip = new ZipArchive(); $filename = "./test" . time() .".zip"; if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) { exit("cannot open <$filename>\n"); } $thisdir = "$_SERVER[DOCUMENT_ROOT]/zip"; $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png"); echo "numfiles: " . $zip->numFiles . "\n"; echo "status:" . $zip->status . "\n"; $zip->close(); 

Если я добавлю что-то вроде

 $zip->addFromString("testfilephp.txt", "#1 This is a test string added as testfilephp.txt.\n"); 

он создает zip с txt-файлом в нем, но не подходит для любого типа существующего файла.

Метод ZipArchive :: addFile () принимает путь к файлу в качестве его первого параметра, но не все пути создаются равными. Метод addFile () молча отклоняет файл, и вы никогда не знаете, что пошло не так. Как можно получить из вопроса, альтернативным подходом было бы:

 // $zip->addFile($file); $content = file_get_contents($file); $zip->addFromString(pathinfo ( $file, PATHINFO_BASENAME), $content); 

Помимо того, что код работает, файл_get_contents () также генерирует приличные сообщения об ошибках.

Метод ZipArchive::addFile() принимает путь к файлу в качестве его первого параметра.

Здесь вы используете:

 $zip->addFile("/trash-icon.png", "/gabage.png"); 

Это означает, что вы пытаетесь добавить файл /trash-icon.png в свой архив.

Вы уверены, что этот файл существует?

Обратите внимание, что есть / в начале пути этого файла , что указывает, что это абсолютный путь.
Может быть, это / должно быть удалено, чтобы использовать относительный путь?

См. Ответ на этот вопрос – он также работает для изображений и использует addFile вместо addFromString, который, насколько я знаю, легче использовать в памяти.

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

Перед добавлением файла в zip-архив всегда лучше проверить, существует ли файл.

 $thisdir = "$_SERVER[DOCUMENT_ROOT]/zip"; if (file_exists($thisdir . "/trash-icon.png")) { $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png"); }