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
このZIPアーカイブが作成された後、ページはjavascriptを使用してリロードされます。ページはファイルが作成されているかどうかを確認し、存在する場合はダウンロードを行います。何が起きているようですが、ZIPファイルが$ zip_archive-> close()で正常に閉じられていますが、ファイルは実際には折り返していません。したがって、ページがarchive-name.zipを探してリロードした場合、存在するのはarchive-name.zip.a09600だけです。したがって、コードのZIP作成セグメントに降りてきて、それが正しいものになるまで再開します。これがZIPアーカイブの閉鎖に気づかない原因になっているのかどうかは分かりません。 – Dogoferis