CentOSでのphp-imagickのインストールに少々手こずったので、備忘録として。
- phpのバージョン: 5.3.x
- ImageMagickのバージョン: 6.7.2.x
- php-imagickのバージョン: 3.3.0
yumから、下記のパッケージはインストール済みです。
- ImageMagick
- ImageMagick-devel
- ImageMagick-perl
PECLからphp-imagickをインストールしようとすると以下。
# pecl install imagick downloading imagick-3.3.0.tgz ... Starting to download imagick-3.3.0.tgz (179,978 bytes) ......................................done: 179,978 bytes 17 source files, building ... /var/tmp/imagick/imagick.c:3299: error: ‘ZEND_MOD_END’ undeclared here (not in a function)
検索すると、「pcreなどがPHPcoreに統合されたために」、などが見つかる。
ソースコードの該当の箇所を修正する必要があると考え、別の方法をとることに。
PECLでローカルにダウンロードして、makeすると同様のエラーが出ることを確認する。
$ mkdir ~/imagick $ cd ~/imagick $ sudo pecl download imagick Starting to download imagick-3.3.0.tgz (179,978 bytes) ......................................done: 179,978 bytes File /home/***/imagick/imagick-3.3.0.tgz downloaded $ tar xvfz imagick-3.3.0.tgz $ cd imagick-3.3.0 $ sudo phpize $ sudo ./configure $ sudo make ... /home/***/imagick/imagick-3.3.0/imagick.c:3299: error: ‘ZEND_MOD_END’ undeclared here (not in a function) make: *** [imagick.lo] エラー 1
そして、imagick.cの、該当行を修正。
(“ZEND_MOD_END”は存在しない参照なので、”{NULL, NULL, NULL}”とする)
3298 #endif 3299 // ZEND_MOD_END 3300 {NULL, NULL, NULL} 3301 }; 3302 #endif
改めて、makeからインストールを続行。
php.iniには「extension=imagick.so」を追加する。
$ sudo make ... ---------------------------------------------------------------------- Build complete. Don't forget to run 'make test'. $ sudo make test $ sudo make install $ sudo vi /etc/php.ini $ sudo service httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
インストールの確認として、以下で「imagick」の行を探す。
$ php -m | grep imagick imagick
見つかれば、インストールは無事に完了している。