PHP5をさくらに入れてみる。

Zend Frameworkを使ってみたいのですが、PHP5に対応していないといけないとのことなので、さくらにPHP5を入れたいと思う。
 Zend社は、PHP4からPHP5への移行がうまくいかないから、FrameworkをPHP5からの対応としたらしいけど、そのおかげでFrameworkが使われていないと思うのだが。。。

PHP5をインストール

今回はPHP5.2.1を入れることにしました。
 どうもPHP5.1系は

error: `CURLOPT_FTPASCII’ undeclared (first use in this function)
error: `CURLOPT_PASSWDFUNCTION’ undeclared (first use in this function)

こんなエラーが出て、コンパイルできなかったのでorz
 ググってみると、curlのバージョンによって中のソースが変わっていて、コンパイルが通らなくなるとのこと。
 自分でcurlだけを入れてもいいけど、めんどくさいからPHP5.2.1で。

% wget http://www.php.net/get/php-5.2.1.tar.gz/from/jp2.php.net/mirror
% tar php-5.2.1.tar.gz
% cd php-5.2.1
% setenv PHP_PEAR_CACHE_DIR $HOME/local/php/pear/cache

環境変数については、こちら
 configureオプションですが、もともとさくらについていたものに加えて

  • --prefix=$HOME/local/php
  • --with-config-file-path=$HOME/local/php
  • --program-suffix=5
  • --with-pear=$HOME/local/php/pear

を追加したと思います。(たぶん)
 実際は、

% ./configure  --prefix=$HOME/local/php --with-config-file-path=$HOME/local/php --program-suffix=5 --enable-force-cgi-redirect --with-pear=$HOME/local/php/pear --enable-mbstring=all --enable-mbregex --enable-mbstr-enc-trans --enable-versioning --with-openssl=/usr --with-iconv=/usr/local --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-ttf --with-freetype-dir=/usr/local --with-mysql=/usr/local --with-soap=yes --with-zlib=/usr --enable-xslt --with-xslt-sablot=/usr/local --with-dom --with-dom-xslt --with-gettext=/usr/local --with-curl=/usr/local/share/curl --enable-exif
% make
% make install

な、なんて多い。。。
 たぶん無駄なやつもあるんでしょうが、でもそんなの関係ねえ!!

設定

% mkdir $HOME/www/cgi-bin
% cd $HOME/local/php/bin

% cp php5 $HOME/www/cgi-bin/php5.cgi

% cd $HOME/www/
% vi .htaccess

----------------------------------------------
Action php5-script /cgi-bin/php5.cgi
AddHandler php5-script .php
----------------------------------------------

実は先日までこの.htaccessとか全然理解していないのに、使っていたのでこの際調べてみました。

拡張子 extension に対して、ハンドラタイプ handler-name を定義します。
 .phpという拡張子に対して、php5-handlerというハンドラを定義しているわですね。

  • Action type cgi-script

type で指定された MIME タイプまたはハンドラタイプのファイルがリクエストされたときに、cgi-script を実行させるそうです。
 つまり、今回の場合は、php5-handlerというハンドラ、.phpがリクエストされたときに/cgi-bin/php5.cgi、$HOME/local/php/bin/php5が実行されるということです。

これはPHPCGIスクリプトとして利用するということでしょうか??
 うーむ、調べたのによくわからん。誰か教えてくださいorz
何はともあれ、これでphpinfo.phpとかでちゃんと見れればオッケーです。

PEARが使えない!?

ということで、なぜかデフォルトではPEARコマンドが使えなかったりするので、設定。

vi $HOME/local/php/bin/pear

10行目あたりの
PHP="/home/hoge/php/bin/php"
を
PHP="/home/hoge/php/bin/php5"
に変える。

どうやら理由はconfigureオプションで付けた--program-suffix=5にしたため、pearシェルスクリプトと差異が出たようです。
 pearコマンドがシェルスクリプトだったとは知りませんでした。
 ちなみに--program-suffix=5は、元からさくらに入っているphpと区別するため、作成されるファイルの中でphpという名前の付くものに「5」を付けてくれるものだそうです。(間違ってたらすみません。)
でもこのままでは、pearコマンドを使っても元からあるさくらのpearコマンドが使われてしまいます。
 ということで、悩んだ末、ログインシェルの設定ファイルのset pathに$HOME/local/php/bin/を追加しました。set pathは書いてある順番にコマンドを探すので、もとからあるpearコマンドより前に書く必要があります。
これにて終了!!
 あ、でも書いているうちに思ったんやけど、pearコマンドをpear5って名前にして、中身のシェルも名前をちょっといじったらいいだけやったかも。。。