PHPエクステンションの解説は今回でひとまずおしまいです。前回までに紹介できなかったものの中から、とても役に立つエクステンションを紹介します(編集部)
第28回から、多くの開発者が利用するPHPエクステンションを有効にしていく作業を進めてきました。エクステンションについての解説は今回でおしまいです。
毎回テーマを決めてエクステンションを紹介してきましたが、今回は最後ということで、残ったエクステンションから重要なものをいくつか紹介します。1つ目は、画像生成のためのライブラリであるGDを使うためのエクステンションです。GDを使うと、アプリケーションに画像のリサイズやグラフ作成などの描画機能を持たせることができます。
GDエクステンションの利用頻度はかなり高いと言えます。必須のエクステンションと言ってもいいでしょう。なお、こういった画像生成や画像操作のライブラリは他にもありますが、ほとんどの開発者がGDを利用しています。
まずは、GDエクステンション関係のヘルプを見てみましょう。
(略) --with-gd[=DIR] Include GD support. DIR is the GD library base install directory [BUNDLED] --with-jpeg-dir[=DIR] GD: Set the path to libjpeg install prefix --with-png-dir[=DIR] GD: Set the path to libpng install prefix --with-zlib-dir[=DIR] GD: Set the path to libz install prefix --with-xpm-dir[=DIR] GD: Set the path to libXpm install prefix --with-freetype-dir[=DIR] GD: Set the path to FreeType 2 install prefix --with-t1lib[=DIR] GD: Include T1lib support. T1lib version >= 5.0.0 required --enable-gd-native-ttf GD: Enable TrueType string function --enable-gd-jis-conv GD: Enable JIS-mapped Japanese font support (略)
「--with-gd」でGDエクステンションを有効にできるということが分かりますが、他にも指定できる項目があることが分かります。これは、一部の画像形式やフォントの取り扱いは、GDではなくさらに外部のライブラリを使うためです。GDはそもそもGIF形式の画像を扱うためのライブラリであり、JPEGなどを扱うときは他のライブラリの助けを得ているのです(JPEGならlibjpeg。PNGならlibpngなど)。
ヘルプを見ると、GDはPHPに付属していることが分かります。さらにPHPのドキュメントサイトをみると、付属のものを利用することを推奨していますので、今回は付属のものを使うことにします。付属のGDをビルドするには、libjpegとlibpngが必要ともあります。JPEGやPNGといった画像形式は利用頻度が高いので、付属のものを使わない場合であっても有効にするべきでしょう。
フォントを扱うFreeType 2もよく利用します。これも追加しましょう。libzは圧縮のためのライブラリで、すでに第30回で追加しています。PHPのconfigureスクリプトでは、このようにまったく同じ引数が別のエクステンションに関連してヘルプに現れることがありますので注意しましょう。
それでは必要なパッケージをインストールしましょう。libjpeg、libpng、FreeType 2の開発用パッケージを、次のようにしてインストールします。GDの開発用パッケージはインストールしません。
$ sudo yum install libjpeg-devel libpng-devel freetype-devel
PHPのconfigureスクリプトの引数には、次の記述を追加します。
--with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --enable-gd-native-ttf --enable-gd-jis-conv
PHP付属のものを利用しますので、「--with-gd」には何も指定しません。本連載では、Linuxにおいてプログラムをインストールする標準的な場所である「/usr」を明示してきました。この指定は省略可能ですが、あえてすべてを明示するようにしておいたので、「--with-gd」が付属のものを使う指示ということが、すぐに見て取れるようになります。
仮に「/usr」の指定を省略してしまうと、「--with-gd」でPHP付属のものを使っているということが、非常に分かりにくくなります。省略せずに明示することで、後からこのコマンドラインを見ても誤解を招く可能性が低くなるのです。
ビルド、インストールできたら、第31回で紹介した方法でGDエクステンションの状況を確認してみましょう。
gd GD Support => enabled GD Version => bundled (2.0.34 compatible) FreeType Support => enabled FreeType Linkage => with freetype FreeType Version => 2.2.1 GIF Read Support => enabled GIF Create Support => enabled JPEG Support => enabled libJPEG Version => 6b PNG Support => enabled libPNG Version => 1.2.10 WBMP Support => enabled XBM Support => enabled JIS-mapped Japanese Font Support => enabled Directive => Local Value => Master Value gd.jpeg_ignore_warning => 0 => 0
GDエクステンションが有効になっており、なおかつPHP付属のバージョンが使われていることが読み取れます。また、JPEGやPNGにも対応していることも確認できます。
本連載でApache HTTP Server(以下Apache)のビルド手順を解説したときに、SSLを有効にしています(第16回)。SSLのために、OpenSSLという外部ソフトウェアを利用しました。
PHPからもOpenSSLを利用できるようにする、OpenSSLエクステンションがあります。これを利用すると、OpenSSLの機能をPHPから利用できます。ApacheですでにOpenSSLとリンクしていますので、ついでにPHPでも使うことにしましょう。次のコマンドラインを追加します。
--with-openssl=/usr
なお、sslというキーワードでconfigureのヘルプを検索すると、上記以外に次の引数があることが分かります。
(略) --enable-ftp Enable FTP support --with-openssl-dir[=DIR] FTP: openssl install prefix (略) --with-imap[=DIR] Include IMAP support. DIR is the c-client install prefix --with-kerberos[=DIR] IMAP: Include Kerberos support. DIR is the Kerberos install prefix --with-imap-ssl[=DIR] IMAP: Include SSL support. DIR is the OpenSSL install prefix (略) --with-snmp[=DIR] Include SNMP support --with-openssl-dir[=DIR] SNMP: openssl install prefix --enable-ucd-snmp-hack SNMP: Enable UCD SNMP hack (略)
FTP、IMAP(サーバサイドにあるメールボックスにアクセスするためのプロトコル)、SNMP(ネットワーク機器などの管理情報を取得するためのプロトコル)のエクステンションに関連する引数として、「--with-openssl-dir[=DIR]」「--with-imap-ssl[=DIR]」「--with-openssl-dir[=DIR]」という引数があります。
いずれもネットワークプロトコルを扱うエクステンションであり、それぞれのプロトコルでSSLを利用したいときにこの引数を使います。OpenSSLエクステンションとは別に指定しなければなりませんので、これらのエクステンションを有効にするときは留意してください。
暗号関連のエクステンションとしては、mcryptというエクステンションが有名です。その名の通り、mcryptという暗号ライブラリを利用するためのエクステンションです。
PHP+MySQLの環境では、ほぼ間違いなく使うことになるソフトウェアにphpMyAdminがあります。PHPで書かれたMySQLの管理ツールで、Webブラウザから利用できます。データベースのデータの表示や操作といった機能を持っています。phpMyAdminではユーザー認証の方式がいくつか選べるのですが、そのうちの1つはmcryptエクステンションが必要になります。ここでmcryptもインストールしておきましょう。
まず、mcryptの開発パッケージをインストールします。
$ sudo yum install libmcrypt-devel
configureに追加するコマンドラインは次のようになります。
--with-mcrypt=/usr
小数の数値計算を実行すると、誤差が発生することがあります。これは、どのプログラミング言語を使っても大体同じことです。インタラクティブシェルモードで次のように計算式を実行すると、おかしな結果が返ってきます。ここで実行しているのは、0.8を10倍したうえで、整数(int)に変換するというものです。
$ /opt/php-5.3.8/bin/php -a php > echo (int) (0.8 * 10); 8 php > echo (int) ((0.1+0.7) * 10); 7
8という結果が期待されるところですが、0.8を0.1+0.7と表現すると、結果がおかしなことになります。コンピュータは小数を扱うときに、内部的には整数同様に2進数で扱います。しかし2進数で少数を表すときは、精度に限界があります。文字列から2進数に変換すると、誤差が発生することがあるのです。この例では、誤差が表面化してしまい、正しい結果が得られなくなっています。
多くの場合、こういった誤差は注意して計算していれば許容できるものですので、これを現実的な解としています。しかし、科学計算などでは計算を繰り返すことで誤差が積み重なり、その結果が現実と大きくずれてしまうということがあります。
誤差を許さない状況では、小数の精度を管理しながら数値計算をしなければなりません。こういった要求に応えるのが、数値計算用のライブラリです。PHPではいくつかの数値計算用ライブラリが利用できますが、BC Mathエクステンションは外部ソフトウェアが不要で、configureに指定するだけですぐ利用できます。そのため、多くの開発者がPHPアプリケーションで利用しています。
BC Mathを有効にするには、configureの引数に次の行を追加します。
--enable-bcmath
ここまでの内容をまとめます。まずはパッケージのインストールコマンドです。最後の2行が今回追加した内容です。
$ sudo yum install zlib-devel openssl-devel db4-devel pcre-devel $ sudo yum install libicu-devel gettext-devel $ sudo yum install readline-devel libxml2-devel libxslt-devel $ sudo yum install libjpeg-devel libpng-devel freetype-devel $ sudo yum install libmcrypt-devel
PHPのconfigureスクリプトは次のようになります。
./configure --prefix=/opt/php-5.3.8 --with-apxs2=/opt/apache-httpd-2.2.21/bin/apxs --enable-mbstring --enable-intl --with-icu-dir=/usr --with-gettext=/usr --with-pcre-regex=/usr --with-pcre-dir=/usr --with-readline=/usr --with-libxml-dir=/usr/bin/xml2-config --enable-soap --enable-wddx --with-xmlrpc --with-xsl=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib=/usr --with-zlib-dir=/usr --enable-dba --with-db4=/usr --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --enable-gd-native-ttf --enable-gd-jis-conv --with-openssl=/usr --with-mcrypt=/usr --enable-bcmath 2>&1 | tee configure_log.txt
まだ利用頻度が高そうなエクステンションはいくつありますが、エクステンションについてはここまでとします。次回からは、PHPをApacheに組み込む方法を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.