Webエンジニアのメモ帳

技術的な話を中心に書いています。

phpがLinux上で動く仕組み

phpのコードがLinux上で動く仕組みを説明します。

Webサーバーの機能

まず、通常のhtmlファイルがサーバーで表示される仕組みを考えてみます。

サーバーを立てただけでは、当然ですがWebサーバーとしては機能しません。 ブラウザでサーバーのIPアドレスを打ったところで、アクセスはできません。

なので、Webサーバーとして機能させるためには、ApacheやNginxをインストールする必要があります。

Apacheを使う場合は、以下のようにyumで簡単に導入できます。

yum -y install httpd

正確にはインストールするだけでなくFirewallなどの設定が必要ですが、ここでは省略します。

Apacheがインストールされ、Apacheのプロセスが動いている状態で、ブラウザでサーバーのIPアドレスを打ってアクセスします。

たとえばブラウザで以下のURLを打ってアクセスすると、/var/www/html/に配置されているindex.htmlというファイルが表示されます。

http://{サーバーのIPアドレス}/index.html

/var/www/htmlはドキュメントルートと呼ばれていますが、/etc/httpd/conf/に存在するhttpd.confという設定ファイルで指定されており、変えることもできます。

WebサーバーでPHPが動く仕組み

では、htmlファイルではなくphpファイルを表示したい場合にはどうすれば良いのでしょうか。

http://{サーバーのIPアドレス}/index.html

にリクエストが来た際に、/var/www/html/index.htmlではなく、/var/www/html/index.phpを表示したい場合を考えてみます。

この方法ですが、普通はphpをインストールするだけでできます。

yum -y install php

なぜかというと、/etc/httpd/conf/httpd.confにおいて、デフォルトでphpの設定ファイルを読み込むようになっているからです。

実際にサーバー上のhttpd.confを見てみると、

Include conf.modules.d/*.conf

という一文がありました。

これは、conf.modules.dディレクトリにあるconfファイルを全て読み込む、という設定です。

パスはhttpd.confで指定しているServerRootである/etc/httpdからの相対パスなため、/etc/httpd/conf.modules.d以下に存在しているファイルが、実際に読み込まれるファイルになります。

このディレクトリを見てみると、15-php.confというファイルがあります。中身を見てみると

LoadModule php7_module {.soファイルのパス}

というように書かれています。

これは{.soファイルのパス}の中身をphp7_moduleとして読み込む、と言った感じの意味です。

つまり、httpd.confphpに関するconfファイルを読み込むように指定、そのconfファイルはphpに関するモジュールを読み込むようしている、ということです。

このモジュールが読み込まれているおかげで、/var/www/html以下のphpファイルが正しく表示される(phpファイルの中身がそのまま表示されず、phpのコードが実行された結果が出力される)のです。