Я был на это некоторое время. Это действительно работало один раз, а затем никогда больше. он просто не создает 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"); }