ホームページ >バックエンド開発 >PHPチュートリアル >PHP で AJAX リクエストが相互にブロックされるのはなぜですか?

PHP で AJAX リクエストが相互にブロックされるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-26 16:59:30307ブラウズ

Why Do My AJAX Requests Block Each Other in PHP?

相互にブロックする同時 AJAX リクエスト

特定の状況では、AJAX リクエストが同時に実行されず、予期しない動作が発生することがあります。この問題は、データを XSLX ファイルにエクスポートする際に進行状況を表示するように設計された 2 つの同時 AJAX リクエストで問題が発生したときに発生しました。最初のリクエストは長い PHP スクリプトをトリガーし、2 番目のリクエストは定期的に進行状況の更新をチェックします。

調査の結果、2 番目の AJAX リクエストは最初のリクエストが完了するのを待ってから実行されることが判明しました。この動作は、PHP のセッション ブロックが原因であると考えられます。

PHP のセッション ブロック

デフォルトでは、PHP はファイルを使用してセッション データを保存します。セッションが開始されると (session_start() 関数を使用)、PHP は書き込み用にセッション ファイルを開き、排他的アクセスを確保するためにそれをロックします。このロック メカニズムにより、同時リクエストが同時にファイルにアクセスすることが防止されます。その結果、2 番目の AJAX リクエストは、最初のリクエストが完了してセッション ファイルのロックが解除されるまで待機してから実行する必要がありました。

解決策

これに対する解決策問題は、PHP のデフォルトのファイルベースのセッション ストレージを無効にするか、セッション ファイルへの書き込み後にセッション ファイルを明示的に閉じてロックを解除することです。

ファイルベースのセッション ストレージを無効にするには、php.ini に次の行を追加します。 file:

session.save_path =

セッション ファイルを明示的に閉じるには、session_write_close() 関数を使用します:

<code class="php"><?php
    session_start();

    $_SESSION['foo'] = 'bar'; // Write data to the session

    session_write_close(); // Close the session file

    echo $_SESSION['foo']; // You can still read from the session.
?></code>

これらのソリューションを実装することで、2 番目の AJAX リクエストが確実に同時に実行されるようにすることができます。最初のものを使用すると、遅延なく進行状況を追跡できます。

以上がPHP で AJAX リクエストが相互にブロックされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。