Проблема в том, что при загрузке zip его содержимое удаляется. Я использую этот код для создания zip и добавления в него файлов:
$zipName = "full path";
$zip = new ZipArchive();
$zip->open($zipName, ZipArchive::CREATE);
for ($i = 0; $i < $length; $i++) {
if ($ausgabeArray[$i]["filePath"] != '') {
$zip->addFromString(basename($ausgabeArray[$i]["filePath"]), file_get_contents($ausgabeArray[$i]["filePath"]));
}
}
$zip->close();
for ($i = 0; $i < $length; $i++) {
unlink($ausgabeArray[$i]["filePath"]);
}
И я использую этот код для загрузки zip:
header("Content-disposition: attachment; filename=" . $name);
header("Content-type: application/".$endung);
readfile($path);
unlink($path);
//name = basename from the path of the zip
//path = full path to the zip
//endung = zip
Это нормально работало на старом сервере, но после изменения перестало работать. Я остановил код один раз перед readfile($path);
и просмотрел zip в папке и загрузил его оттуда, все работало нормально таким образом, но это, конечно, не вариант для тех, у кого нет разрешения на каталоги сервера.
Мы используем этот сервер:
- Ubuntu 20.04.2 LTS
- Apache/2.4.41 (Ubuntu)
- 7.3.29 Приложение FPM
Я не уверен, связана ли проблема со сменой сервера или только с моим кодом, но я ничего не менял, и теперь он больше не работает, поэтому я думаю, что это возможно. Я надеюсь, что у кого-то была эта проблема раньше и может помочь мне. Спасибо!
Вы пробовали
var_dump($ausgabeArray[$i]["filePath"])
внутри первого циклаfor
? Кстати, почему вы используетеZipArchive::addFromString
вместоZipArchive::addFile
?Я предполагаю, что
$ausgabeArray
, вероятно, пусто. Если$length = count($ausgabeArray)
, то$length
может быть 0Я попробовал
var_dump($ausgabeArray[$i]["filePath"])
, он содержит то, что я ищу, zip создан правильно и содержит все значения, которые мне нужны, только когда я загружаю его через PHP, содержимое удаляется, когда я загружаю его вручную, все в порядке :(