PHPのパフォーマンステスト

最近PHPの見直しをしているついでに、記述の違いでどれだけパフォーマンスが違うかをテストしてみました。

チェックしたのは下記2つ。

・『 $a[ abc ](遅い)』と 『 $a[ ” abc ” ](速い)』
・for文で 『 count()を直接指定(遅い)』と 『 count()の結果を変数に代入して指定(速い)』

処理が遅い記述

for ($i = 0; $i < count($a[abc]); $i++){ $hoge1 += $a[abc][$i]; } [/sourcecode] 処理が速い記述

$count = count($a[“abc”]);
for ($i = 0; $i < $count; $i++){ $hoge2 += $a["abc"][$i]; } [/sourcecode] 遅い方の記述と速い方の記述を組み合わせてテストしました。下記ページで確認できます。 PHP パフォーマンステスト

なんとこの2つの記述の違いだけで、約10倍近いパフォーマンスの差がでます。

連想配列はきちんとダブルクォート、もしくはシングルクォートで括っていますが、for文にcount()を指定するのはよくやってしまっています。これからは少し手間でもきちんと変数に代入するように気をつけよう…。

他にも記述の違いでのPHPのパフォーマンスがかなり異なるようで、下記サイトを参考にきちんと基本を見直していこうと思います。

The PHP Benchmark

  • Category : PHP
  • Tags : 

PHPで可逆暗号化する

MySQLを確認したついでにPHPでの可逆暗号化も調べました。

Mcrypt暗号化関数で行うようで、いろいろ試して、いざ本番サーバで動かすと「Call to undefined function mcrypt_get_iv_size() 〜」と、エラーが…。PHPINFOで確認したらMcryptが使えない模様…。

ということで別の方法を探したらPEAR :: Crypt_Blowfishであれば、Mcryptが使えなくても利用できるようなので、さっそく試したところ動作しました。

require_once ("Crypt/Blowfish.php");

$key = "keyword";
$data = "encodewords";
//暗号化
$blowfish = new Crypt_Blowfish($key);
$encode_data = $blowfish->encrypt($data);
//暗号化したデータはバイナリなのでbase64_encodeでテキスト化
echo base64_encode($encode_data);

//復号化
$blowfish = new Crypt_Blowfish($key);
$decode_data = $blowfish->decrypt($data);
//rtrimで「\0」を取り除く
echo  rtrim($decode_data, "\0");

注意点は暗号化したデータを表示させるときは「base64_encode」を通す、復号化したときはお尻に「\0(ヌル文字)」がついている場合があるので取り除く、こと。

暗号化についてはもうちょっと理解できてない部分があるけど、ひとまずはここまで。

PHP: Mcrypt – Manual
PEAR :: Package :: Crypt_Blowfish
2007-11-08 – Do You PHP はてな「PHPで暗号化・復号あれこれ」の続き

SQLBuddyがいいかも

なんとなく昔っからphpMyAdminが好きじゃなくて、ちょこちょこいろんなものを試したけど、なんかしっくりこないものばかり。以前ちらっと試してみようと思いながらほったらかしにしてた「SQL Buddy」を試してみました。

少し触ってみた感じシンプルやし、使い心地はいい感じ!Import、Exportは試してないけど、しばらくこれ使うことにしてみます。

SQL Buddy – Web based MySQL administration