@aksined_by
Php-developer

ZipArchive после закрытия не появляется (php.5.2). Как узнать причину?

По работе сейчас приходится писать миграцию данных с одного древнего проекта на новый. Старый проект был ещё во времена 5.2 и обновлять его - самоубийство.
Для миграции данных необходимо дёрнуть api метод нового проекта, который ожидает zip архив со всеми документами + json файл с реквизитами к документу.

На тестовом серваке есть старый проект с ~3к документами. 99% из них мигрировались без проблем, ещё около сотни документов никак не генерятся в zip-ку.

В начале и в конце метода вызываю error_get_last, что бы убедиться, что ошибок нет, либо новой ошибки не случилось (в сравнении с началом метода).

Вот пример получившегося лога: (имя заменяется на uniqueid(), пути замазаны по причинам наличия имени заказчика и имени проекта. Пробелов и кириллицы в путях нет.).
60c07909d82a7902444972.png

self::debugApi('generate a zip file');
$zip = new ZipArchive();
do {
    $titleToZip = uniqid();
    $zipFileFullPath = $path . DIRECTORY_SEPARATOR . $titleToZip . '.zip';
} while (file_exists($zipFileFullPath));
$zipCreateSuccessfully = $zip->open($zipFileFullPath, ZipArchive::CREATE);
if ($zipCreateSuccessfully !== true) {
    self::debugApi( 'Document with id '.$page_id.' broken. Can not create a zip file. Error code: '.$zipCreateSuccessfully);
    return false;
} else {
    self::debugApi('zip file as object create successfully');
}

/* some code here */

self::debugApi('begin add file index to zip');
$zip->addFromString('index', (string) json_encode($index));

self::debugApi('Zip status: ' . $zip->getStatusString() . '. Num files: ' . $zip->numFiles);
self::debugApi('trying to close zip an object and create a file');
if ($zip->close()){
    self::debugApi('zip file as file create successfully');
} else {
    self::debugApi('((ERROR)) the zip file after closing the object was not found. Path for search: ' . $zipFileFullPath);
    self::debugApi('call error_get_last: ' . print_r(error_get_last(),1) );
    return false;
}
/* call import method */
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
@aksined_by Автор вопроса
Php-developer
Залез в исходники.
Генерировать предупреждение с причинами данной "ошибки" Zend начали только с 7й версии php.
60c1c34f2c541879112247.png

На версии 5.2 просто возвращался false и дальше делай что хочешь. Вопрос закрыт.
60c1c3570395d426355648.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Laptop.ru Москва
от 150 000 до 190 000 ₽
DKLINE Санкт-Петербург
от 120 000 до 150 000 ₽
Laptop.ru Москва
от 130 000 до 170 000 ₽