PHP マニュアル

著者:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
2008-10-10
編集: Philip Olson
PHP マニュアル翻訳プロジェクト

著作権

Copyright © 1997 - 2008 by the PHP Documentation Group. この著作物は、Creative Commons Attribution 3.0 か それ以降で指定された条件と制約に従う限り配布することができます。 Creative Commons Attribution 3.0 license のコピーは本マニュアルとともに配布されており、 ライセンスの最新版は現在のところ、 » http://creativecommons.org/licenses/by/3.0/ で入手可能です。

修正の有無に関わらず本文書の全体または一部を再配布または再出版したい場合や、 質問がある場合には、 » doc-license@lists.php.net 宛で著作権者まで連絡をしてください。 このアドレスは、一般にアーカイブが公開されているメーリングリストへマップされていることに 注意して下さい。

(訳注)本日本語訳の記述内容により生じたいかなる損害についても 著作権所有者および翻訳者は責任を負いません。



PHP マニュアル


序文

PHP は、"PHP: Hypertext Preprocessor" を意味し、広く使用されているオープンソースの汎用スクリプト言語です。 HTML に埋め込むことができ、Web アプリケーションの開発に特に適しています。 PHP の構文の多くは C、Java、Perl 言語から転用したもので、 簡単に習得することができます。この言語は、動的に生成されるウェブページを Web 開発者が速やかに作成できるようにすることを主な目標として つくられました。しかし、それだけにとどまらず、 もっと多くのことを PHP を使って行うことができます。

このマニュアルは、 関数リファレンス を中心として、言語リファレンス、 PHP の主な機能、 そして、その他の 付録 から構成されています。

本マニュアルを様々な形式で » http://www.php.net/download-docs.php からダウンロードすることが出来ます。 このマニュアルがどのように作成されているか、といった詳細な情報は 付録の 本マニュアルについて にあります。 PHP の歴史 に興味がある場合は、 関連する付録も参照して下さい。

著者と貢献者

我々は、現在最も活動的な人々をこのマニュアルの先頭に掲げています。 しかし、他にも多くの我々の活動を支援してくれる人がおり、 また、過去にこのプロジェクトを支援してくれた人がいます。 マニュアルのユーザ注記により支援してくれた名前がわからない人々がいますが、 彼らの支援は非常に有益です。以下に掲げたリストはアルファベット順です。

著者と編集者

以下の方々は本マニュアルに ついてコンテンツを提供したことで大きな貢献をしています。 Bill Abt, Jouni Ahto, Alexander Aulbach, Daniel Beckham, Stig Bakken, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Rafael Martinez, Rick McGuire, Yasuo Ohgaki, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Michael Wallner, Lars Torben Wilson, Jim Winstead, Jeroen van Wolffelaar そして Andrei Zmievski.

以下の方々は本マニュアルについて多くの編集作業を行ったことで大きな貢献を しています。 Stig Bakken, Gabor Hojtsy, Hartmut Holzgraefe そして Egon Schmid.

ユーザ注記の管理者

現在最もアクティブな管理者。 Friedhelm Betz, Etienne Kneuss, Nuno Lopes, Hannes Magnusson, Felipe Pena そして Maciek Sokolewicz.

以下の方々もユーザ注記の管理に注力してくれました。 Mehdi Achour, Daniel Beckham, Friedhelm Betz, Victor Boivie, Jesus M. Castagnetto, Nicolas Chaillan, Ron Chmara, Sean Coates, James Cox, Vincent Gevers, Sara Golemon, Zak Greant, Szabolcs Heilig, Oliver Hinckel, Hartmut Holzgraefe, Rasmus Lerdorf, Matthew Li, Andrew Lindeman, Aidan Lister, Maxim Maletsky, Bobby Matthis, James Moore, Philip Olson, Sebastian Picklum, Derick Rethans, Sander Roobol, Damien Seguy, Jason Sheets, Tom Sommer, Jani Taskinen, Yasuo Ohgaki, Jakub Vrana, Lars Torben Wilson, Jim Winstead, Jared Wyles そして Jeroen van Wolffelaar.


翻訳者

本マニュアルの日本語への翻訳は、PHP マニュアル翻訳プロジェクトにて行われています。 主な翻訳者は、以下の通りです(名前のアルファベット順)。

Chihiro Higuchi, Haruki Setoyama, Hideyuki Shimooka, Kazuhiro Ogura, Machino Satoshi, Masaharu Iwai, Masahiro Takagi, Masaki Fujimoto, Michihide Hotta, Moriyoshi Koizumi, Rui Hirokawa, Shigeru Kanemoto, Tadashi Jokagi, Yasuo Ohgaki, Yu Watanabe, Yusuke Hata.





はじめに


入門

目次

PHP とはなんでしょう?

PHP ("PHP: Hypertext Preprocessor" を再帰的に略したものです) は、広く使われているオープンソースの汎用スクリプト言語です。 PHP は、特に Web 開発に適しており、HTML に埋め込むことができます。

で、結局のところどういう意味なのでしょう? 以下に例を示します。

例1 初歩的な例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php
            
echo "Hi, I'm a PHP script!";
        
?>

     </body>
</html>

HTMLを出力するために多くのコマンドを記述する (C や Perl のように) 代わりに、PHP のページは "何か" (この例では、"Hi, I'm a PHP script!" と出力) を行うコードを HTML に埋め込むことになります。 PHP のコードは特別な 開始および終了の処理命令 <?php?> で囲まれており、これによって "PHP モード" の切り替えを行います。

PHP がクライアントサイド JavaScript のようなものと異なっている点は、 コードがサーバーで実行され、その結果がクライアントに送信されるということです。 クライアントは、スクリプトを実行した結果を受け取りますが、 その出力を作成したコードがどんなものなのかを知ることはできません。 全てのHTMLファイルをPHPで処理するようにWebサーバー を設定することさえ可能で、この場合、ユーザーが袖の内に何があるかを 見分けることは不可能になることでしょう。

PHPを使用する上で最も優れている点は、初心者に対しては非常に分かり 易いと同時に、プロフェッショナルのプログラマに対しては多くの進んだ 機能を提供している点です。PHPの機能を羅列した長い一覧表を読まなけ ればならないのかと心配する必要はありません。PHPはすぐに始められま すし、数時間の内に簡単なスクリプトが書けるようになります。

PHPを使用した開発ではサーバサイドでの動作に焦点が当てられますが、 他にも多くのことが可能です。 PHPにできることは?まで読み進めてみてください。 Webプログラミングのみに関心がある場合には、 簡易チュートリアルに進んでください。


PHPにできることは?

あらゆることができます。PHPでは主にサーバサイドでの活用に焦点が 当てられているため、フォームからデータを取得したり、動的にページ の内容を生成したり、クッキーを送信・受信するといった他のCGI プログラムに出来ることは全て行うことが出来ます。しかし、これが 全てではありません。

PHPスクリプトが使用される場所は主に3つあります。

  • サーバサイドでのスクリプティング。これは最も古くからあり PHPの中心となる分野です。ここでPHPを動作させるには 3つのものが必要です。PHPパーサ(CGIもしくはサーバモジュール)、 ウェブサーバ、そしてブラウザです。ウェブサーバは インストールされたPHPと連結して起動されなければなりません。 ブラウザでウェブサーバにアクセスし、PHPページを閲覧することで PHPプログラムの出力を得ることが出来ます。インストール手順の章に詳しい 情報があります。
  • コマンドラインでのスクリプティング。PHPスクリプトは サーバもブラウザも無しで動作させるようにすることも出来ます。 この場合、PHPパーサだけが必要となります。このタイプは cron(Windowsではタスクスケジューラ)を使用して一定間隔で スクリプトを実行したい場合や、ちょっとした文書処理を 行うのに最適な方法です。 コマンドラインでPHPを使うの章に詳しい情報があります。
  • クライアントサイドでのGUIアプリケーション。PHPはおそらく ウィンドウを使用したアプリケーションを書くのに最適な言語 では無いと思いますが、PHPに非常に慣れている場合には、そして PHPの進んだ機能をクライアントサイドでのアプリケーションで 使用した場合にはPHP-GTKを使ってプログラムを書くことが出来ます。 同様の方法でクロスプラットフォーム名アプリケーションを書く ことも出来ます。PHP-GTKはPHPを拡張するもので、通常の ディストリビューションには含まれません。もし興味があるなら » PHP-GTKのサイトを 訪れてみてください。

