CentOSでのphp-imagickインストール

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

見つかれば、インストールは無事に完了している。