2009-07-23 7 views
2

私は本当に奇妙な問題を抱えています。同じファイルを同時に呼び出すときにPHPがブロックされる

私はfilemanagerをPHPでダウンロードしてファイルをダウンロードできますが、これはうまくいきます。 スクリプト全体が1つの大きなファイルとして構築されます。

大きなファイルをダウンロードしているうちに、同時にフォルダの内容を参照するためにスクリプトを使用することはできません。それは何もしませんが、ロードを維持します。ダウンロードが完了するとすぐにすべてが再び機能します。

PHPが同じファイルを同時に解析できないようなものがありますか?私がダウンロードしているかどうかにかかわらず、他のスクリプトは魅力のように働くからです。

ヘルプまたはドキュメントへのリンクは高く評価されています:)

+0

あなたはどのようにダウンロードを強制しますか? –

+0

通常の方法:with header() – knittl

答えて

3

セッションを使用していますか?

はいの場合、それはおそらく問題です。デフォルトのセッションハンドラは、セッションが有効なコードが実行されている間にロックされなければならないファイルを使用します。これは実際には、各ユーザがPHPファイルを順番に実行することを意味します。これを解決するには、DBを使用するカスタムセッションハンドラを使用する必要があります。 thisを読んでください。

編集:ロックなしのカスタムセッションハンドラを書くことは難しく、様々な微妙なバグを導入することを指摘したいと思います。あなたがそれを行う必要がある場合は、これについてもっと多くのドキュメントを読んでください!

編集2:時には、session_write_close()を使用して、不要になったセッションを閉じることがあります(コメントを参照)。

+0

うわー、それは分かっていませんでしたが、それは問題になりそうです。 – Thorarin

+0

それは妥当と聞こえる。セッションはコンテンツを送信する前に閉じていますか?私は/これはDBを使用したくない/それはPHPのみです。 – knittl

+0

セッションの使用を終了すると(つまり、ファイルを送信する前に)session_write_close()を呼び出します。それはロックを解除します –

1

ダレモンは正しいですが、別のセッションハンドラを使用する必要はありません。ファイルの送信を開始する前にsession_write_close()に電話すると、セッションファイルのロックが解除され、他のスクリプトは続行できるはずです。

+0

はい、それは動作します – knittl

+0

実際にこの場合、ファイルをプッシュする前にセッションを閉じるだけで良いです。 – daremon

関連する問題