PHPは Linux, 多くのUnix系システム(HP-UX, Solaris, OpenBSD等), Microsoft Windows, Mac OS X, RISC OS, その他全ての有名なOSで 動作します。PHPはまた現在使用されているほとんど全てのウェブサーバを サポートします。これには、Apache, Microsoft Internet Information Server, Oreilly Website Pro server, Caudium, Xitami, OmniHTTPd等 が含まれます。そうしたウェブサーバの大部分に対してPHPはモジュールを 提供し、その他のものに対してはCGIが提供されます。

つまりPHPを使用する場合にはOSとウェブサーバを自由に選ぶことが出来ます。 さらに手続き型のプログラミングかオブジェクト指向のプログラミングか、 もしくはそれらを混在させるかといった選択を行うこともできます。 現在のバージョンのPHPでは標準的なOOPの機能が全て実現されている 訳ではありませんが、(PEARライブラリを含め)多くのコードライブラリ や大きなアプリケーションがOOPのみを使用して書かれています。

PHPはHTMLを出力するだけではありません。PHPはイメージやPDFファイル、 そして(libswfやMingを使って)Flashムービーまでもをその場で生成する 機能を備えています。またXHTMLやXMLといったその他の文書も自動的に 生成することが出来ますし、ファイルシステムに保存したり、印刷したり サーバ側でキャッシュすることも出来ます。

PHP の機能の中で最も強力で優れた機能は、広範なデータベースをサポー トしていることでしょう。データベース機能を用いたWebページの作成は、 非常に簡単です。以下のデータベースが現在サポートされています。

  • Adabas D
  • dBase
  • Empress
  • FilePro (読込みのみ)
  • Hyperwave
  • IBM DB2
  • Informix
  • Ingres
  • InterBase
  • FrontBase
  • mSQL
  • Direct MS-SQL
  • MySQL
  • ODBC
  • Oracle (OCI7 および OCI8)
  • Ovrimos
  • PostgreSQL
  • SQLite
  • Solid
  • Sybase
  • Velocis
  • Unix dbm
また、データベース抽象化モジュールもあります (PDO といいます)。これは、 このモジュールでサポートされているデータベースに透過的にアクセスする機能を提供します。 加えて、PHP は ODBC (Open Datebase Connection) をサポートするので、 この世界標準の機構をサポートするどんなデータベースにもアクセスすることが出来ます。

PHP は、IMAP、SNMP、NNTP、POP3、HTTP、COM (Windowsのみ) やその他 数え切れない程多くのプロトコルを用いる他のサービスの状態を追跡する 機能もサポートしています。低レベルのネットワークソケットをオープンし、 他のプロトコルを用いて通信を行うことも可能です。また、PHPはWDDXを サポートし、基本的に全てのウェブプログラミング言語間で複雑なデータ交換 を行うことができます。相互接続機能としては、他にJavaオブジェクトの インスタンスを作成してそれをPHPのオブジェクトとして透過的にアクセス する機能や、CORBA拡張モジュールを使用してリモートオブジェクトにアクセス する機能があります。

PHPにはPOSIX拡張正規表現もしくはPerl正規表現からXML文書の解析に至るまで 非常に便利なテキスト処理の機能があります。XML文書の解析や操作のために SAXとDOMをサポートしています。XML文書の変換にはXSLT拡張モジュールを 使用することが出来ます。

他にも多くの興味深い拡張モジュールがあります。mnoGoSearch サーチエンジン関数、IRC ゲートウェイ関数、多くの圧縮ユーティリティ (gzip, bz2, zip)、カレンダー関数、翻訳関数などなど……。

お分かりの通り、このページではPHPの機能やPHPを使用することの利点を全て 紹介することは出来ません。PHPのインストール の章を読んでみてください。紹介された拡張モジュールに関しては関数リファレンスを読んでみてください。




簡易チュートリアル

目次

ここで、PHP の基礎の基礎について簡単なチュートリアルで説明したいと思います。 PHP は Web ページを作成する機能だけを有しているわけではありませんが、 ここでは PHP で動的な Web ページを作成することのみを扱います。詳細は、 PHP でできること と題するセクションを参照してください。

PHP を使用できる Web ページは、通常の HTML ページと全く同様に扱われ、 通常の HTML ページを作成するのと同様の方法で編集することができます。

必要なものは?

本チュートリアルでは、使用するサーバで PHP が使用可能であり、 .php で終わる全てのファイルが PHP で処理されることを仮定します。多くのサーバでは、PHP ファイルに関してこれがデフォルトの拡張子ですが、 確実なのはサーバの管理者にきいてみることです。サーバが PHP をサポートする場合、何もする必要はありません。 .php ファイルを 作成して Web ディレクトリに置くだけで、 サーバがこれを自動的にパースしてくれます。 何もコンパイルする必要はなく、他のツールをインストールする必要もありません。 PHP のファイルは、あなたが行なう全ての処理を実装した特殊なタグを通常の HTML ファイルに追加したものと考えると良いでしょう。 ほとんどの Web ホストは PHP サポートを提供していますが、 使用しているホストがサポートしていない場合、 » PHP リンク集のセクションで PHP が利用可能な Web ホストを探すためのリソースを読んでみてください。

ここでは、貴重なネットワーク帯域を節約するために、 ローカルに開発を行うことにしましょう。この場合、 » Apache のような Web サーバと、 当然、» PHP をインストールすることになります。また、多くの場合には、 » MySQL のようなデータベースもインストールすることになるでしょう。

これらは個別にインストールすることもできますし、 より簡単な方法でインストールすることも可能です。 このマニュアルには、 PHP のインストール手順 (Web サーバが設定済みであると仮定しています) があります。 PHP 自体をインストールする際に問題が発生した場合、 » インストールに関する メーリングリストで質問することをお薦めします。 より簡単にインストールを行いたい場合には、 使用するオペレーティングシステム用の » 設定済みのパッケージ を利用することもできます。これにより、 数回のマウスクリックで自動的にこれらをインストールすることができます。 MacOSX、Linux や Windows を含む、あらゆるオペレーティングシステムにおいて Web サーバで PHP を使用できるように設定することは簡単です。 Linux の場合、RPM の場所を知るために » rpmfind» PBone が有用でしょう。 Debian 用パッケージをみつけるには、» apt-get にアクセスするとよいでしょう。


PHP を使用する初めてのページ

以下の内容で hello.php という名前のファイルを作成し、Web サーバのルートディレクトリ (DOCUMENT_ROOT) に置いてください。

例1 初めての PHP スクリプト: hello.php

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'?> 
 </body>
</html>

ブラウザを使用して、"/hello.php" で終わる Web アクセス用 URL を指定し、 このファイルにアクセスしてください。 ローカルに開発を行っている場合、この URL は http://localhost/hello.php または http://127.0.0.1/hello.php のようになります。 しかし、これは Web サーバの設定に依存します。 全てが正しく設定されている場合、 このファイルは PHP によりパースされ、以下の出力がブラウザに送信されます。

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 Hello World<p>
 </body>
</html>

このプログラムは非常に簡単なので、実際には、このようなページを 作成するために PHP を使用する必要はありません。 Hello World を PHP の echo() 命令により出力しているだけです。 このファイルは、実行ファイルまたは特殊なファイルとする必要がないことに注意してください。 このファイルが拡張子 ".php" を有し、このファイルが PHP に渡される必要があると設定されているため、サーバは PHP により解釈されるファイルを見付けることができます。 このファイルは、多くの面白いことを可能にする特別なタグを利用できる、 通常の HTML ファイルと考えることができます。

この例を試しても何も出力されない場合、または、 ダウンロード用のプロンプトが表示されるか、 テキストとしてファイル全体が表示された場合、 利用しているサーバで PHP が利用できない可能性があります。本マニュアルの インストール の章により PHP を利用できるようにするよう管理者にきいてみてください。 ローカルに開発を行っている場合も、 インストールの章を読んで設定が全て正しく行われていることを確認してください。 解決しない問題がある場合は、多くの » PHP サポート の選択肢のどれかを利用してみてください。

