ホームページ  >  記事  >  バックエンド開発  >  [モダン PHP] 第 2 章 新機能 7 内蔵 HTTP サーバー

[モダン PHP] 第 2 章 新機能 7 内蔵 HTTP サーバー

WBOY
WBOYオリジナル
2016-06-13 12:23:56925ブラウズ

[モダン PHP] 第 2 章 新機能 7 内蔵 HTTP サーバー

内蔵 HTTP サーバー


PHP 5.4.0 以降、Web サーバーが組み込まれていることをご存知ですか?これは、Apache または nginx を使用して PHP ページをプレビューする方法しか知らない PHP 開発者にとって、もう 1 つの未発見の宝石です。 PHP の組み込み Web サーバーを運用環境で使用することはできませんが、この機能はローカル開発には最適なツールです。


PHP コードを書いているかどうかに関係なく、私は PHP の組み込み Web サーバーを毎日使用しています。私は、Drupal フレームワークのコンテンツ管理システムを使用して Web サイトを構築するときに、Laravel および Slim Framework アプリケーションをプレビューするためにこれを使用し、また、静的な HTML および CSS をプレビューするためにも使用します。


PHP の組み込みサーバーは Web サーバーであることを思い出してください。 HTTP プロトコルのみを使用し、PHP ファイルに加えて静的リソースを返すことができます。 MAMP、WAMP、またはその他の強力な Web サーバーを使用せずに、HTML ページをローカルで開発およびプレビューできます。


サーバーの起動


PHP Web サーバーの起動は簡単です。ターミナル プログラムを開き、プロジェクトのドキュメント ルート ディレクトリに移動し、次のコマンドを実行します:

php -S localhost:4000


このコマンドは、ローカルホスト経由でアクセスできる新しい PHP Web サーバーを起動できます。ポート 4000 でリッスンします。現在の作業ディレクトリは、Web サーバーのドキュメント ルート ディレクトリです。


ブラウザを開いて http://localhost:4000 にアクセスし、アプリケーションをプレビューします。アプリケーションの閲覧には Web ブラウザを使用するため、各 HTTP リクエストはターミナル プログラムに記録され、ターミナルに直接出力されます。これにより、アプリケーションに 400 エラーが発生するか 500 エラーが発生するかを検出できます。


場合によっては、他のデバイスがローカル環境の PHP Web サーバーにアクセスできるようにする必要があります (たとえば、 iPad またはプレビュー用のローカル Windows 仮想マシン)。この要件を達成するには、PHP Web サーバーで localhost の代わりに 0.0.0.0 を使用して、すべてのネットワーク接続からのリクエストをリッスンすることができます。

php -S 0.0.0.0:4000


PHP Web サーバーを停止する準備ができたら、ターミナル プログラムを閉じるか、Ctrl+C を押します。


サーバーの構成


アプリケーションがメモリ使用量、ファイルのアップロード、デバッグ、またはバイトコード キャッシュの必要性について特別な要件を持っている場合は特に、アプリケーションが PHP INI 構成ファイルに対応することが非常に一般的です。 PHP 組み込みサーバーを使用する場合、-c パラメーターを使用して、指定された INI ファイルを使用するようにサーバーに指示できます:

php -S localhost:8000 -c app/config /php.ini


カスタム INI ファイルをアプリケーションのルート ディレクトリに置くことをお勧めします。バージョン管理を使用して INI ファイルを保存し、開発チームの他の開発者と共有することもできます。


ルーティング スクリプト


Apache や nginx とは異なり、PHP 組み込みサーバーには明らかな欠陥があります。それは .htaccess ファイルをサポートしていないということです。したがって、多くの一般的な PHP フレームワークで使用されるフロントエンド コントローラーを PHP の組み込みサーバーで使用するのは非常に面倒です。


フロント コントローラーは単一の PHP ファイルであり、すべての HTTP リクエストは フロント コントローラーに (.htaccess ファイルまたは書き換えルールを介して) 転送されます。フロントエンド コントローラー ファイルは、対応する PHP コードへのリクエストのルーティングと分散を担当します。この一般的なパターンは、Symfony およびその他の一般的な PHP フレームワークで使用されます。


PHP 組み込みサーバーは、ルーティング スクリプトを使用してこの欠陥をわずかに補うことができます。ルーティング スクリプトは、各 HTTP リクエストの前に実行されます。スクリプトが false を返す場合、現在の HTTP リクエスト アドレスに対応する静的リソースが直接返されます。それ以外の場合、スクリプトによって返されるコンテンツは HTTP リターン コンテンツとしてブラウザに返されます。つまり、ルーティング スクリプトは実際には .htaccess ファイルの機能をコピーしています。


ルーティング スクリプトの使用は非常に簡単で、PHP スクリプトのファイル アドレスをユーカリとして渡すだけです。ツリーから PHP 組み込みサーバーへの接続 開始コマンド:

php -S localhost:8000 router.php


内蔵サーバーからのリクエストを判定


アクセスされた PHP スクリプトが PHP の組み込みサーバーからのものであるかどうかを区別できる場合もあります。これは、Apache や nginx などの従来の Web サーバーにも役立ちます。おそらく、nginx に特別な HTTP ヘッダー (Status: など) を追加する必要がありますが、PHP Web サーバーでは機能しません。 php_sapi_name() 関数を通じて PHP Web サーバーを特定できます。現在リクエストしているスクリプトが PHP 組み込みサーバーからのものである場合、この関数は文字列 cli-server:

<?phpif (php_sapi_name() === 'cil-server') {    // PHP内置web服务器} else {    // 其它web服务器}

を返します。 欠点


PHP 組み込み Web サーバーは本番環境では使用できません。これはローカル開発のみを目的として設計されています。運用サーバーで PHP 組み込みサーバーを使用している場合、多くのユーザーが不満を抱き、Pingdom からの大量のクラッシュ通知に対処することになります。


  • 組み込みサーバーは 1 つのリクエストしか実行できないため、パフォーマンスが低下します。処理され、他のリクエストはブロックされます。 PHP ファイルが遅いクエリまたはリモート API の戻りでスタックすると、Web アプリケーションが応答しなくなります。
  • 組み込みサーバーは、限られた MIME タイプのみをサポートします。
  • 組み込みサーバーは、ルーティング スクリプトを使用して URL 書き換えを制限します。より高度な URL 書き換え操作

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