レンタルサーバー選びの迷いを解決!全力サポートします

Google or AdMax Promotion (srv)

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: インストールにあたっての一般的な注意事項 – Manual

 

これだけではイメージが沸かないというか、
必要とされる「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

(引用)howto/PHP – MacPorts

 

上記の通り「Command line」「Apache 2 module」は、
必要なもののいずれかをインストールすればいいとなっています。

それと、接続するデータベースのモジュールが必要であるという事です。

 

プロモーション

Google or AdMax Promotion (srvpos)

PHP(CLI)をリネームしてApacheでphpinfo()の確認

では、完全ではありませんが、簡易的に「php」実行ファイルがなくても、
PHPがApache上で動作する例をご紹介します。

こういう事って普段は気にしませんし「当然だろ」と思っていても、
実際にやってみる事って少ないよなと思います。

PHP(CLI)実行の確認

まず、実際に標準バンドルPHP実行ファイルで、
PHPバージョンを確認し、実行できる環境にあることを確認します。

正しく実行できています。

php-work-only-modules_st01

CLI実行可能な状態・ApacheモジュールにPHP実行ファイルは不要

 

次に、環境変数PATHの通ったディレクトリにあるPHP実行ファイルの名前を、
「php」から「php_」へと変更してみます。

当然ですが、ファイルが存在しない為「php -v」では、
phpを実行することができなくなりました。

これでphpファイルに関しては、
他のディレクトリに存在したとしてもフルパス指定以外では、
アクセスができない事が分かります。

php-work-only-modules_st02

ファイルリネームで実行不能・ApacheモジュールにPHP実行ファイルは不要

 

ちなみにそれっぽい他の名称をリネームしても影響はありませんでした。

php-work-only-modules_st07

php関連名称ファイルも影響なし・ApacheモジュールにPHP実行ファイルは不要

 

ではApacheを起動します。
OSX10.7まではシステム環境設定から起動可能です。

php-work-only-modules_st03

Webサーバの起動・ApacheモジュールにPHP実行ファイルは不要

 

なお、httpd.confでは以下のようにモジュールロードのみ、
コメント解除しています。

osx-php-setting_st22

バンドルApacheのphpモジュールロード・phpデフォルト設定

 

またこのモジュールのコンパイル時の設定は以下のようになっています。

osx-php-setting_st23

バンドルApacheのphpinfo()情報・phpデフォルト設定

 

php設定のデフォルトパスとしては「/etc」が指定されています。
そのディレクトリには「php.ini」が存在しない状態で実行しています。

php-work-only-modules_st04

php.iniは未設定・ApacheモジュールにPHP実行ファイルは不要

 

では、phpinfo()の表示を確認します。
php実行ファイルの存在有無に関わらず、phpinfo()の出力が表示され、
PHPがApache上で実行されていることが確認できます。

php-work-only-modules_st05

phpinfo()実行可能・ApacheモジュールにPHP実行ファイルは不要

 

ブラウザで動作チェックをするPHPファイルを表示しています。
Apacheには「Listen 80」設定で動作していますので、
MacOSX上で有効化されているネットワークすべての80ポートに対して、
要求をまちうけていますので、

端末外部向けのIPアドレス(192.168.0.10)
ローカルホスト名称(localhost)
ループバックアドレス(127.0.0.1)

全てに対して応答し、ページを表示しています。

php-work-only-modules_st06

ブラウザのPHP表示・ApacheモジュールにPHP実行ファイルは不要

 

このように、PHPとしてCLI実行ができないような環境であっても、
Apache Handlerとしてモジュールが読み込まれる設定になっていれば、
実際にはPHP実行ファイルの存在は不要です。

 


AdMax Promotion

公開日:

コンテンツナビ
すべて展開 | すべて省略

AdMax Promotion

カテゴリ
すべて展開 | すべて省略

QRコードからもこのURLを開けます。