この例の目的は、特殊な PHP タグ形式を示すことです。 この例では、<?php が PHP タグの開始を示しています。この後、PHP 命令を置き、終了タグ ?> を記述することにより、PHP モードを抜けています。 このように任意の場所で PHP モードを抜けて HTML ファイルに移ることができます。詳細は、 基本的な構文のセクションを参照ください。

注意: 改行に関する注意
HTML においては改行にはほとんど意味がありません。ただ、 HTML の見栄えをよくするためにも適宜改行を入れておくとよいでしょう。 ?> の直後の改行は、PHP によって取り除かれます。 複数の PHP ブロックを使用している場合や、 何かを出力するのかどうかがわからないファイルを include する際などに、 この挙動は非常に便利です。と同時に少々混乱するかもしれません。 強制的に改行させるには、?> の後に空白を置くか、 あるいは PHP ブロック内の最後の echo/print で明示的に改行を出力します。

注意: テキストエディタに関する注意
PHP ファイルを作成、編集、監理する際に使用できる、 多くのテキストエディタや統合開発環境 (IDE) があります。 これらのツールのリストの一部は、» PHP エディタのリスト で整理されています。あるエディタを推薦したい場合、上記のページを訪れ、 ページの監理者にそのエディタをリストに加えてくれないかとたずねてみてください。

注意: ワードプロセッサに関する注意
StarOffice Writer, Microsoft Word および Abiword のようなワードプロセッサは、PHP ファイルの編集には向いていません。 これらのワープロ上でテストスクリプトを編集する場合は、 ファイルをプレーンテキストとして保存していることを確認してください。 さもないと、PHP はスクリプトを読み込んで実行できません。

注意: Windows のメモ帳に関する注意
Windows のメモ帳を使用して PHP スクリプトを書く場合には、ファイルに 拡張子 .php を付けて保存したかどうかを確認する必要があります (メモ帳は、以下の防止策のどらかを適用しない限り、拡張子 .txt を自動的に付加します)。ファイルを保存する際に、 ファイル名を入力するプロンプトでファイル名を引用符で括ります (すなわち、"hello.php" とします)。 もしくは、保存ダイアログボックスにおいてドロップダウンメニュー "テキスト文書"をクリックし、"すべてのファイル" に設定を変更します。 これにより、引用符を付けずにファイル名を入力することができます。

さて、動作する簡単な PHP スクリプトを作成することができましたので、 最も有名な PHP スクリプトを作成してみましょう! phpinfo() 関数をコールすることにより、 定義済み変数、 ロードされている PHP モジュール、設定 等のシステムに関する多くの有用な情報を得ることができます。 この重要な情報を見てみてください。

例2 PHP からシステムに関する情報を取得する

<?php phpinfo(); ?>



実用的な例

次に、より実用的なことをしてみましょう。 ページを見ているユーザが使用しているブラウザの種類を確認してみます。 これを行なうには、ブラウザが HTTP リクエストの一部として送信した user agent 文字列を調べます。 この情報は、変数 に保存されています。PHP では、変数名は常にドル記号で始まります。 ここで使用する変数は、$_SERVER['HTTP_USER_AGENT'] です。

注意: $_SERVER は、 Web サーバ関連情報を全て保持する PHP の特別な予約変数です。詳細は、 スーパーグローバル を参照してください。 これらの特別な変数は、» 4.1.0 で導入されました。これ以前は、 $HTTP_SERVER_VARS のような古い配列 $HTTP_*_VARS を代わりに使用していました。 古いとはいえ、これらの変数はまだ存在しています (古いコードに関する注記も 参照してください)。

この変数を表示するには、以下のようにします。

例1 変数を出力する (配列要素)

<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>

このスクリプトの出力例は以下のようになります。

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
     

PHP で利用可能な変数の には多くの種類があります。上の例では、 配列 の要素を出力しています。配列は、非常に有用です。

$_SERVER は、PHP で自動的に利用可能な変数のひとつに過ぎません。マニュアルの 定義済の変数 のセクションでリストを参照することができます。 あるいは、完全なリストを取得するには、さきほどのセクションで使用した phpinfo() 関数の出力を確認します。

PHP タグの中に複数の PHP 命令を置くことができ、echo 文以上のことを行なうコードブロックを作成することができます。 例えば、インターネット・エクスプローラかどうかを調べたい場合は、 以下のようにします。

例2 制御構造 および 関数の使用例

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
  echo 
'あなたはInternet Explorerを使用しています<br />';
}
?>

このスクリプトの出力例は以下のようになります。

あなたはInternet Explorerを使用しています<br />

ここで、新しい概念をいくつか導入します。 if 文を使用しています。 C 言語の基本構文を知っているとしたら、理解できると思います。 C 言語や上記の構文を使用する他の言語をあまり知らない場合には、 PHP の入門書を手にとって最初の数章を読むか、このマニュアルの 言語リファレンスの部分を読むべきです。

二番目の新しい概念は、strpos() 関数のコールです。 strpos() は PHP に組み込まれた関数で、 文字列の中である文字列を探します。この場合、 $_SERVER['HTTP_USER_AGENT'] (いわゆる干し草の山 【haystack】) の中で "MSIE" (いわゆる針【needle】) を探しています。 この文字列が見つかった場合、 この関数はこの関数は文字列の相対的な位置を返し、 見つからなかった場合には FALSE を返します。 この関数が FALSE を返さなければ、 if 文は TRUE と評価し、その{波括弧}の中のコードが実行されます。 そうでない場合は、実行されません。 if, elsestrtoupper()strlen() のような他の関数で、似たような例を作ってみてください。 関連するマニュアルの各ページにも例がのっています。 関数の使用法に自信がない場合には、マニュアルの 関数定義の読み方および PHP関数のセクションの両方を 読んでみると良いでしょう。

この例を少し発展させて、PHP ブロックの中からでも PHP モードから出たり入ったりすることができることを以下に示します。

例3 HTML および PHP モードの両方を混在させる

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
?>
<h3>strposが非falseを返しました</h3>
<center><b>あなたはInternet Explorerを使用しています</b></center>
<?php
} else {
?>
<h3>strposがfalseを返しました</h3>
<center><b>あなたはInternet Explorerを使用していません</b></center>
<?php
}
?>

この例の出力は以下のようになります。

<h3>strposが非falseを返しました</h3>
<center><b>あなたはInternet Explorerを使用しています</b></center>

何かを出力する際に PHP の echo 文を使用する代わりに、PHP モードを抜けて通常の HTML を送信しています。ここで注意すべき重要で強力な点は、 スクリプトの論理フローが損なわれないということです。 strpos()TRUE または FALSE のどちらを返すか、言い換えるとMSIE が見つかったかどうかに基づき、HTML ブロックだけが見る側に送信されることになります。



フォームの処理

PHP の最も強力な機能の一つは、HTML フォームを処理する手段です。 理解するべき重要な基本概念は、あるフォームの中の全てのフォーム要素が、 自動的に PHP スクリプトで利用可能になるということです。 詳細は、マニュアルのセクション 外部からくる変数 および PHP でフォームを使用する例を参照してください。以下に HTML フォームの例を示します。

例1 簡単な HTML フォーム

<form action="action.php" method="post">
 名前: <input type="text" name="name" />
 年齢: <input type="text" name="age" />
 <input type="submit" />
</form>

このフォームに関して特別なところはありません。これは通常の HTML フォームで特殊なタグは全く使用していません。 ユーザがこのフォームを記入し、投稿ボタンを押した時、 action.php ページがコールされます。 このファイルには、以下のようなコードを記述します。

例2 フォームからのデータを出力する

こんにちは、<?php echo htmlspecialchars($_POST['name']); ?>さん。
あなたは、<?php echo (int)$_POST['age']; ?> 歳です。

このスクリプトの出力例は次のようになります。

こんにちは、Joe さん。あなたは、22 歳です。

