自宅サーバの PHP のお話~.
自宅サーバは FreeBSD で,PHP は ports で入れてたんだけど, つい最近まで ports の lang/php5 は PHP5.2 系列だった.
で,メインの apache に PHP-5.2.x が入ってるのはいいんだけど, 仕事で PHP5.3 を使うことになったので, もうひとつ別のポートで apache を立てて, そっちに野良コンパイルの PHP5.3 を入れて使ってた.
(この間幾星霜)
なんとなく MediaWiki をインストールしてみた. 5.3 の方に入れたら,「PHP-5.3.1 はバグあるので動きませぬ. 5.3.2 を使ってネ!」というメッセージ.
で,ふと見たら lang/php5 は PHP5.3 になっていて, lang/php52 ってのが追加されてた.ワーオ.
せっかくなので,メインを lang/php5 の PHP-5.3.2 にして, 別ポートの方を 5.2 にしよう.そうしよう.ってことで入れ替えた.
で嬉々として MediaWiki のインスコ画面を見たら, なにやら warning が出ていました.
PHP Warning: preg_match(): Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support at ~~
PCRE が UTF8 対応じゃないので正規表現のコンパイルでエラー出てますよっと.ほへー.
PHP は 5.3 から PCRE エクステンションは常時組み込まれるようになっていて, 5.2 時代には php5-pcre って ports があったのだけど, 5.3 になってからその ports はなくなって (php52-pcre ってのはある), つまり PCRE って組み込みなんじゃねーの? デフォルトで UTF8 非対応のコンパイルなの? と思ったが,Makefile を見てみるとー.
.if defined(WITH_BUNDLED_PCRE) CONFIGURE_ARGS+=--with-pcre-regex=yes PLIST_SUB+= PCRE="" .else LIB_DEPENDS+= pcre.0:${PORTSDIR}/devel/pcre CONFIGURE_ARGS+=--with-pcre-regex=${LOCALBASE} PLIST_SUB+= PCRE="@comment " .endif
だそうで.つまり lang/php5 のコンパイル時に WITH_BUNDLED_PCRE を指定しないと, 内蔵 PCRE は使わず,textproc/pcre の ports のが使われるんじゃないカナ?
ports の PCRE が UTF8 非対応ってこともねーと思うのだけど, 訓練された PHPer はこういう時迷わずバンドルバージョンを使います. かつて gd とかで痛い目に.
というわけで,lang/php5 をもっちり再コンパイルして, MediaWiki も文句言わなくなりました.ヤッフー.
未来の自分への備忘録とはいえ, なんであたしの文章ってこう無駄に長いんだろうね?w