@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 */
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@aksined_by Автор вопроса
Php-developer
Залез в исходники.
Генерировать предупреждение с причинами данной "ошибки" Zend начали только с 7й версии php.
60c1c34f2c541879112247.png

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

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

Войти через центр авторизации
Похожие вопросы