htmlspecialchars() および (int) の部分以外は、何を行っているかは明らかでしょう。 htmlspecialchars() は、html での特殊な文字を適切にエンコードし、 HTML タグや Javascript をページ内に仕込めないようにします。 また、age フィールドには数値が入ることがわかっているので、これを integer 型に 変換 します。これにより、おかしな文字が入力されることを防ぎます。 これらの処理を PHP に自動的に行わせるためには、 filter 拡張モジュールを使用します。 変数 $_POST['name']$_POST['age'] は PHP により自動的に設定されます。 前の部分では、スーパーグローバル$_SERVER を使用しましたが、 ここでは、全ての POST データを保持するスーパーグローバル $_POST を導入しています。 フォームのメソッドが POST であることに注意してください。 GET メソッドを使用している場合、 フォームの情報は代わりにスーパーグローバル $_GET に代入されます。リクエストデータの発信源に留意しない場合には、 スーパーグローバル変数 $_REQUEST を使用することもできます。この変数は、GET, POST, COOKIE, FILE データの混ざったものが含まれます。 import_request_variables() 関数も参照してください。

XForms の入力を PHP で扱うことも可能ですが、たいていの場合は HTML フォームのほうが快適に使用できるでしょう。 XForms は初心者向けのものではありませんが、気になるかたもいるかもしれません。 機能概要の節にある XForm から受信したデータの処理方法 を参照ください。



新しいバージョンの PHP で古いコードを使用する

今や PHP は有名なスクリプト言語となってきており、 各自のスクリプトで再利用可能なコードとして、 多くのリソースが公開されています。PHP 言語の開発者の大部分は、 過去のバージョンとの互換性を保とうとしており、 過去のバージョン用に書かれたスクリプトは (理想的には) より新しいバージョンの PHP で変更せずに動作するはずです。 しかし、実際には、通常いくつかの変更が必要となります。

古いコードに影響を与える最近の重要な二つの変更点を以下に示します。

  • $HTTP_*_VARS 配列が過去のものとなったこと (これは、関数またはメソッドの中で使用する際にグローバル変数として 宣言を行なう必要がありました)。以下の スーパーグローバル 配列» 4.1.0 で導入されました。これらを以下に示します。 $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_REQUEST, $_SESSION. 従来の $HTTP_POST_VARS のような配列 $HTTP_*_VARS もまだ存在します。 PHP 5.0.0 以降、PHP の長い 定義済みの変数 配列は register_long_arrays ディレクティブにより無効にすることができます。
  • 外部変数は、もはやデフォルトでグローバルスコープに登録されません。 言い換えると、PHP » 4.2.0 以降、PHP ディレクティブ register_globals は、 php.ini においてデフォルトで off となっています。 これらの値にアクセスする推奨される方法は、 上記のスーパーグローバル配列を使用する方法です。古いスクリプトや本、 チュートリアルはこのディレクティブに依存している可能性があります。 このディレクティブが on の場合、 例えば、URL http://www.example.com/foo.php?id=42 から $id を使用することができます。 on、off によらず $_GET['id'] は利用可能です。
これらの変更に関する詳細は、 定義済みの変数 のセクションおよびそこにあるリンクを参照してください。



次にするべきことは?

ここで得た知識により、マニュアルのほとんどの部分、 そしてサンプルのアーカイブにある多くのスクリプトの例を理解できるようになったはずです。 他の例を Web サイト php.net にあるリンクセクション » http://www.php.net/links.php で探すこともできます。

この他 PHP でできる多くのことを示すスライドプレゼンテーションを見るには、 PHP カンファレンスマテリアルサイト » http://talks.php.net/ を参照してください。





インストールと設定


インストールにあたっての一般的な注意事項

インストールを行う前に、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-GTK 拡張モジュールを使って、PHP でクライアントサイドの GUI アプリケーションを作成することも可能です。この場合のアプローチは Web ページの 作成とは完全に異なり、HTML を出力するのではなく、 ウインドウやその中のオブジェクトの管理を行うことになります。PHP-GTK に関する より詳細な情報については、 » PHP-GTK 拡張モジュールのサイト を参照してください。PHP-GTK は、PHP の公式アーカイブには含まれていません。

以降、この節では Unix や Windows 上の Web サーバに サーバモジュールインターフェイスおよび CGI 実行ファイルとして PHP をセットアップする方法を説明します。 コマンドラインの実行ファイルについての情報も、 これ以降の節で得られるでしょう。

PHP のソースコードと Windows 用のバイナリアーカイブは、 » http://www.php.net/ にあります。 アーカイブをダウンロードする際には、最も近い» ミラーサイト を使用するようにしてください。



Unix システムへのインストール

目次

本章では、UNIX 系のシステムへの PHP のインストールと設定に関する 手引きを示します。使用するプラットフォームや Web サーバについての セクションを参照して、インストールを行ってください。

このマニュアルでは、 「インストールにあたっての一般的な注意事項」 の章で述べたように、Web 用のセットアップを主に扱います。加えて、 コマンドラインから PHP を使うためのセットアップについても扱います。

Unix プラットホームに PHP をインストールする方法はいくつかあり、 コンパイルして設定するやり方と(コンパイル済みの)パッケージを使う方法とに 別けられます。この手引きでは、コンパイルして設定する方法を主に取り上げます。 Unix 系システムには、パッケージを用いるインストールシステムを持つものも多く、 一般的なセットアップを行うには、パッケージが役に立つでしょう。ただし、 (セキュアサーバや様々なデータベースドライバなど)少々特殊な機能が必要な場合、 PHP や Web サーバをビルドする必要が有るかもしれません。ソフトウエアの ビルドに不慣れな場合は、必要な機能を含めてビルドされたパッケージを 誰か他の人が作成済みでないかを調べてみると良いでしょう。

コンパイルにあたって必要な知識とソフトウエアを以下に示します。

  • UNIX に関する基本的な知識 ("make" および C コンパイラを使える程度)
  • ANSI C コンパイラ
  • flex: バージョン 2.5.4
  • bison: バージョン 1.28 (推奨), 1.35, または 1.75
  • Web サーバ
  • (gd、pdf ライブラリ等の) モジュール用のコンポーネント

PHP の初期設定および設定プロセスは、configure スクリプトに与えられたコマンドラインオプションによりコントロールされます。 ./configure --help とすると、 オプションの一覧と簡単な解説が表示されます。 本マニュアルでは、オプションの種類ごとに別けて解説されています。 PHP 本体のオプションの一覧は 付録 にまとめられています。 各拡張モジュール特有のオプションは、関数リファレンスのページに記述されています。

PHP の configure が完了していないと、 拡張モジュールや本体の実行ファイルのビルドができません。 make コマンドの実行にあたっては、注意してください。 configure がうまく行かず原因もよくわからない場合は、 問題が起きた場合 についての章を参照してください。

Apache 1.3.x (Unix システム用)

このセクションでは、PHP を Unix プラットフォームの Apache 1.3.x にインストールする際の 手引きと注意事項について説明します。Apache 2 に関する手引きと注意 は 別のセクションにあります。

以下の説明では、バージョン番号が意図的に省略されています。 'xxx' の部分を使用するファイルに対応する番号に置き換えてください。 また、手順 10 で configure に与える引数は、 configure のすべてのオプション から選択できます。

例1 PHP インストール 手順 (Apache 共有モジュール版)

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/www --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx

10. PHP の configure を行います。ここでは、様々なオプションを指定して、
    特定の拡張モジュールを有効にするといった、カスタマイズを行います。
    指定可能なオプションの一覧は、./configure --help を実行すると得られ
    ます。以下に、簡単な設定例を示します。Apache 1 と MySQL のサポートを
    有効にする例です。apxs のパスは、Apache のインストールパスによって
    異なる場合があります。

      ./configure --with-mysql --with-apxs=/www/bin/apxs

11. make
12. make install

    configure オプションを変更して再インストールする場合は、最後の 3 つ
    の手順を繰り返します。共有モジュールとしてコンパイルされた PHP を
    有効にするには Apache を再起動するだけです。Apache の再コンパイルは
    必要ありません。

    特に指定がない限り、'make install' は、PEAR, phpize のような様々な
    関連ツール、CLI 版 PHP などもインストールすることに注意してください。

13. php.ini ファイルをセットアップ

      cp php.ini-dist /usr/local/lib/php.ini

    PHP の実行時設定を変更するには、.ini ファイルを編集します。
    このファイルを他の場所に置きたい場合は、手順 10 で、
    オプション --with-config-file-path=/path を使用します。

    php.ini-dist ではなく、php.ini-recommended を使用する場合は、PHP の
    動作が変化しますので、ファイル中に記載されている変更点の一覧を確認する
    ようにしてください。

14. httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。
    LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュール
    を指している必要があります。上記の make install により既にこの設定は
    追加されている場合もありますが、確認が必要です。

    PHP 4 の場合:

      LoadModule php4_module libexec/libphp4.so

    PHP 5 の場合:

      LoadModule php5_module libexec/libphp5.so

15. httpd.conf の AddModule セクションに以下を追加します。
    ClearModuleList の下あたりに追加してください。

    PHP 4 の場合:

      AddModule mod_php4.c

    PHP 5 の場合:

      AddModule mod_php5.c

16. Apache が特定の拡張子のファイルを PHP としてパースするよう(httpd.conf
    を編集して)設定します。例えば、Apache が拡張子 .php のファイルを PHP
    としてパースするように設定します。複数の拡張子も、空白で区切って記述する
    だけで PHP としてパースさせることができます。以下の例は .php と .phtml
    とを指定した場合です。

      AddType application/x-httpd-php .php .phtml

    PHP のソースをハイライト表示させるために、拡張子 .phps を設定することも
    よく行われます。

      AddType application/x-httpd-php-source .phps

17. Apache サーバを、通常の手順通り、起動させます(HUP または USR1
    シグナルを 使用してリロードするのではなく、サーバを停止させてから
    再起動する必要があります)。

PHP を静的オブジェクトとしてインストールすることも可能です。

例2 PHP インストール手順 (Apache 静的モジュール)

1.  gunzip -c apache_1.3.x.tar.gz | tar xf -
2.  cd apache_1.3.x
3.  ./configure
4.  cd ..

5.  gunzip -c php-5.x.y.tar.gz | tar xf -
6.  cd php-5.x.y
7.  ./configure --with-mysql --with-apache=../apache_1.3.x
8.  make
9.  make install

10. cd ../apache_1.3.x

11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a

    (上の行は間違いではありません。この段階で libphp5.a は存在していませんが
    この時点での存在は必須ではなく、後に作成されます。)

12. make

    (httpd バイナリが作成され、Apache バイナリディレクトリにコピーすることが
    できます。最初のインストールの場合は、この後 "make install" を行います。)

13. cd ../php-5.x.y
14. cp php.ini-dist /usr/local/lib/php.ini

15. /usr/local/lib/php.ini を編集すると、PHP の実行時設定を変更できます。
    httpd.conf もしくは srm.conf ファイルを編集し、以下を追記します。
    AddType application/x-httpd-php .php

注意: PHP 4 については、php-5php-4 へ、 php5php4 へ置き換えてください。

インストールされている Apache や UNIX の種類によりますが、サーバの停止・再起動の 方法はいくつもあります。いろいろな Apache/UNIX の組合せを想定して、 サーバを再起動する典型的な方法を以下に示します。 /path/to/ を使用するシステムのアプリケーション へのパスに置き換えてください。

例3 Apache を再起動するためのコマンドの例

1. Linux および System V 系
/etc/rc.d/init.d/httpd restart

2. apachectl スクリプトを使用する方法
/path/to/apachectl stop
/path/to/apachectl start

3. (OpenSSL を使用している場合) httpdctl および httpsdctl を使用する方法
/path/to/httpsdctl stop
/path/to/httpsdctl start

4. mod_ssl や他の SSL サーバを使用している場合、手動で stop や start する
/path/to/apachectl stop
/path/to/apachectl startssl

apachectl および http(s)dctl の実行ファイルの位置は、システムにより 異なります。システムが locate もしくは whereiswhich コマンドを サポートしているなら、これらサーバ制御用プログラムを見つけるために使用すると 便利でしょう。

PHP を Apache 用にコンパイルするには、いくつかの方法があります。以下に例を示します。

./configure --with-apxs --with-pgsql

この例では、Apache がロードする共有モジュールのライブラリ libphp5.so (あるいは PHP 4 では libphp4.so) が作成されます。この共有ライブラリの読み込みは、Apache の設定ファイル httpd.conf の LoadModule の行にて設定します。また、このライブラリには、 PostgreSQL サポートが埋め込まれます。

./configure --with-apxs --with-pgsql=shared

この例でも Apache 用 libphp4.so 共有ライブラリ が作成されます。加えて、(PHP 拡張モジュールの)共有ライブラリ pgsql.so も作成されます。この共有ライブラリ は、PHP 設定ファイル php.ini の extension ディレクティブにより、 もしくは PHP スクリプト内で明示的に dl() 関数により ロードされます。

./configure --with-apache=/path/to/apache_source --with-pgsql

この例では、libmodphp5.a ライブラリと mod_php5.c およびいくつかの付属ファイルが 作成され、Apache のソースツリーのディレクトリ src/modules/php5 にコピーされます。続いて、 --activate-module=src/modules/php5/libphp5.a と指定して Apache をコンパイルしてください。Apache のビルドシステムにより、libphp5.a が作成され、 httpd バイナリに静的にリンクされます (PHP 4 に対しては、php5php4 へ 置き換えてください)。PostgreSQL サポートはこの httpd バイナリに 直接埋め込まれるため、最終的な結果としては、Apache 全体と PHP 全体を含む 単一の httpd バイナリが出来上がります。

./configure --with-apache=/path/to/apache_source --with-pgsql=shared

この例は、上と同様ですが、最終的な httpd バイナリに PostgreSQL サポートは直接埋め込まれません。共有ライブラリ pgsql.so が作成され、PHP 設定ファイル php.ini、もしくは dl() 関数により明示的に PHP にロードすることができます。

PHP のビルド方法を選択する際には、各方法の利点と欠点を考慮する必要 があります。共有モジュールのオブジェクトとしてビルドすると、Apache とは別に コンパイルすることができ、PHP を追加または変更する際に全体を 再コンパイルする必要がありません。PHP を Apache に(静的に)組み込むと、 PHP はより高速にロード・実行されます。詳細な情報については、 Apache の Web ページ 「» 動的共有オブジェクト (DSO) サポート」 を参照してください。

注意: Apache のデフォルトの httpd.conf には、次のように記述されたセクションがあります。

User nobody
Group "#-1"
これを "Group nogroup" (や "Group daemon")等に変更しないと、 PHP はファイルをオープンすることができません。

注意: --with-apxs=/path/to/apxs オプションを 指定する場合には実際にシステムにインストールされている apxs を指定してください。 Apache のソースディレクトリ内にある apxs を指定してはいけません。


Apache 2.0 (Unixシステム用)

このセクションでは、PHPを Unix システム上の Apache 2.0 にインストールする際の 手引きと注意事項について説明します。

警告

Apache2 の MPM マルチスレッドモードを実運用環境で使用することは推奨されません。 代わりに prefork MPM または Apache1 を使用してください。その理由については、 マルチスレッド版 MPM の Apache2の FAQ エントリを参照してください。

» Apache ドキュメンテーション を参照し、Apache 2.0.x の基本的な事項について理解しておくことを 強く推奨します。

注意: PHP と Apache 2.0.x の互換性に関する注意
PHP の以下のバージョンは、Apache 2.0.x の最新版での動作が確認されています。

以上のバージョンの PHPは、Apache 2.0.40 以降と互換性があります。
Apache 2.0 SAPI のサポートは PHP 4.2.0 で開始されました。 PHP 4.2.3 は Apache 2.0.39 で動作します。PHP 4.2.3 を Apache の他のバージョンと 組み合わせて使用しないでください。 PHP 4.3.0 もしくはそれ以降のバージョンの PHP を 最新版の Apache2 と組み合わせて使用することが推奨されます。
ここで挙げたバージョンの PHP は、Apache 1.3.x でも動作します。

最新バージョンの » Apache 2.0 を ダウンロードし、上述のいずれかのバージョンの PHP を用意してください。 この手引きでは Apache 2.0 で PHP を動作させるための 基本的な部分しかカバーしていません。さらに詳しい情報については、» Apache ドキュメンテーション を参照してください。 情報が古く不正確になってしまうため、以下では詳細なバージョン番号は 記述されていません。'NN' という文字列をご使用のバージョンに適宜置き換えて ください。

例1 インストール手順 (Apache 2 共有モジュール版)

