pecl-uuidを使ってUUIDを生成しようとしたがSegmentation faultで失敗した
CentOS 6.5で、phpを使ってUUIDを生成するためにLes RPM de Remiのpecl-uuidをインストール。
$ sudo yum install php-pecl-uuid
そして、確認のために
$ cat uuid.php
<?php
echo uuid_create()."\n";
というファイルを作り、試したところ
$ php uuid.php
セグメンテーション違反です
となって、UUIDが生成できなかった。 調べてみるとこの現象、同じ環境にpecl-imagickがインストールされていると起きる問題らしい。
モジュールの設定順番が重要のようで、pecl-imagickの共有ファイル(so)を設定する前にpecl-uuidのの共有ファイルを設定しなければならない。
一方でyumインストールでは、設定ファイルが/etc/php.d/
に置かれ、php実行時にファイル名がアルファベット順で読み込まれ設定される。
そうすると、pecl-imagickの設定がpecl-uuidの設定よりも先に行われ、結果として今回の現象が発生する。
なので、pecl-uuidの設定が先に行われるよう
$ sudo mv /etc/php.d/uuid.ini /etc/php.d/00-uuid.ini
とファイル名を変えて試したところ
$ php uuid.php
25abfbed-35c5-4dcd-9937-5431fe76bb3f
解決した。
なおphpコマンドは実行時に設定が読み込まれるが、httpd上のphpはhttpdの起動時に設定が読み込まれるので、設定を反映させるためにhttpdの再起動が必要になる。