использование zipArchive addFile () не добавит изображение в zip - PullRequest
9 голосов
/ 24 марта 2011

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

$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-файлом в нем ... но нет никакого другого типа существующего файла.

Ответы [ 4 ]

12 голосов
/ 31 января 2014

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

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

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

2 голосов
/ 24 марта 2011

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


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

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

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


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

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

1 голос
/ 25 ноября 2015

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

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

$thisdir = "$_SERVER[DOCUMENT_ROOT]/zip";
if (file_exists($thisdir . "/trash-icon.png")) {
    $zip->addFile($thisdir . "/trash-icon.png", "/gabage.png");
}
0 голосов
/ 18 марта 2015

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

...