По работе сейчас приходится писать миграцию данных с одного древнего проекта на новый. Старый проект был ещё во времена 5.2 и обновлять его - самоубийство.
Для миграции данных необходимо дёрнуть api метод нового проекта, который ожидает zip архив со всеми документами + json файл с реквизитами к документу.
На тестовом серваке есть старый проект с ~3к документами. 99% из них мигрировались без проблем, ещё около сотни документов никак не генерятся в zip-ку.
В начале и в конце метода вызываю
error_get_last, что бы убедиться, что ошибок нет, либо новой ошибки не случилось (в сравнении с началом метода).
Вот пример получившегося лога:
(имя заменяется на uniqueid(), пути замазаны по причинам наличия имени заказчика и имени проекта. Пробелов и кириллицы в путях нет.).
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 */