1.  gzip -d httpd-2_0_NN.tar.gz
2.  tar xvf httpd-2_0_NN.tar
3.  gunzip php-NN.tar.gz
4.  tar -xvf php-NN.tar
5.  cd httpd-2_0_NN
6.  ./configure --enable-so
7.  make
8.  make install

    以上で Apache 2.0.NN が、モジュールの動的ロードとデフォルトの
    MPM(マルチプロセッシングモジュール)である prefork が有効になった
    状態で、/usr/local/apache2 にインストールされます。
    
    インストールが正常か調べるには、以下のようにします。
      /usr/local/apache2/bin/apachectl start
    サーバの停止は、以下の通り。
      /usr/local/apache2/bin/apachectl stop
    
    引き続き PHP のセットアップを行います。

9.  cd ../php-NN
10. PHP の configure を行います。ここでは、様々なオプションを指定し、特定の
    拡張モジュールを有効にするといったカスタマイズを行います。指定可能な
    オプションの一覧は、./configure --help を実行すると得られます。以下に、
    Apache 2 と MySQL のサポートを有効にする、簡単な設定例を示します。
   
      ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

11. make
12. make install

    configure オプションを変更して再インストールする場合は、最後の 3 つ
    の手順を繰り返します。共有モジュールとしてコンパイルされた PHP を
    有効にするには Apache を再起動するだけです。Apache の再コンパイルは
    必要ありません。

    特に断りがない限り、'make install' は、PEAR、phpize のような様々な 
    関連ツール、CLI 版 PHP などもインストールすることに注意してください。
    
13. php.ini ファイルを設定する
    
      cp php.ini-dist /usr/local/lib/php.ini
      
    PHP の実行時設定を変更するには、.ini ファイルを編集します。
    このファイルを他の場所に置きたい場合は、手順 10 で、
    オプション --with-config-file-path=/path を使用します。

    php.ini-dist ではなく、php.ini-recommended を使用する場合は、PHP の
    動作が変化しますので、ファイル中に記載されている変更点の一覧を確認する
    ようにしてください。

14. httpd.conf を編集し、PHP の共有モジュールをロードするよう設定します。
    LoadModule 命令の右側に記述するパスは、システムの PHP 共有モジュール
    を指している必要があります。上記の make install により既にこの設定は
    追加されている場合もありますが、確認が必要です。

    PHP 4 の場合:

      LoadModule php4_module modules/libphp4.so

    PHP 5 の場合:

      LoadModule php5_module modules/libphp5.so
   
15. Apache が特定の拡張子のファイルを PHP としてパースするよう設定します。
    たとえば、Apache が拡張子 .php のファイルを PHP としてパースするようにします。
    単に Apache の AddType ディレクティブを使うだけではなく、
    悪意を持ってアップロード (あるいは作成) された exploit.php.jpg
    のようなファイルが PHP として実行されてしまわないようにしたいものです。
    この例では、PHP としてパースさせたい任意の拡張子を追加していくだけです。
    ためしに .phtml を追加してみましょう。
            
      <FilesMatch \.php$>
          SetHandler application/x-httpd-php
      </FilesMatch>

    あるいは、拡張子 .php, .php2, .php3, .php4, .php5, .php6, そして
    .phtml のファイルだけを PHP として実行したいは、このようにします。

      <FilesMatch "\.ph(p[2-6]?|tml)$">
          SetHandler application/x-httpd-php
      </FilesMatch>
    
    拡張子 .phps のファイルを PHP ソースファイルとして扱うには、これを追加します。

      <FilesMatch "\.phps$">
          SetHandler application/x-httpd-php-source
      </FilesMatch>

16. Apache サーバを、通常の手順通り、起動させます。
      /usr/local/apache2/bin/apachectl start

          - あるいは -

      service httpd restart

上記の手順で、Apache2 ウェブサーバ上で SAPI モジュールとして PHP を動作させることができます。もちろん、Apacheと PHP の双方とも、もっと多くの configure オプションを指定することが出来ます。 詳しい情報を得るには、ソースツリーディレクトリで ./configure --help を実行してください。また、マルチスレッド版の Apache2 をビルドする場合は、デフォルトの MPM である preforkworker もしくは perchild で 上書きする必要があります。このためには、上記の手順 6 で--with-mpm=worker もしくは--with-mpm=perchild を指定します。マルチスレッド版 については、その動作に関して十分注意してください。 詳細については Apacheドキュメントの » マルチプロセッシングモジュール (MPM) を参照してください。

注意: コンテントネゴシエーションを使用する場合には、 Apache の MultiViews オプションに関するFAQ を参照してください。

注意: マルチスレッド版の Apache をビルドする場合は、システムがスレッドを サポートしている必要があります。また、PHP は 実験的なステータスにある Zend Thread Safety (ZTS) でビルドされます。 そのため、使用できない拡張モジュールがあります。デフォルトの prefork MPM でのビルドが推奨されます。



Lighttpd 1.4 (Unix システム用)

ここでは、Unix システム上の Lighttpd 1.4 で PHP を使用する際の注意点とヒントをまとめます。

まず » Lighttpd trac で Lighttpd のインストール方法をよく読んでからこれ以降に進みましょう。

PHP と Lighttpd を組み合わせる際におすすめの SAPI は fastcgi です。 fastcgi は PHP 5.3 以降の php-cgi では自動的に有効になりますが、 それより前のバージョンの場合は php の configure 時に --enable-fastcgi を指定しなければなりません。 PHP で fastcgi が有効になっているかどうかを調べるには、 php -v の結果が PHP 5.2.5 (cgi-fcgi) のようになっているかどうかを確認します。 PHP 5.2.3 以前の場合は、(php-cgi ではなく) php バイナリで fastcgi が使えるようになります。

Lighttpd に php プロセスを起動させる

Lighttpd から php に接続して fastcgi プロセスを立ち上げさせるよう設定するには、 lighttpd.conf を編集します。ローカルシステムの fastcgi プロセスに接続するにはソケットの使用をおすすめします。

例1 lighttpd.conf の抜粋

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

bin-path ディレクティブにより、lighttpd が fastcgi プロセスを動的に起動できるようになります。 PHP は、環境変数 PHP_FCGI_CHILDREN の内容に応じて子プロセスを起動します。 "bin-environment" ディレクティブは、起動するプロセスの環境を設定します。 リクエストの数が PHP_FCGI_MAX_REQUESTS の値に達すると、 PHP は子プロセスを kill します。ディレクティブ "min-procs" および "max-procs" は、PHP での使用は避けるべきです。 PHP は自身の子プロセスを自前で管理しますし、 APC のような opcode キャッシュは PHP が管理する子プロセスしか共有しません。 "min-procs" を 1 より大きい値に設定すると、 PHP レスポンダの数が PHP_FCGI_CHILDREN にその値をかけたものとなります (2 min-procs * 16 子プロセスで 32 のレスポンダとなります)。

spawn-fcgi での起動

Lighttpd には spawn-fcgi というプログラムが含まれており、 fastcgi プロセスの起動を簡単に行えるようになっています。

php-cgi の起動

spawn-fcgi なしでプロセスを起動することもできますが、多少難易度が上がります。 環境変数 PHP_FCGI_CHILDREN で、PHP がリクエストの処理用に起動する子の数を設定します。 PHP_FCGI_MAX_REQUESTS は、各子プロセスの生存期間 (リクエスト数) を設定します。php レスポンダを起動するシンプルな bash スクリプトの例を以下に示します。

例2 FastCGI レスポンダの起動

#!/bin/sh

# php-cgi バイナリの場所
PHP=/usr/local/bin/php-cgi

# PID ファイルの場所
PHP_PID=/tmp/php.pid

# アドレスへのバインド
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# ドメインソケットへのバインド
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

リモートの FCGI インスタンスへの接続

fastcgi インスタンスを複数のリモートマシンで起動して、 アプリケーションの規模を拡大することができます。

例3 リモートの php-fastcgi インスタンスへの接続

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)


Caudium サーバ

PHP は Caudium Web サーバ用 Pike モジュールとしてビルド可能です。 以下に PHP 4 を Caudium にインストールする手順を示します。

例1 Caudium へのインストール手順

1.  PHP 4 をインストールする前に Caudium のインストールを確認する
    
    PHP 4 を正しく動作させるためには、Pike 7.0.268 以降
    が必要です。この例では、Caudium が /opt/caudium/server/ に
    インストールされていることを仮定します。
   
