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 ファイルとして吐かれます。