У меня есть PHP-скрипт (работает PHP 5.2 на Apache 2.2), который создает zip-архив файлов для загрузки пользователем. Кажется, все работает нормально; единственная проблема, которую я имею, заключается в том, что периодически будет создано несколько файлов, прежде чем архив будет успешно завершен. Пример:
archive-name.zip
архив-name.zip.a09600
архив-name.zip.b09600
архив-name.zip.c09600
Это происходит не каждый раз; только периодически – файл все еще создается, но иногда эти дополнительные «файлы» остаются на сервере после его завершения. Код, создающий ZIP-архив, выглядит следующим образом:
$zip_archive = new ZipArchive(); $zip_archive->open($archiveFullName,ZIPARCHIVE::CREATE); if(!file_exists($archiveFullName)) { foreach ($completed_file_arr as $zip_file) { $isFiller = substr($zip_file,-8) == "_err.txt"; if(!$isFiller) { $zip_archive->addFile($zip_file,$localname); } else $zip_archive->addFromString ($zip_file, "The requested source file could not be found."); } } while(!$zip_archive->close()) sleep(1); //ensure that the ZIP file finishes closing
Это оказалось на самом деле проблемой, связанной с сеансом; данные сеанса не сохраняются на первом проходе из-за вызовов функции выше в коде, который вызывает session_write_close () несколько раз (обходной путь к известной ошибке с exec ()). Проблема заключалась в сохранении / извлечении данных после того, как после этого сеанс снова запустился.