2.  php-x.y.z ディレクトリ(x.y.z はバージョン番号)に移動する
3.  ./configure --with-caudium=/opt/caudium/server
4.  make
5.  make install
6.  実行中ならば、Caudium を再起動する
7.  GUI 設定画面にログインし、PHP 4 サポートを追加したい仮想サーバに移動する
8.  Add Module をクリックし、PHP 4 Script Support module を追加する
9.  'PHP 4 interpreter isn't available' と出力される場合は、サーバを
    再起動したかどうか確認する
    
    PHP4.so に関するエラーを確認するには、
    /opt/caudium/logs/debug/default.1 をチェックしてください。
    caudium/server/lib/[pike-version]/PHP4.so
    が存在することも確認してください。

10. 必要に応じて、PHP Script Support module を設定する

もちろん、PHP 4 で利用可能となった多くの PHP 拡張モジュールを有効にして Caudium モジュールをコンパイルすることもできます。 各拡張モジュール特有の設定オプションについてはリファレンスページを 参照してください。

注意: MySQL サポートを有効にして PHP 4 をコンパイルする場合、必ず 通常の MySQL クライアントのコードを使用するよう指定する必要があります。 そうでない場合、MySQL サポートを組み込み済みの Pike と衝突する 可能性があります。これを行うには、 --with-mysql オプションにより MySQL インストールディレクトリを指定します。



fhttpd サーバ

PHP を fhttpd モジュールとして作成するには、"Build as an fhttpd module?" に対して、"yes" と答えてください (configure の オプショ ン --with-fhttpd=DIR) 。 そして、fhttpd ソースのベースディレクトリを指定してください。 デフォルトディレクトリは、 /usr/local/src/fhttpd です。 fhttpd を使用している場合には、PHP をモジュールとして作成した方が、 より優れた性能、より高度な制御/リモート実行機能を使用することができます。

注意: PHP4.3.0 をもって、fhttpd サポートは廃止されました。



Sun, iPlanet, Netscape サーバ(Sun Solaris 用)

このセクションでは、Sun Solaris 上の Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server に PHP をインストールする際の 手引きと注意事項について説明します。

PHP 4.3.3 より、NSAPI モジュール を使って 独自エラーページ および ファイル一覧表示ページの生成 が可能です。 Apache 互換の関数も追加されています。 また、これらの Web サーバについての サブリクエストに関する注意 も参照してください。

Netscape Enterprise Server (NES) への PHP のインストールに関しては » http://benoit.noss.free.fr/php/install-php4.html にも情報があります。

Sun JSWS/Sun ONE WS/iPlanet/Netscape Web サーバ用に PHP をビルド するには、--with-nsapi=[DIR] オプションに適切なインストールディレクトリを指定してください。 デフォルトのディレクトリは、通常、/opt/netscape/suitespot/ です。 /php-xxx-version/sapi/nsapi/nsapi-readme.txt も参照してください。

  1. 以下のパッケージを、» http://www.sunfreeware.com/ や他のダウンロードサイトから取得し、 インストールします。

    • autoconf-2.13
    • automake-1.4
    • bison-1_25-sol26-sparc-local
    • flex-2_5_4a-sol26-sparc-local
    • gcc-2_95_2-sol26-sparc-local
    • gzip-1.2.4-sol26-sparc-local
    • m4-1_4-sol26-sparc-local
    • make-3_76_1-sol26-sparc-local
    • mysql-3.23.24-beta (mysql サポートが必要な場合)
    • perl-5_005_03-sol26-sparc-local
    • tar-1.13 (GNU tar)

  2. パスを適切に設定します ( PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin )。 そして、export PATH とし、パスを有効にします。
  3. gunzip php-x.x.x.tar.gz (.gz 配布の場合のみ)
  4. tar xvf php-x.x.x.tar
  5. PHP を展開したディレクトリに移動します cd ../php-x.x.x
  6. 以下のステップを実施します。 /opt/netscape/suitespot/ は netscape サーバがインストールされている場所です。 異なる場合は、適切なパスに変更してください。

    ./configure --with-mysql=/usr/local/mysql \
    --with-nsapi=/opt/netscape/suitespot/ \
    --enable-libgcc
    

  7. make を実行し、その後 make install を実行します。

基本インストールを実行したら、適当な readme ファイルを参照してください。 いくつかの追加インストール手順を実行する必要があるかもしれません。

Sun/iPlanet/Netscape の設定手順

まず、共有ライブラリの探索のために、環境変数 LD_LIBRARY_PATH にパスをいくつか追加する必要があります。 Webサーバの開始スクリプトで行うのが最善でしょう。 開始スクリプトは、通常 /path/to/server/https-servername/start にあります。 また、/path/to/server/https-servername/config/ にある設定ファイルの編集も必要です。

  1. mime.typesに次の行を追加します (administration server で行えます。)

    type=magnus-internal/x-httpd-php exts=php
    

  2. magnus.conf (サーバ>= 6の場合) または obj.conf (サーバ< 6の場合) を編集し、 以下の行を追加します。 ここで、shlib はシステムにより異なります。 /opt/netscape/suitespot/bin/libphp4.so 等となるでしょう。 mime types init の後に置いてください。

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialize PHP!" [php_ini="/path/to/php.ini"]
    
    (PHP >= 4.3.3) php_ini パラメータはオプションですが、 これを指定することにより、Web サーバの設定ファイルがあるフォルダに php.ini を置くことが可能になります。

  3. obj.conf のデフォルトオブジェクトを設定します (バージョン 6 以降の仮想サーバの場合は vserver.obj.conf。)

    <Object name="default">
    .
    .
    .
    .#NOTE this next line should happen after all 'ObjectType' and before all 'AddLog' lines
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    
    (PHP >= 4.3.3) 追加のパラメータとして、いくつかの特別な php.ini 値を 追加することができます。例えば、コンテキスト php4_execute に対して docroot="/path/to/docroot" を設定するなどです。 また、論理値の場合、0/1 を値として使用してください。 "On","Off",... では正しく動作しません。 例えば、zlib.output_compression="On" ではなく、 zlib.output_compression=1 とします。

  4. 以下は、(cgi-bin ディレクトリ のように) PHP スクリプトだけが置かれるディレクトリを設定したい場合にのみ必要です。

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    
    こうしておくと、Administration Server に特定のディレクトリを設定し、 これをスタイル x-httpd-php に割り付けることができます。 このディレクトリの中にあるすべてのファイルは PHP スクリプト として実行されます。 これは、ファイルの拡張子を .html に変更し、 PHP が使用されている事を隠したい場合に有用です。

  5. 認証を設定します。PHP による認証は他の認証と併用することはできません。 すべての認証は、PHP スクリプトに渡されます。 サーバ全体に対して PHP 認証を設定する場合は、以下の行を追加してください。

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. 単一のディレクトリでのみ PHP による認証を行う場合は、次の行を追加します。

    <Object ppath="d:\path\to\authenticated\dir\*">
    AuthTrans fn=php4_auth_trans
    </Object>
    

注意: PHP が使用するスタックサイズは Web サーバの設定に依存します。 非常に大きい PHP スクリプトを実行させた際にクラッシュが発生する場合は、 Administration Server でスタックサイズ("MAGNUS EDITOR") を大きくすると良いでしょう。

CGI 環境変数と php.ini の変更

Sun JSWS/Sun ONE WS/iPlanet/Netscape がマルチスレッドの Web サーバだという事が PHP スクリプトを書く際に重要になります。すべてのリクエストは同一の (Web サーバ自体の)プロセス空間で実行され、そのプロセス空間は 1 つの環境変数しか 持っていません。PATH_INFOHTTP_HOST CGI 変数を取得する場合、 古い PHP で行っていたような方法、つまり getenv() 関数を使用する方法や他の同等な方法 (グローバル変数の登録機能、 $_ENV 等)を使うのは正しい方法ではありません。 Web サーバの環境変数をただ単に取得するだけと、 正しい CGI 変数は得られないのです。

注意: なぜ正しくない CGI 変数が登録されているのでしょうか?
それは、Web サーバのプロセスを Administration Server から起動させる際、 Web サーバの起動スクリプトが CGI スクリプトとして実行されるためです。したがって、 起動された Web サーバの環境変数には CGI 変数も含まれることになります。 Administration Server 以外から Web サーバを起動してみればこのことをテストできるでしょう。 ルートユーザでコマンドラインを使って、手動で起動してみると、CGI 変数らしき 環境変数が登録されないことが確認できるでしょう。

