PHP

September 29, 2009

PHP5.2.11のpear、peclでエラー

PHP久しぶりに触ったら、環境構築でいきなりつまった。

最新版のPHP5.3では、apcが対応してないらしい。apc-betaなら使えるらしいけど、商用には怖いのでパス。

気を取り直してPHP5.2.11をインストールするも、pear、peclが上手く動作しない。

具体的には、pearでは、以下のような警告文が表示される。
$ pear upgrade-all

Notice: Undefined variable: dorest in PEAR/Command/Install.php on line 1220

Notice: Undefined variable: latest in PEAR/Command/Install.php on line 1228

Notice: Undefined variable: latest in PEAR/Command/Install.php on line 1234

Warning: array_change_key_case(): The argument should be an array in PEAR/Command/Install.php on line 1234

Warning: array_change_key_case(): The argument should be an array in /opt/php-5.2.11/lib/php/PEAR/Command/Install.php on line 1234
Nothing to upgrade-all

peclでは、以下のようなエラーが発生する。
$ pecl install apc
pecl.php.net is using a unsupported protocal - This should never happen.

検索してみると、デフォルトのchannelsの設定が良くないようだ。以下のように、channlesの設定を再生成すると解決した。
$ rm -rf /opt/php/lib/php/.channels/
$ pecl channel-update pecl.php.net
$ pear channel-update pear.php.net

参考:http://www.pear-forum.org/topic2301.html


matssaku at 21:56|PermalinkComments(0)TrackBack(0)clip!

March 20, 2009

PHPでグラフ作成

グラフを動的に生成できるライブラリを調査しました。
条件は、

・言語はPHP
・オープンソース、かつ無償で商用利用可
・折れ線グラフの横軸に、時間軸(date-axis)をとることができる
・積み上げ棒グラフ(stacked bar graph, stacked histogram)が書ける
・見た目が格好良い

です。

調査の結果、
ezcGraphというのを見つけました。

上記の条件はすべて満たしています(ライセンスはNew BSD)。
サンプルコード付きのチュートリアルもありますし、コードもきれいな感じで言うこと無いです。

ezcGraphは、eZ Componentsというライブラリの一部として提供されています。グラフだけでなく、MVCアプリケーション構築用のフレームワークなんかも提供されています。

PEARを使ったインストール手順は以下のとおり。
# pear channel-discover components.ez.no
# pear install -a ezc/eZComponents
# pear upgrade ezc/eZComponents

グラフは、デフォルトではSVG形式で出力されます。PNGやJPEGで出力するためには、PHPを適切にコンパイルする必要があります。具体的には以下のconfigureオプションが必要です。
'--with-zlib' \
'--with-gd' \
'--with-png-dir' \
'--with-jpeg-dir' \
'--enable-gd-native-ttf' \
'--with-freetype-dir' \
libz、libgd、libpng、libjpeg、libgd、libfreetypeが必要になります。また、未検証ですが、UTF-8以外の日本語を埋め込む場合
--enable-gd-jis-conv
オプションが必要かもしれません。UTF-8を利用する場合は、逆に文字化けの原因となるため、指定しないほうが良いです。


matssaku at 17:08|PermalinkComments(0)TrackBack(0)clip!