PHPグラフ作成ライブラリ pChart でフリーズ

こんにちは、バズー株式会社、開発チームリーダーの清水です。

PHPグラフ作成ライブラリに pChart というものがあり、なかなか綺麗なグラフが書けるのですが、あるデータを渡すとフリーズ(実行時間が30秒を超える)するバグに遭遇しました。

グーグル先生に聞いてみると drawScale の第3引数を SCALE_NORMAL にするとハマるらしいです。SCALE_NORMAL はグラフの最大値・最小値を渡されたデータから自動的に決定するオプション。SCALE_START0 として最小値を明示的に 0 にすると嘘のように解決しました。これ、モジュールの重大なバグじゃないですかね?

上記のバグに対応し、普通の棒線グラフを出力するサンプルです。

// Standard inclusions
include("pChart/pData.class");
include("pChart/pChart.class");

// Dataset definition
$DataSet = new pData;
$DataSet->AddPoint($datas,"datas");
$DataSet->AddPoint($labels,"labels");
$DataSet->AddSerie("datas");
$DataSet->SetAbsciseLabelSerie("labels");

// Initialise the graph
$Chart = new pChart(230,230);
$Chart->setFontProperties("Fonts/tahoma.ttf",6);
$Chart->setGraphArea(35,10,220,195);
$Chart->drawGraphArea(255,255,255);
$Chart->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,0,0,0,TRUE,30,2,FALSE,$skips);
$Chart->drawGrid(5,TRUE,230,230,230,255);

// Draw the line graph
$Chart->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());

// Create image file
$Chart->Render($image_path);

ちなみに GD が GIF の出力に対応している場合、pChart.class の imagepng を imagegif に直すと携帯でも読める GIF ファイルとして吐かれます。