PHP 4.x のスクリプトで CGI 変数を取得する場合は、スーパーグローバル $_SERVER を用いるのが正しい方法です。また、$HTTP_HOST などを使う古いスクリプトを使用する場合は、php.iniregister_globals をオンにし、変数のパースの順番 (variables_order) を変更してください ("E" を削除。環境変数を読み込む必要は無いため。)

variables_order = "GPCS"
register_globals = On

独自エラーページおよびファイル一覧表示ページ (PHP >= 4.3.3)

PHP を使って、"404 Not Found" などに対するエラーページを生成することが できます。オーバーライドしたいすべてのエラーページ対して、以下の行を obj.conf 中のオブジェクトに追加してください。

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]
ここで、XXX は HTTP のエラーコードです。 追加したものと干渉する Error ディレクティブは削除してください。 発生するすべてのエラーに対応するページを設定したい場合は、 code パラメータを省略してください。スクリプトで HTTP ステータス コードを取得するには、 $_SERVER['ERROR_TYPE'] を使用します。

独自のファイル一覧表示ページを PHP を使って生成することも可能です。 ファイル一覧表示を行う PHP スクリプトを作成し、obj.conftype="magnus-internal/directory" の行に 書かれているデフォルトのサービスを以下のように置き換えます。

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]
エラーページ、ファイル一覧表示ページのいずれでも、元の URI および 変換後の URI は、それぞれ、$_SERVER['PATH_INFO'] および $_SERVER['PATH_TRANSLATED'] に格納されます。

nsapi_virtual() および サブリクエストに関する注意 (PHP >= 4.3.3)

NSAPI モジュールは、現在、nsapi_virtual() 関数 (エイリアス: virtual()) をサポートしており、 Web サーバへサブリクエストを行い、結果を Web ページへ挿入することができます。 ただし、この関数は NSAPI ライブラリの文書化されていない機能を若干使用しています。 モジュールは、自動的に必要な関数群を探し、可能であればそれらの関数を 使用ます。もし使用可能でなければ、nsapi_virtual() 関数は 使用不可となります。

注意: nsapi_virtual() サポートは「実験的」な機能です。



CGI およびコマンドライン

デフォルトでは、PHP は CGI プログラムとしてビルドされます。すなわち、 コマンドラインインタプリタが生成され、 CGI 処理や Web 以外での PHP スクリプトの実行に使用できます。 通常は、PHP のモジュール組込みをサポートしている Web サーバに対しては、 性能面からモジュール版の PHP を選択するべきです。 しかし、CGI 版を使用すると、ページに応じて異なるユーザ ID で PHP を実行することが可能となる利点があります。

警告

CGI モードで公開したサーバは、いくつかの脆弱性の標的となる可能性があります。 これらの攻撃からサーバを守る方法については、 CGI セキュリティ のセクションを参照してください。

PHP4.3.0 において PHP に重要な追加がなされ、 CLI (Command Line Interface) と呼ばれる新しい SAPI が CGI バイナリと同じ名前で存在するようになりました。 configure のオプションにしたがって {PREFIX}/bin/php に インストールされます。詳細については、マニュアルの 「PHPをコマンドラインから使用する」を 参照してください。

テスト

PHP を CGI 版のプログラムとしてビルドした場合、make test とすることで、ビルドされたバイナリをテストすることが 可能です。常にビルド後のテストを行うことが推奨されます。これにより、 使用するプラットホームにおける PHP の問題を早期に見付けることが可能となり、 後になってその問題に苦しむことがなくなるでしょう。

環境変数の使用

いくつかのサーバが提供する環境変数 は、現在の » CGI/1.1 規約 において定義されていません。以下の変数だけがこの規約で定義されています。 AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL, および SERVER_SOFTWARE 。 その他の環境変数は、「ベンダー拡張」として取り扱うべきです。



HP-UX へのインストール

このセクションでは、HP-UX へインストールする場合特有の注意とコツについて説明します

PHP を HP-UX にインストールするには、二通りの方法があります。 自分でコンパイルするか、あるいはコンパイル済みのバイナリを使用するかのどちらかです。

公式のコンパイル済みパッケージは、こちらにあります。 » http://software.hp.com/

このセクションをきちんと書き直すまで、PHP (および拡張モジュール) を HP-UX でコンパイルする方法についてのドキュメントをいったん削除します。 当面は、以下のドキュメントを参照ください。 » Building Apache and PHP on HP-UX 11.11



OpenBSD へのインストール

このセクションでは、PHP を » OpenBSD 3.6 に インストールする場合に固有の注意事項とヒントについて説明します。

バイナリパッケージの使用

OpenBSD に PHP をインストールするには、バイナリパッケージを使用することが もっとも簡単で、また推奨される方法です。 コアパッケージは他のモジュールと分けられており、別個に インストールしたり、削除したりすることができます。OpenBSD の CD や FTP サイトから 必要なファイルを見つけることができます。

インストールに必要なメインのパッケージは php4-core-4.3.8.tgz です。これには基本エンジン (と gettext と iconv) が含まれています。次に、 php4-mysql-4.3.8.tgzphp4-imap-4.3.8.tgz のようなモジュールパッケージを 探してください。これらのモジュールを php.ini 上で有効/無効にするには phpxs コマンドを使用する必要があります。

例1 OpenBSD パッケージインストールの例

# pkg_add php4-core-4.3.8.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (add in mysql)
# pkg_add php4-mysql-4.3.8.tgz
# /usr/local/sbin/phpxs -a mysql
  (add in imap)
# pkg_add php4-imap-4.3.8.tgz
# /usr/local/sbin/phpxs -a imap
  (remove mysql as a test)
# pkg_delete php4-mysql-4.3.8
# /usr/local/sbin/phpxs -r mysql
  (install the PEAR libraries)
# pkg_add php4-pear-4.3.8.tgz

OpenBSD のバイナリパッケージに関する詳細は、man ページの » packages(7) を 参照してください。

Ports の使用

» ports ツリー を使って PHP のソースを コンパイルすることもできます。ただし、この方法は OpenBSD に詳しいユーザにのみ 推奨されます。PHP 4 ポートは core, extensions の 2 つのサブディレクトリに 分割されています。extensions ディレクトリはサポートされているすべての PHP モジュールのサブパッケージを生成します。 これらのうちのいずれかのモジュールを生成したくない場合には、 no_* FLAVOR を使用してください。例えば、imap モジュール のビルドをスキップするには FLAVOR を no_imap に セットします。

一般的な問題点

  • Apache は、デフォルトインストールでは、 » chroot(2) jail 内で実行されます。 これにより、PHP は、/var/www 以下のファイルにしか アクセスできないように制限されます。そのため、セッションを使用するには、 /var/www/tmp ディレクトリを作成するか、他のセッションバックエンドを 用いる必要があります。また、データベースのソケットは jail 内に置かれるか、 localhost インタフェイスが listen できるようにする必要があります。 ネットワーク関数を使用する場合は、/etc 内のファイル、たとえば /etc/resolv.conf/etc/services を、 /var/www/etc に移動させる必要があります。 OpenBSD の PEAR パッケージは、適切な chroot 内のディレクトリに自動的にインストールされますので、 特に修正は必要ありません。OpenBSD における Apache についての詳細は » OpenBSD FAQ を参照してください。
  • OpenBSD 3.6 においては、» gd 拡張モジュールのパッケージは XFree86 のインストールを必要とします。X11 が必要となるいくつかのフォント機能を使わない場合は、 代わりに php4-gd-4.3.8-no_x11.tgz パッケージをインストールしてください。

過去のリリース

OpenBSD の過去のリリースは、静的にリンクされた PHP をコンパイルするために FLAVORS システムを使用していました。 この方法でバイナリパッケージを作成することは困難なため、 この方法は現在は使用されていません。 古い安定版の ports ツリーを使用することもできますが、 これらは OpenBSD チームによりサポートされていません。 これに関するコメントがある場合、port の現在の管理者は Anil Madhavapeddy (avsm at openbsd dot org) です。



Solaris へのインストール

このセクションでは、Solaris に PHP をインストールする際の注意とコツを説明します。

必要