実際の PHP 開発では、リモート ページから返されるコンテンツを取得するために file_get_contents 関数を使用することがよくありますが、リモートの応答時間が非常に遅い場合、file_get_contents() は常にそこでスタックし、タイムアウトしません。 Web サービスの Linux サーバーのシステム負荷が突然増加することがあります。top コマンドを使用して、多くの php-cgi プロセスの CPU 使用率が 100% に近いことを確認します。
php.ini には、PHP スクリプトの最大実行時間を設定できるパラメータ max_execution_time があることはわかっていますが、php-cgi (php-fpm) では、このパラメータは有効になりません。 PHP スクリプトの最大実行時間を実際に制御できるのは、php-fpm.conf 設定ファイル内の次のパラメータです:
C コード
ワーカー プロセスが終了するまでの単一リクエストの処理のタイムアウト (秒単位)
「max_execution_time」ini オプションが何らかの理由でスクリプトの実行を停止しない場合に使用する必要があります
「0s」は「オフ」を意味します
デフォルト値は 0 秒です。つまり、PHP スクリプトは実行を続けます。このように、すべての php-cgi プロセスが file_get_contents() 関数でスタックすると、この Web サーバーは新しい PHP リクエストを処理できなくなります。ただし、このパラメータを変更して PHP スクリプトの最大実行時間を設定する必要があります。症状を治療するだけで、根本的な原因は治療しません。たとえば、
完全な解決策を達成するには、PHP プログラマーが file_get_contents("http://example.com/") を直接使用する習慣を変更できるようにするだけですが、それをわずかに変更し、タイムアウトを追加し、次のメソッドを使用して HTTP を実装します。 GET リクエスト。それが面倒な場合は、次のコードを自分で関数にカプセル化することもできます。