PHPプロ!TIPS+
1. PHPでQRコードを作ろう
最近は、携帯サイト作成の際にはQRコードの存在が欠かせなくなってきました。QRコードを作る方法は様々ありますが、PHPにもこのQRコードをさくさくと作れるライブラリがあります。
今回は、そんな便利なPHPのエクステンション、php_qrを紹介します。
php_qrは、ブログ「讃容日記」の著者id:rsky氏により公開されているPHPエクステンションです。
このライブラリのインストールは、通常のPECLライブラリと同様に、phpizeから以下のようにします。
$ wget http://www.opendogs.org/pub/php_qr-0.1.3.tgz $ tar xvzf php_qr-0.1.3.tgz $ cd php_qr-0.1.3/ $ phpize $ ./configure --enable-qr $ make $ sudo make install
(※なお、執筆時の最新バージョンは0.2.0ですが、テスト環境ではmakeの際にコンパイルエラーが出てしまったので今回は0.1.3を利用しました。)
あとは、php.iniにextension_dirを指定し、
extension=qr.so
の記述を含めてやればインストール完了です。
使い方は非常に簡単で、出力ファイル名とQRコードにしたい文字列、生成するQRコードに関する各種設定を配列としてqr_output_symbol関数に渡すだけです。
このとき、qr_output_symbol関数の第1引数に与える出力ファイル名をnullにすると、通常の出力として扱われるので、適切なheaderを与えてやることでPHPファイルから生成結果を動的に出力することができます。
また、QRコードの出力形式に合わせた適切なContent-typeはqr_mimetype関数を使って取得することができます。
サンプルコードは以下の通りです。
<?php
$data = "テストです";
$data = mb_convert_encoding($data, "SJIS", "UTF-8");
$option = array(
'format' => QR_FMT_BMP,
'magnify' => 2
);
header('Content-Type: ' .qr_mimetype($option['format']) );
qr_output_symbol(null, $data, $option);
?>
このスクリプトをUTF-8で保存し、ブラウザからアクセスすると生成されたQRコードが表示されます。
実際に携帯で読み取ってみると、「テストです」という文字列が認識されるのが分かるかと思います。
(Shift_JISに変換しているのは携帯での文字化け対策のためです。)
このように、非常に簡単にQRコードが生成できるphp_qrライブラリ、ぜひ一度使ってみてはいかがでしょうか。
讃容日記 : http://d.hatena.ne.jp/rsky/
2. XCacheでパフォーマンス向上
2006/11/02号のTIPS「eAcceleratorでスピードアップ」で、eAcceleratorについて紹介しましたが、今回はいくつかあるPHPのアクセラレータの中でも、最近有望視されている(?)ひとつである、XCache(http://xcache.lighttpd.net/)について紹介したいと思います。
PHPのアクセラレータとは、PHPのバイトコードをキャッシュし、コンパイルにかかる時間を減らし、プログラムの速度を向上させることができるものです。
サーバにアクセラレータを組み込むだけで、プログラムを特に変更することなく、簡単にPHPスクリプトのパフォーマンスをあげることが可能です。
今回は、APC、eAccelerator、等々いくつかあるアクセラレータの中のひとつXCacheのインストールについて紹介したいと思います。尚、試してみた環境はCentOS5、PHP 5.1.6、XCache 1.2.1となっています。
それでは、早速インストールを行っていきしょう。
まずは、ソースコードをダウンロードし、解凍します。
今回使用するのは、2007年7月1日にリリースされた最新バージョンXCache 1.2.1となります。
cd /usr/local/src/ wget http://xcache.lighttpd.net/pub/Releases/1.2.1/xcache-1.2.1.tar.gz tar xvzf xcache-1.2.1.tar.gz
つづいて、phpizeとconfigure。
phpize ./configure --enable-xcache
そして、make、make install
make make install
上記でインストールは完了です。make install後にインストール先が表示されますので、こちらを下記の設定ファイルに設定します。(今回環境では、 /usr/lib/php/modules/xcache.soにインストール)
あとは、php.iniへXCache用の設定を追加します。ダウンロードしたソースの中に「xcache.ini」という、見本ファイルがあるのでこちらを参考に設定します。
今回は、php.dディレクトリにxcache.iniとしてコピーしました。
cp xcache.ini /etc/php.d/xcache.ini
あとは、インストールしたサーバの環境に合わせて、xcache.iniを変更します。今回は以下の部分を変更しました。
zend_extension = /usr/lib/php/modules/xcache.so xcache.size = 32M xcache.var_size = 16M xcache.mmap_path = "/tmp/xcache" xxcache.coveragedump_directory = "/tmp/xcache_cov"
最後に、apacheを再起動し、XCacheを有効に。phpinfo()で確認してみましょう。
※phpinfo()の結果
実際に適当なアプリでアクセラレータを使用しない場合とのパフォーマンスを比較してみました。テストにはapacheに付属しているベンチマークプログラム、abを使用し、接続数1000、同時接続数10で計測しました。
ab -n 1000 -c 10 http://example.com/pukiwiki/
##デフォルト(アクセラレータなし) Concurrency Level: 10 Time taken for tests: 86.644329 seconds Complete requests: 1000 Failed requests: 2 (Connect: 0, Length: 2, Exceptions: 0) Write errors: 0 Total transferred: 11262924 bytes HTML transferred: 11047494 bytes Requests per second: 11.54 [#/sec] (mean) Time per request: 866.443 [ms] (mean) Time per request: 86.644 [ms] (mean, across all concurrent requests) Transfer rate: 126.93 [Kbytes/sec] received
##XCache使用 Concurrency Level: 10 Time taken for tests: 38.545037 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 11245448 bytes HTML transferred: 11030233 bytes Requests per second: 25.94 [#/sec] (mean) Time per request: 385.450 [ms] (mean) Time per request: 38.545 [ms] (mean, across all concurrent requests) Transfer rate: 284.89 [Kbytes/sec] received
Requests per secondの値で比べてみると、11.54 → 25.94 と大幅に早くなっているのが分かります。
また、XCacheには管理者用ページも付属しており、XCacheの設定やキャッシュの状況がwebブラウザから確認することができます。
ダウンロードしたソースの中のadminディレクトリをドキュメントルート以下にコピーします。
そして、php.ini(今回はxcache.ini)の[xcache.admin]部分でユーザ・パスワードを設定します。
vi /etc/php.d/xcache.ini [xcache.admin] xcache.admin.auth = On xcache.admin.user = "admin" xcache.admin.pass = "1a1dc91c907325c69271ddf0c944bc72" ;xcache.admin.passにはmd5化した値を記述「md5("pass");の値を設定」
あとは、apacheを再起動し、ブラウザでadminにアクセスすれば、管理画面が表示されます。
※管理画面
アクセスの多いサイトや処理が重いと感じるなど、パフォーマンスにお困りの方は是非試してみる価値はあると思いますので、利用してみてください。
バックナンバーについて
TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。







ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。