mbstringが読み込まれないのはなぜっ

2013年08月01日
 OpenBlockS600にインストールしてあるApacheとPHPのバージョンを上げようと思って、アプリケーションマネージャから新しいバージョンのバイナリをインストールした。
PHPとApache自体はインストールできたが、ap22-php54-5.4.16(Apache2.2用のPHP5.4モジュール)のインストールに失敗した。
 仕方がないので、SSHで接続。中を見たら古いバージョンのモジュールが邪魔していたのでpkg_deleteで取り除いたらちゃんとインストールできた。ということで、PHP関連の拡張モジュールも全部5.4のものをインストール。前のバージョンの時にはapcくらいしか拡張モジュールを入れた記憶がないけど、まあいいや。
# pkg_info | grep php54     
php54-zip-5.4.16    PHP extension for ZIP archive handling
ap22-php54-5.4.16   Apache (apache22) module for PHP5.4
php54-imap-5.4.16   PHP extension for IMAP (Internet Mailbox Access Protocol)
php54-mssql-5.4.16  PHP extension for MS SQL databases
php54-apc-3.1.13    Alternative PHP Cache
php54-calendar-5.4.16 PHP extension for calendar conversion support
php54-bcmath-5.4.16 PHP extension for bc-style arbitrary precision math
php54-bz2-5.4.16    PHP extension for bzip2 compression
php54-gd-5.4.16     PHP extension for GD graphics library
php54-mbstring-5.4.16 PHP extension for multibyte characters support
php54-dom-5.4.16    PHP5 extension for DOM support
php54-json-5.4.16   PHP extension for JSON serialization support
php54-iconv-5.4.16  PHP extension for character set conversion
(以下略)

# /usr/pkg/etc/rc.d/apache restart

 メッセージフォームを作るのに日本語メール送信の機能が必要だからmbstringがインストールされていることを確認。これでOKと思って、試しに送信フォームを作って送ってみたら、うんともすんともいわない。どうしたことか。BreakPointを仕掛けてみたら、mb_language("ja"); が原因だった。

 ノォォォォ。mbstring絡みじゃね〜か!!!

 phpinfoでモジュールが読み込まれているか見てみたら、mbstringが無い・・・・なじぇ?
 ググること数分。php.ini にモジュールのロードの記述が必要・・・
 バイナリのパッケージ管理だから、その辺も自動で追記されるもんだと思っていたのが甘かった。

 ということは・・・他のモジュールも全部php.iniにロードさせる記述が必要・・・
 うっぜぇぇぇぇ。
 モジュール名とかいちいち調べなきゃならないじゃん。pkg_infoで何か載ってないのか?と思って確認。
# pkg_info php54-mbstring-5.4.16

(中略)
Install notice:
===========================================================================
$NetBSD: MESSAGE.module,v 1.2 2004/11/05 21:50:11 jdolecek Exp $

To enable this module, add the following to /usr/pkg/etc/php.ini:

    extension=mbstring.so

and make sure extension_dir points to the dir where mbstring.so is.

Then restart your PHP5.4-enabled HTTP server to load this module.
===========================================================================

 載ってた・・・。ってことは大量に入れた他のモジュールも1件ずつ全部pkg_infoか・・・・

 やってられん!

 こういうときは本当にCUIのコマンド力がものをいうと思う。
# pkg_info | grep php54 | awk {'print $1'} | xargs pkg_info | grep extension=.*so |sed -e 's/^ *//' |sort
extension=apc.so
extension=bcmath.so
extension=bz2.so
extension=calendar.so
extension=curl.so
extension=dba.so
extension=dom.so
extension=dom.so
extension=exif.so
extension=ftp.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=imap.so
extension=json.so
extension=mbstring.so
(以下略)


 一発ですな。xargsコマンドってほんと便利。あとはこれをphp.iniに追記。
# vi /usr/pkg/etc/php.ini

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=apc.so
extension=bcmath.so
extension=bz2.so
extension=calendar.so
extension=curl.so
extension=dba.so
extension=dom.so
extension=dom.so
extension=mbstring.so
extension=exif.so
extension=ftp.so
extension=gd.so
extension=gettext.so
extension=iconv.so
extension=imap.so
extension=json.so
(以下略)


 php.ini内のコメントを見ていたら、
;extension=php_exif.dll      ; Must be after mbstring as it depends on it
 というのを見つけたので、一応そこだけ順番を入れ替えた。何か依存してんのかな?
 Webサーバを再起動後phpinfoで確認したところ、ちゃんと全部表示されました。
 さて、メッセージフォームを作るか・・・

Home

└▷Technical Reports


Keyword

 [Webサービス]   [Java]   [Windows]   [Macintosh]   [Exif]   [Bash]   [シェル]   [コマンドライン]   [Programming]   [Web制作]   [Unicode]   [パソコン]   [雑記]   [サーバ構築]   [PHP]   [ZenCoding]   [Gmail]   [Aptana]   [Objective-C]   [Linux]   [Postfix]   [RTE]   [CKEditor]   [KCFinder]   [JavaScript]   [SyntaxHighlighter]   [OmniGraffele]   [Oracle]   [Ubuntu]   [Growl]   [HDMI]   [セキュリティ]   [AppleScript]   [Automator]   [webalizer]   [CuBox]   [Apache]   [クロスコンパイル]   [DLNA]   [PS3]   [ITパスポート]   [MySQL]   [文字コード]   [utf-8]