PHP(PHP: Hypertext Preprocessor)はHTMLに埋め込み、サーバー側で解釈実行されるスクリプト言語です。
Perlによく似た簡単な文法と多くのRDBMS(リレーショナルデータベース管理システム)との親和性により、
特に軽量なWebアプリケーションに構築に幅広く使われています。
PHP言語の解釈実行系(インタープリタ)はPHPエンジンと呼ばれます。
(Perl言語に対するperlコマンドみたいな関係ですね)
PHPエンジンはwww.php.netでソースアーカイブとバイナリアーカイブが無償で配布されています。
最新のバージョンは5.3.2です。
PHPの使い方としては、CGIのexeとして使う方法もありますが、
主にはApacheのモジュールとして使うので、後者を前提にご紹介します。
ここでは次の環境で試した結果をメモっています。
OS | Apache | PHP |
MS-Windows XP Home Edition | 2.0.50 | 5.1.1 |
MS-Windows XP Home Edition | 2.0.50 | 5.2.3 |
MS-Windows XP Home Edition | 2.2.8 | 5.2.6 |
Vine Linux 3.1 | 2.0.54 | 5.1.1 |
MS-Windows 7 Home Premium | 2.2.14 | 5.3.1 |
●軽い
CGIでは、Webサーバがリクエストの都度プロセスを起こして処理を実行しますが、
PHPは(通常のモジュール方式の場合)Webサーバのプロセスの中で処理を行うので、
メモリ負荷が軽く高速です。
●HTML文書に埋め込むテンプレートのような使いかた
CGIの場合は、サーバー側に置かれたPerlスクリプトがHTML文書全体を生成しますが、
PHPスクリプトは同じようにスクリプト全体を1ファイルにしてWebサーバに置くことも、
最初からHTML文書に埋め込むこともできます。これを使い分けることで、
表示とロジックの記述を別ファイルに分離することが簡単にできます。
●RDBMSとの親和性
PHPは最初からRDBMS(リレーショナルデータベース管理システム)
と連係するWebアプリケーションの構築を目的に開発されてきたため、
Oracle、Sybaseなどの商用RDBMS、PostgreSQLやMySQLなどのオープンソースRDBMS
にアクセスする関数群(API)が用意されています。
このようなRDBMSとの高い親和性はPerlなど他の言語にはないPHPの優れた利点です。
- Apacheは先にインストール済みとします。
まずPHPの
Windowsバイナリ専用ダウンロードページ
からバイナリ配布 (php-5.2.6-Win32.zip)を入手し、展開します。
(※1 ver5.3.1の場合は後述)
php-5.2.6-win32というディレクトリができるので、
インストールしたい好きな位置へ移動させ、改名します。
たとえば C:\Wintools に移動し、名前を php5 に変更したとします。
- Apacheが動いている場合は停止します。
- Apacheの設定ファイルhttpd.confに記述を追加します。
以下はApache2.2の例です。Apache 2.0の場合は「php5apache2.dll」を代わりに指定します。
二重引用符で囲むかどうかはどちらでもOKです。
LoadModule php5_module "c:/Wintools/php5/php5apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "c:/Wintools/php5"
|
-
C:\Wintools\php\php.ini-distを、php.iniという名前に変更し、必要に応じて編集します。
(※2 ver5.3.1の場合は後述)
初期状態でも動きますが、
OCI8やpgsqlなどの拡張関数モジュール(extension)を使う場合には、
; Directory in which the loadable extensions (modules) reside.
;extension_dir = ./
extension_dir = C:/Wintools/php5/ext/
|
の部分を書き換えておきます。(PHP4の場合はextではなくextensions)
また、後半に各RDBMSごとのDLLを定義している部分が全てコメントになっているので、
使いたいRDBMSの行を選んでコメントを解除します。
extension=php_mysql.dll
;extension=php_mysqli.dll
extension=php_oci8.dll
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
|
(mysqlはMySQL 4.0以前、mysqliは4.1以降用です)
なお、以前のバージョンでは、php.iniとphp5ts.dllは、
C:\Windows、またはC:\Windows\system32 にコピーする必要がありましたが、
Apacheのhttpd.confに「PHPIniDir」と書くとこの操作は不要となり、
Windowsシステムフォルダに干渉する必要はなくなったようです。
-
上記のようにmysqlへのアクセスを利用する場合には、
PHPのトップディレクトリにあるlibmysql.dllを、
C:\WINDOWS\system32、またはApacheのbinディレクトリにコピーします。
(私が試したときは、後者でないとApacheの起動時に
「指定されたプロシージャが見つかりません」というエラーになりました)
- Apacheを再起動します。
コマンドラインまたはスタートメニューからApache.exeを実行した場合、
コマンドプロンプトに起動メッセージで
「Apache/2.2.8 (Win32) PHP/5.2.6 running...」と出ればOKです。
またはNT/2000/XPの場合、Apacheサービスを再起動します。
Apache2台の場合、Apacheのミニアイコン(ApacheMonitor.exe)がタスクバーに常駐します。
それを右クリックして「Open Apache Monitor」でモニターウィンドウを出し、
そのステータスバー(一番下)を見ます。ここに
「Apache/2.2.8 (Win32) PHP/5.2.6」
のようにPHPのバージョンが表示されていればOKです。
- 上記の作業で一応、PHPは動きますが、標準ライブラリPEARを使いたい場合も多いと思うので、
そのインストールもやります。
PCをインターネットに接続した状態で、PHPのルートディレクトリにある「go-pear.bat」を実行します。
コマンドラインで幾つかの質問が出るので、これに答えるとダウンロードしながらインストールされます。
(※3 ver5.3.1の場合は後述)
(php.iniを書き換えるか?との質問にYと答えると、
php.iniの末尾にinclude_pathの設定が自動的に追加されます)
●PHP 5.3.1の場合の補足
※1 バイナリ配布は「VC6」と「VC9」、「Non Thread Safe」と「Thread Safe」
で合計4種類があります。ページ左の補足にある通り、
Apache HTTP Serverに組み込んで使う場合やCGIなどスタンドアローンで使う場合にはVC6、
IISに組み込んで使う場合はVC9を選びます。
またThread SafeとNon〜の使い分けはそこには書いていませんが、
Apache HTTP Serverに組み込んで使う場合はThread Safeを、
CGIなどスタンドアローンで使う場合はNon Thread Safeを選びます。
(Non Thread Safe版にはphp5apache2_2.dllなど一部のファイルが含まれていないので、
上の手順に沿って実行していると詰まってしまうところがあります)
※2 5.3.1ではphp.ini-productionとphp.ini-developmentという名前になっているので、
どちらかを選んでphp.iniに改名して上書き編集します。
両者の違いは、php.ini-developmentはdisplay_errorsがOnになっているなど、
開発・テスト環境向けの設定になっていることです。
勉強用ならばdevelopmentを選ぶのがよいでしょう。
※3 私の環境ではgo-pear.batがエラーになって動きませんでした。
そこで代わりにコマンドプロンプトでPHPのホームディレクトリに移動後、
「php -d phar.require_hash=0 PEAR\go-pear.phar」と打つと正しく実行されました。
●OCI関数(Oracle)を使うときの注意点
WindowsでApache+PHPを動かすとき、通常はバイナリ配布をインストールすると思いますが、
PHP 5.2.5以降のバイナリ配布では、10g以降のOracle Clientが必要になります。
(5.2.6とOracle8i Client 8.1.7で現象を確認)
8iや9iだと起動した際に次のようなエラーになります。
プロシージャエントリポイント OCIStmtPrepare2 がダイナミックリンクライブラリOCI.dllから見つかりません。
php_oci8.dll - 指定されたプロシージャが見つかりません。
|
10g以降のOracle Clientといってもっとも入手しやすいのは、
Instant Client
でしょう。
上記の米国サイトで常に最新版が入手できるほか、
日本語サイトでも10gなら入手できます。
Instantの名の通り、zipアーカイブを展開して軽く設定すれば、
レジストリをいじることなくすぐ使えるようになります。
なお日本語環境で使う場合「Basic Lite」を選んではダメです。
ドツボにはまって延々悩むことになるので「Basic」をダウンロードしましょう。
PHPのインストール UNIX編(Apache2台) |
PHP5(5.1.1)の、Apache2へのインストールです。
ここでの説明は、
Apache2を/usr/local/apache2にインストールしているものとして書いています。
インストール位置が異なる場合は適宜読み替えてください。
なお、PHPのインストールにはbisonとflexが必要です。
私はbison 2.1、flex 2.5.4で確認しました。
これらはftp.gnu.orgからソース配布をダウンロードできます。
(flexはgnuディレクトリではなく、non-gnuディレクトリにあります)
-
www.php.netからphp-5.1.1.tar.bz2をダウンロードして、展開します。
bzip2 -cd php-5.1.1.tar.bz2 | tar xf -
|
-
configureですが、ここぞとばかりにめいっぱいオプションをつけてみました(-_-)。
こんな感じです。
sh configure --with-apxs2=/usr/local/apache2/bin/apxs \
--with-zlib --with-bz2 --with-jpeg-dir --with-tiff-dir \
--with-dom=/usr/local \
--with-dom-xslt=/usr/local --with-dom-exslt=/usr/local \
--enable-ftp \
--with-iconv --with-java=/usr/local/java \
--with-ldap --enable-mbstring --enable-mbregex \
--with-mysql=/usr/local/mysql --with-mysqli --with-pgsql \
--enable-xslt -with-xslt-sablot \
--enable-versioning --enable-zend-multibyte \
--enable-memory-limit
|
きょー!!
もちろん、この中には外部のフリーウェアのライブラリを必要とするオプションもたくさんあるので、
それぞれの機能を使いたい場合には事前にフリーウェアのライブラリをインストールしておく必要があります。
例えば、--with-zlibはZlib、
--with-bzip2はlibbzip2、--with-jpeg-dirはlibjpeg、--with-tiff-dirはlibtiff、
ここまでは最近のLinuxやFreeBSDならOSのインストールと同時に確実に入っているので問題ないでしょう。
--with-domと--with-dom-xsltと--with-dom-exsltは
libXML2とlibXSLT、--with-iconvはGNU iconv、--with-ldapはOpenLDAP、
--with-pgsqlはPostgreSQL。
これらはちょっと古いOS付属のものはインストールされていたとしても、
バージョンが古いので使えないと警告されることがあります。
そして、--with-javaはJ2SE、--enable-xsltと--with-xslt-sablotはSablotron。です。
なお、
--with-mysqlの後にはMySQLのルートディレクトリの指定が必須です。
--with-mysqliの方は、mysql_configコマンドにPATHが通っていればそのままでOK、
そうでなければ、そのパスを指定する必要があります。
また、
ApacheのPHPモジュールを作るには、ApacheのapxsコマンドにPATHが通っているか、
--with-apxs2でそのパスを指定する必要があります。configureがapxsを見つけられないと、
コマンドラインのインタープリタしか作られないので注意して下さい。
-
で、makeでコンパイル、make installでインストールを行えばOKです。
-
libs/libphp5.so を /usr/local/apache2/modulesにコピーします。
(通常make installによって既にコピーされているので、何もしなくて可と思います)
-
/usr/local/apache2/conf/httpd.confをテキストエディタで編集し、
次の2行を追加します。
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
|
(1行目は、make installによって自動的に書き加えられます。
この場合、古いhttpd.confはhttpd.conf.bakという名前で同じディレクトリに保存されています)
-
アーカイブに入っているphp.ini-distを
/usr/local/lib/php.ini という名前でコピーし、必要に応じて編集します。
とりあえず動くのを確認したいなら、編集せずにそのまま使用できます。
-
これでApacheを再起動すればインストールは完了です。
phpinfo()を使った簡単なサンプル文書を作って、動作を確認します。
PEAR(PHP標準のコンポーネント・フレームワーク)を使いたい場合には、
php.iniの「include_path」の指定を変更します。
例えばWindowsの場合は
; Windows: "\path1;\path2"
;include_path = ".;c:\php\includes"
include_path = ".;C:/Wintools/php5/PEAR"
|
UNIXの場合は、
include_path = ".:/usr/local/lib/php"
|
のようになります。環境変数PATHと同じく、
Windowsではセミコロン(;)、UNIXではコロン(:)が、パスの区切り子となります。
また、セッション機能を使うときには、PHPはセッション情報を一時ファイルに書き出します。
標準設定ではこのファイルを書くディレクトリは /tmp (C:\tmp)になっていますが、
特にWindowsで C:\tmp が存在しない場合は、
セッションを利用しようとしたときにエラーが発生してしまいます。
これは下の部分を設定すればOKです。
; Argument passed to save_handler. In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;session.save_path = "/tmp"
session.save_path = "/temp"
|
また、「<?php 〜 ?>」ではなく
「<? 〜 ?>」や「<?= 〜 ?>」の短いタグを使いたい場合は、
;short_open_tag = Off
short_open_tag = On
|
の部分の設定を変更します。
また、timezoneの設定をしないと、
date()関数を使ったときにセキュリティ面の脆弱さを警告する出力が出ることがあります。
;date.timezone =
date.timezone = "Asia/Tokyo"
|
また、セキュリティの観点から、過去の遺産(以前のバージョンで作ったプログラム)
を引き継ぐ必要がない環境では、迷わず
の設定を確認しておきましょう。
(first uploaded 2001/01/17 last updated 2010/05/03, KQ TAURA - URANO398)
|