はじめに
PHP-FPM は実際には PHP ソース コードのパッチであり、FastCGI プロセス管理を PHP パッケージに統合するように設計されています。 PHP ソース コードにパッチを適用する必要があり、PHP をコンパイルしてインストールした後に使用できるようになります。
最新のPHP 5.3.2のソースコードツリーにPHP-FPMを直接統合したブランチがダウンロードできるようになりました。次のバージョンではPHPのメインブランチに統合される予定だそうです。 Spawn-FCGI と比較すると、PHP-FPM は CPU とメモリの制御が優れており、前者はクラッシュしやすく、crontab で監視する必要がありますが、PHP-FPM にはそのような問題はありません。
PHP5.3.3 には php-fpm が統合されており、サードパーティのパッケージではなくなりました。 PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。そのため、spawn-fcgi よりも多くの利点があるため、PHP に正式に組み込まれています。 PHP-FPM を有効にするには、./configure で ?enable-fpm パラメータを渡します。
PHP-FPM を使用して PHP-CGI の FastCGI プロセスを制御します
/usr/local/ php/sbin/ php-fpm{start|stop|quit|restart|reloadate}
--start は php の fastcgi を開始しますProcess
--stop php
のfastcgiプロセスを強制終了します--quit php
のfastcgiプロセスをスムーズに終了します--restart php
のfastcgiプロセスを再起動します--reload phpのphp.iniをスムーズにリロードします
-- logrotate はログ ファイルを再度有効にします。
機能これらの機能はすべて「非中断」方法で実装されます。つまり、これらを使用しない場合、それらの存在は PHP の機能に影響を与えません。それらはすべて「透過的」です。
エラーヘッダー
範囲: php.ini オプション
カテゴリ: 利便性
デフォルトでは、アクセスされた PHP スクリプトに構文エラーが含まれている場合、ユーザーは空の「200 ok」ページを受け取ります。これは不便です。エラー ヘッダー この php.ini オプションを使用すると、この場合、「HTTP/1.0 550 Server Made Big Boo」などの HTTP エラー コードを生成できるため、Web サーバーのリクエストが中断され、正しいエラー ページが表示されます。
このような関数を実装したい場合は、php.ini に fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo" を追加する必要があります
似ていますが、同じではない関数が php- に追加されています5.2.4: アクセスした PHP スクリプトに構文エラーがあり、display_errors = off の場合、すぐに「HTTP/1.0 500 Internal Server Error」が返されます。
503 エラーを設定する必要がある場合、またはこの動作を display_errors 設定とは独立させたい場合は、fastcgi.error_header を使用できます。 php-5.2.5 以降で php-fpm を有効にすると、fastcgi.error_header の優先度が高くなります。
最適化されたアップロード サポート
本質: Web サーバー サポート
タイプ: 最適化
名前が示すように、この機能はファイルのアップロードを含む大規模な POST リクエストの処理を高速化できます。最適化は、リクエスト本文を一時ファイルに書き込み、リクエスト本文の代わりに fastcgi プロトコルを通じてファイル名を渡すことによって実現されます。私の知る限り、この機能をサポートしているのはnginx0.5.9以降のみです。明らかに、このモードは PHP と Web サーバーが同じマシン上にある場合にのみ使用できます。
nginx のサンプル構成:
location ~ .php$ {
client_body_in_file_only clean;
...
fastcgi_pass ...;
}
にありますphpで何も設定する必要はありません。 php がパラメータ REQUEST_BODY_FILE を受信した場合は、リクエストの本文を読み取ります。そうでない場合は、fastcgi プロトコルからリクエストの本文を読み取ります。
この機能と組み合わせると、tmpfs (Linux) などの一時ファイルにインメモリ ファイル システムを使用することを検討できます。
client_body_temp_path /dev/shm/client_body_temp;
fastcgi_finish_request()
スコープ: php 関数
タイプ: 最適化
この機能は、一部の PHP リクエストの処理速度を向上させることができます。この最適化は、ページの生成後に何らかの処理を実行できる場合に使用できます。たとえば、memcached へのセッションの保存は、ページが Web サーバーに渡された後に行うことができます。 fastcgi_finisth_request() を使用すると、この機能により応答出力を終了でき、Web サーバーはすぐに応答出力をせっかちなクライアントに渡し始めることができます。この時点で、PHP は要求のコンテキストで多くのことを処理できます。セッションの保存、アップロードされたビデオの変換、統計の処理など。
fastcgi_finisth_request() はシャットダウン関数の実行をトリガーします。
request_slowlog_timeout
スコープ: php-fpm.conf オプション
カテゴリ: 利便性
このオプションを使用すると、遅いスクリプトを追跡し、コールスタックとともにログファイルに記録できます。たとえば、次の設定:
例を参照してください。はい、スクリプトの実行に 5 秒以上かかりました。おそらく、mysql (トップ バックトレース) の応答が遅いことが原因でした。