ionCubeとXdebugの読み込み順ではまる(VPSその8)

開発の終了が発表されても依然として使用しているフレッシュリーダー。
いずれGoogleリーダーにでも引っ越そうかなと考えてはいるのですけど、
設定の引き継ぎが面倒なのでなんとなく躊躇。
VPSへの引っ越しもタイミングだったかなとは思ったんですが、まぁ面倒だったので今回も結局継続使用します。

フレッシュリーダー自体は丸ごとrsyncでコピーすればOK。
データもライブラリもそれで問題ない。
(環境がLinux→Windowsとか、PHP4→PHP5とかでない限り)


以下、ハマリどころを中心にそれ以降の設定について。



苦難その1: dl()が使えない

で、いつも通りioncube_loaderの設定をphp.iniにして…と思ったのだけど、これが動かない。
アクセスしてみると真っ白になってしまう。
ライブラリをハックしてエラーを吐かせてみると、どうやらdl()が動かないと言ってるみたい。

Call to undefined function dl()

dl()というのはPHP 拡張モジュールを読み込むための関数で、正直そんなこと出来て良いのかと思うけれど、
5.3以降では使用に制限が掛かっているみたい。

PHP: dl – Manual

これを使用するにはある程度の条件が揃わないと行けないのだけど…上手く動作できなかった。
条件は満たしているはずなのに。

ただフレッシュリーダーに限って言えば、
dl()を使用するのは事前にiconCube Loaderが読み込まれていないときなので、
この問題はむしろiconCube Loaderの読み込みに失敗している、と言うのが問題っぽい。
とりあえずdl()の件は棚上げにしてiconCube Loaderを読み込めるようにする。



苦難その2: iconCube Loaderが読み込めない

設定はきちんと行っているのに動かないので、
フレッシュリーダー同梱のiconCube Loaderが古いんじゃないかと思い、
別途インストールすることにしてみる。

インストールは普通にダウンロードして解凍して配置、なのだけど、
yumでインストールする方法で。

参考

Install ionCube Loader Using The Atomic Yum Repository On CentOS Linux

Atomic Yum レポジトリを入れる

# wget -q -O - http://www.atomicorp.com/installers/atomic |sh

yum経由でiconCube Loaderをインストール

# yum install php-ioncube-loader

インストールは無事に完了…


…がっ、ダメ!



結局問題はモジュールの読み込み順でした。

結論から言うと、Xdebugよりも先にiconCube Loaderを読み込む必要があります。

php.iniに記述する場合

通常はこちら。
php.iniに記述する場合には、上に書かれているものの方が先に読み込まれるので、
iconCube Loader → Xdebugの順で記述。

yumでインストールした場合

yumを使ってインストールした場合、/etc/php.d/以下に配置されたioncube.iniに読み込みが記述されます。
読み込み順は、まずphp.iniに記述されたモジュールを読み込み、
次にphp.dディレクトリ内のiniファイルをアルファベット順に読み込みます。

なので、Xdebugの読み込み部分を「xdebug.ini」として分割した上でphp.d以下に配置すれば、
iconCube Loader → Xdebugの順で読み込まれることになります。

なるほど。



まさかこんな事ではまるとは…
予想外に時間を取られた。やれやれ。