携帯から投稿するプラグイン(Ktai Entry)を試していたところ、携帯で撮った写真をローテートする指定を付けるとサーバで受付時にエラーになることがわかりました。
■ 原因は?
どうやら、Ubuntuにもとから入っている PHPの GDライブラリでは ImageRotate()関数が使えなくしてある模様。詳細はよくわかりませんが、ImageRotate()にセキュリティホールがあるようです。セキュリティレポート等を見ると、このようになっています。
PHPをApacheモジュールで共有型ホスティングサービスを利用しているユーザに影響します。SSLを利用している場合は秘密鍵を盗まれます。
Satake Studioの場合、ホスティングはしていますが、ユーザIDを出して自由に使っていただく共有型ではないので、このケースには該当しないようです。
■ 対策
筋がいいのは、Ubuntuにもとから入っている GDはそのままにして、使うところ(WordPressの wp-includesなど)で ImageRotate()関数だけを追加することですが、やってみたところ、関数を定義すると今度は Imagick()がないなど、なかなか一筋縄ではいかないようです。
深追いしてもいいことはなさそうなので、次善の策、PHPのバンドル版のインストールをやってみます。
■ PHPをソースから入れる
手順は次の通りです。
$ mkdir ~/deb $ mkdir ~/deb/php5 $ cd ~/deb/php5 $ aptitude update ← apt-getでエラーが出たため $ sudo apt-get build-dep php5 ← あとで足りないと怒られた $ sudo apt-get install devscripts ← 〃 $ sudo apt-get install fakeroot ← 〃 $ sudo apt-get install shtool ← 〃 $ apt-get source php5 $ cd php5-5.2.4/ $ e debian/rules ← ※1(--with-gdのディレクトリ指定を外す) $ debchange -i ← なにも書かず $ dpkg-buildpackage -rfakeroot $ sudo dpkg -i ../*.deb $ dpkg -l $ s /etc/init.d/apache2 restart
注意点として、debian/rulesの configureオプションの GD関連パラメータを次のようにします。
–with-gd –with-jpeg-dir –with-png-dir –with-zlib-dir –with-ttf –with-freetype-dir –enable-gd-native-ttf –enable-gd-jis-conv
ディレクトリがついたままだと、バンドル版ではなく、UbuntuデフォルトのPHPと同じ構成になってしまいます。
■ 確認
Ubuntu 8.04にデフォルトで入っているPHP環境
GD Support enabled
GD Version 2.0 or higher
ソースから入れたPHP環境
GD Support enabled
GD Version bundled (2.0.34 compatible)