2011-01-11 3 views
0

У меня есть PHP-скрипт (работает PHP 5.2 на Apache 2.2), который создает zip-архив файлов для загрузки пользователем. Кажется, все работает нормально; единственная проблема, которую я имею, заключается в том, что периодически будет создано несколько файлов, прежде чем архив будет успешно завершен. Пример:PHP 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 
+0

После создания этого ZIP-архива; страница перезагружается с помощью javascript. Страница проверяет, был ли файл создан (и существует), и если он выполняет загрузку. Похоже, что файл ZIP закрывается успешно с помощью $ zip_archive-> close(), но файл фактически не завершается. Поэтому, когда страница перезагружает поиск archive-name.zip, единственное, что существует, - archive-name.zip.a09600; поэтому он снова попадает в сегмент создания ZIP-кода, пока он не поправится. Не уверен, что может привести к тому, что это приведет к закрытию ZIP-архива. – Dogoferis

ответ

0

Это оказалось фактически проблемой, связанной с сеансом; данные сеанса не сохраняются на первом проходе из-за вызовов функции выше в коде, который вызывает session_write_close() несколько раз (обходной путь к известной ошибке с exec()). Проблема заключалась в сохранении/извлечении данных после того, как после этого сеанс снова запустился.

Смежные вопросы