これは、何が起こるかについての非常に一般的で単純化された見解であると言って、序文を述べます。
Webサーバーソフトウェア(ApacheやIISなど)はコードを解釈しません。方法がわかりません。方法を知っているのは、要求を受け取り、それをファイルシステム上のある場所で検索し、要求された項目をブラウザーに送り返すことだけです。それだけです-非常に単純なレベルで。これが、Apacheをインストールし、phpファイルをに追加したときDocumentRoot
に、実行されたPHPの結果が得られない理由です。ファイルだけを戻します。
サーバーにファイルの提供以外の処理を行わせるための最初のステップは、特定のファイルが要求されたときに別の処理を実行するように指示するコードを追加することです。それ以外の場合は、デフォルトのMIMEタイプ(通常はtext / plain)に従ってファイルを提供しようとするだけです。これが、正しく構成されていないサーバーがあり、を要求すると、意図した結果ではなく、ファイルのソースコードが表示される理由です。index.php
したがって、WebサーバーにPHPを「理解」させるには、.php
拡張子が付いたファイルのリクエストが来たときに何をするかをサーバーに指示する必要がありますmod_php
。構成できますか?)、ファイルを読み取り、コードを実行し、結果をコンパイルします。結果をサーバーに送り返し、サーバーは結果をクライアントに配信します。次に、末尾が.phpであるすべてのファイルがmod_phpで処理されるように、Webサーバーを構成します。
この基本的なワークフローは、他の言語にも適用されます。唯一の違いは、サーバーが要求を「オフロード」する対象です。
PHPの場合は上記で説明されていますが、同様にmod_python
、およびfastcgi
、wsgi
およびWebサーバーが処理するように設計されていないオフロード要求に関する他の確立されたプロトコルがあります。
最も一般的な実装には、特定のポート(またはソケット)で要求を待機する長時間実行プロセスがあります。Webサーバーはプロキシとして構成され、特定のパターンに一致するすべてのリクエストをこの長期実行プロセスに渡し、結果を読み取ります。
これが、Ruby on Rails(ラック)、Pythonスクリプト(WSGIを使用)の動作方法です。
これは、nginxのような単純なプロキシのようなWebサーバーが非常に人気がある理由でもあります。これらは、従来のWebサーバーの非常に基本的なタスクのみを実行します。「静的」ファイルを提供し、PHP、Python、ASPなどを処理するために他のプロキシサーバーにリクエストをオフロードするのに優れています。al。
つまり、最終的に、静的ファイルなど、処理を必要としないものすべてを処理するWebサーバーができます。
コードの処理方法を知っている別のプロセスがあります(たとえば、PHPインタープリターを実行するプロセス、またはuWSGIサーバー)。これはWebサーバーからの要求を待機します。
最後に、これらのプロセスを管理するupstartやスーパーバイザーなどのシステムがあります。
これで問題が明確になることを願っています。