読者です 読者をやめる 読者になる 読者になる

作業ノート

様々なまとめ、雑感など

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の再起動が必要になる。

参考