Apache HandlerとしてPHPを動作させるにはモジュールだけあればいい
PHPをApacheサーバー上で動作させている場合に、
ついついPHP本体(CLI版)のインストールをしていたりしませんか?
WindowsなどでPHPをインストールした場合、
PHP(CLI)と一緒にApacheモジュールがセットでインストールされるため、
ついついそういうものだと思ってしまうのですが、
実はCLIとして利用する予定がないのであればモジュールだけで十分なのです。
※CGI実行、FastCGI実行の場合を除く。
Apache HandlerとしてPHPを動作させるにはモジュールだけあればいい
PHPをインストールしてセットアップすると、
当たり前のようにPHP(CLI)版のインストールを行って、
かつApacheモジュールのインストールを行うという手順を行いがちです。
しかしCLIとしてPHPをターミナル(コマンドプロンプト)から
実行することは殆ど無いはずです。
であれば、実はApacheモジュールのみがサーバーにインストールされていればいいのです。
PHPのマニュアルには以下のように書かれています。
インストールを行う前に、PHP を使用する用途を明確にしておく必要があります。 PHP を適用可能な分野としては、 「PHP にできることは?」 のセクションに記述されている通り、主に次の 3 つがあります。
- Web サイトや Web アプリケーション (サーバーサイドのスクリプト)
- コマンドラインのスクリプト
- デスクトップ (GUI) アプリケーション
最初の用途がもっとも一般的で、この場合、PHP 本体、Web サーバー、Web ブラウザ の 3 つが必要となります。Web ブラウザは既にお持ちだと思います。 使用しているオペレーティングシステムのセットアップの状況によっては、 さらに Web サーバーも稼働しているかもしれません(例、Linux 上の Apache や Windows 上の IIS)。また、ホスティング会社で Web 用のスペースを 借りることもできるでしょう。この場合は、自分自身でセットアップを行う必要はなく、 PHP スクリプトを作成し、借りているサーバーにアップロードするだけで、 ブラウザを使って処理結果を見ることができます。
一方、Web サーバーと PHP を自分でセットアップする場合、 サーバーに PHP を組み込む方法が 2 種類あります。 多くのサーバーに対して、各サーバー独自のモジュールインターフェイス (SAPI とも呼ばれます) を通じて、ダイレクトに PHP を動作させることができます。 Apache、Microsoft Internet Information Server、 Netscape、iPlanet サーバーなどがサポートされています。 ISAPI と呼ばれるマイクロソフト互換のモジュールインターフェイスを 持つ Web サーバー(OmniHTTPd など)もサポートされます。 PHP がモジュールのサポートをしていない Web サーバーに対しては、 CGI もしくは FastCGI プロセサとして PHP を使用することができます。 つまり、PHP ファイルへのリクエストの処理を、 PHP のコマンドライン版の実行ファイルを使って行うよう Web サーバーを設定することができます。
コマンドラインでのスクリプト実行に PHP を使用する (たとえば、オフラインで画像を自動生成するスクリプトを書いたり、 指定した引数に応じてテキストファイルを処理したりといった) 場合は、コマンドライン版の実行ファイルが必要となります。 詳細な情報については、 「PHP をコマンドラインから使用する」 の章を参照してください。この場合、サーバーとブラウザは不要です。
これだけではイメージが沸かないというか、
必要とされる「PHP本体」が何を示すのかが不明瞭です。
では次にMacPortのPHPインストールヘルプを見てみます。
Step 1: Install PHP SAPIs
PHP comes in several Server APIs (SAPIs). You can install any or all of these that you need:
(意訳)PHPにはいくつかのサーバーAPI(SAPI)があります。必要なものをいずれかまたは、すべてをインストールすることができます
SAPI Port Install command Command line php70 sudo port install php70 Apache 2 module php70-apache2handler sudo port install php70-apache2handler FastCGI php70-cgi sudo port install php70-cgi FastCGI Process Manager php70-fpm sudo port install php70-fpm Step 2: Install PHP Modules
The SAPI ports contain the core PHP features, but there are many optional features available in separate ports, some of which you may want to install as well. Use port search php70 to see all the ports that are available.
Installing a PHP module automatically makes it available to all PHP SAPIs of the same PHP version.
For example, if you with to interact with a database server, here are some of the choices that exist:
Database server Port Install command MSSQL php70-mssql sudo port install php70-mssql MySQL, MariaDB, Percona php70-mysql sudo port install php70-mysql ODBC php70-odbc sudo port install php70-odbc Oracle php70-oracle sudo port install php70-oracle PostgreSQL php70-postgresql sudo port install php70-postgresql SQLite php70-sqlite sudo port install php70-sqlite
上記の通り「Command line」「Apache 2 module」は、
必要なもののいずれかをインストールすればいいとなっています。
それと、接続するデータベースのモジュールが必要であるという事です。
PHP(CLI)をリネームしてApacheでphpinfo()の確認
では、完全ではありませんが、簡易的に「php」実行ファイルがなくても、
PHPがApache上で動作する例をご紹介します。
こういう事って普段は気にしませんし「当然だろ」と思っていても、
実際にやってみる事って少ないよなと思います。
PHP(CLI)実行の確認
まず、実際に標準バンドルPHP実行ファイルで、
PHPバージョンを確認し、実行できる環境にあることを確認します。
正しく実行できています。
次に、環境変数PATHの通ったディレクトリにあるPHP実行ファイルの名前を、
「php」から「php_」へと変更してみます。
当然ですが、ファイルが存在しない為「php -v」では、
phpを実行することができなくなりました。
これでphpファイルに関しては、
他のディレクトリに存在したとしてもフルパス指定以外では、
アクセスができない事が分かります。
ちなみにそれっぽい他の名称をリネームしても影響はありませんでした。
ではApacheを起動します。
OSX10.7まではシステム環境設定から起動可能です。
なお、httpd.confでは以下のようにモジュールロードのみ、
コメント解除しています。
またこのモジュールのコンパイル時の設定は以下のようになっています。
php設定のデフォルトパスとしては「/etc」が指定されています。
そのディレクトリには「php.ini」が存在しない状態で実行しています。
では、phpinfo()の表示を確認します。
php実行ファイルの存在有無に関わらず、phpinfo()の出力が表示され、
PHPがApache上で実行されていることが確認できます。
ブラウザで動作チェックをするPHPファイルを表示しています。
Apacheには「Listen 80」設定で動作していますので、
MacOSX上で有効化されているネットワークすべての80ポートに対して、
要求をまちうけていますので、
端末外部向けのIPアドレス(192.168.0.10)
ローカルホスト名称(localhost)
ループバックアドレス(127.0.0.1)
全てに対して応答し、ページを表示しています。
このように、PHPとしてCLI実行ができないような環境であっても、
Apache Handlerとしてモジュールが読み込まれる設定になっていれば、
実際にはPHP実行ファイルの存在は不要です。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: