2011-01-11 11 views
0

私はダウンロードするためのファイルのzipアーカイブを作成するPHPスクリプト(Apache 2.2でPHP 5.2を実行しています)を持っています。すべてがうまくいくようです。私が持っている唯一の問題は、ZIPアーカイブが正常に終了する前に定期的に複数のファイルが作成されるということです。例:これはないPHP Zipアーカイブを散発的に複数のファイルを作成する

アーカイブ-name.zip.b09600

アーカイブ-name.zip.c09600

archive-name.zipアーカイブname.zip.a09600毎回起こることはありません。定期的にしかファイルは作成されますが、これらの余分なファイルは終了後にサーバーに残されることがあります。 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()の既知のバグを回避する)。問題は、セッションがそれ以降に再びバックアップを開始した後にデータを保存/取得することにありました。

関連する問題