グラフの描画「PHPlot」(再)

2007/05/14 | 画像ツール

久しぶりにグラフを書かせる機会を得た。
ブログの過去記事をみたら、2件存在。「PHPlot」と「GraPHPite」だ。ちなみにGraPHPiteは現在Pearにとりこまれて「Image_Graph」というライブラリになっている。
過去記事「グラフツールphplot
過去記事「PHPによるグラフ描画ツール

まずPHPlotを使ってみた。
これは非常にわかりやすくて使いやすかった。書いたスクリプトはこんな感じ。

(1) $graph=new PHPlot(700,500);
(2) $graph->SetDataType(“text-data”);
(3) $graph->setDataValues($graphData);
(4) $graph->SetPlotType(“bars”);
(5) $graph->SetXTickIncrement(1);
(6) $graph->SetYTickIncrement(1);
(7) $graph->SetLegend($tmpLegend);
(8) $graph->DrawGraph();

(1)でグラフ画像のサイズを指定して初期化し、(2)でデータの種類を指定、(3)であらかじめ用意したデータをセットし、(4)でグラフの種類を指定、(5)(6)でメモリ幅を指定、(7)で凡例を指定、そして(8)で出力。
ただそのままでは日本語が通らなかった。setUseTTFなんて感じで使えそうなメソッドがあって、いくつか試してみたけどうまく動いてくれなかった。仕方がないので、

require_once(LIB_DIR . ‘phplot/phplot.php’);
class extPHPlot extends PHPlot {
var $use_ttf = TRUE;
var $ttf_path = ‘(Path to TTF Directory)';
var $default_ttfont = ‘(TTF Name)';
}

みたいな感じでクラスを拡張し、これを使用した。もちろん上記の$ttf_pathと$default_ttffontには別途用意したTTF(TrueType Font)のパスとファイル名を指定する。これは以下のところからダウンロードして使えばいいだろう。
http://sourceforge.jp/projects/efont/

簡単ではあるのだが、どうもグラフの種類が少ないようだ。とりあえず棒グラフを作ってみたけれど、X軸とY軸を入れ替えたものとかできないっぽい。見栄えもそれほどいいとはいえない。
とりあえずImage_Graphも試してみることにする。

PHPに関するアンケート実施中

2007/05/13 | その他

このたび、ボチボチ構築しているアンケートシステムで、PHPに関するアンケートを実施することにしました。フレームワークや開発環境に関する簡単なアンケートで、多分5分くらいで答えられます。最近の流行とか気になったので、やってみました。お手すきの折にでもご協力くださいな。
2007年5月31日までの回答でいったん集計し、ブログ上で公開する予定です(そのころ仕事でばたばたしていたら、公開が少し遅れるかもしれないですけど、そこは勘弁してください)。

PHPプログラムのアンケートアンケートのURL
PCはこちら
http://service.cubequery.jp/000051c1
携帯はこちら
http://service.cubequery.jp/k000051c1
右側のQRコードからも回答できます。

ではご協力お願いします。

ケータイで地図を表示する

2007/05/12 | その他

PC用のウェブページで地図を扱うのであれば現在はGoogle Mapsの独壇場ではないだろうか。なんといっても無料というのが大きい。無料だけれど、使える地図はゼンリンのもの。数年前ではあれだけ高価だったゼンリンの地図がただで使えるのだから、これに勝るものはない。
しかしこのGoogle Maps。ケータイでも使うことができるのだが、なんらかの位置情報サービスをウェブ上で展開したいときには少しイマイチ。それは住所から地図を表示する、いわゆる「ジオコーディング」の機能を提供していないからだ。ひょっとしたらやり方があるのかもしれないけれど・・・知ってる人がいたら教えてほしい。ケータイから使用する場合は、例えば大まかな住所と行きたい場所の名前を指定するなどすれば情報を表示することができるけれど、単に住所だけを指定して地図を表示させる、ということはできないのだ。
で、その代替。MapFanが「携帯版地図リンクサービス」というのをやっている。登録のみで無料で利用できる地図サービスだ。そこで使用感をレポートしてみる。

(1) 利用するには?
こちらのページから登録をして、登録完了のお知らせが来るのを待る。完了したら利用方法のPDFが送られてくるので、それに基づいてコーディング・スクリプティングする。

(2) ピンポイント地図は?
残念ながら完全にピンポイントは難しそう。「○○市△△町3丁目1」という住所を指定したら「○○市△△町1丁目」から「○○市△△町N丁目」までのリストが表示された。つまり大体の場所しかわからないのだ。これはデータが少ないせいなのだろう・・・(ゼンリンにはかなわないのか)。

(3) 地図を表示するのはMapFanのページ
このサービスはAPIが提供されているのではなく、リンクの張り方が提供されている。つまりGoogle Mapsなら自分で管理するウェブページ内に地図を貼り付けることができるが、MapFanのこのサービスでは、MapFanの地図ページへのリンクをはる、ということになる。ここも少し残念だ。imgタグで地図を指定できればGoodなのに・・・。

しかし、そうはいってもケータイでジオコーディングを利用できる貴重な地図サービスだ。使い方は簡単、興味がある人は是非チャレンジをどうぞ。
私の場合は、QRコードと併用していろいろお試し中。ちなみにお試し中のサイトはこちら。
日本全国釣り具店情報

QRコードの生成

2007/05/11 | PHPライブラリ

最近はケータイもどんどん普及して、インターネット契約者数ではi-modeが一番多いらしいという記事をどこかで読んだ(去年見聞きした話だけど)。
ケータイからウェブにアクセスする際、数字キーでURLをたたくのは面倒だから、やはりここはQRコードの登場となる。いつだったかQRコードが大流行してた時期があったと思うけど、今はそれほどでもないのだろうか。それともあまりに当たり前になってしまったので話題にも上らないのだろうか。
いずれにせよ「ケータイに(URLをメールで)送信」機能と並んで便利に利用できるツールだ。
PHPからQRコードを生成するライブラリといえば、Y.Swetakeさんが作成された「qr_image(QRcode Perl CGI & PHP scripts)」が有名だ(サイトはこちら)。クラスライブラリとしても提供されているので、非常に簡単にQRコードを作成できる。
作り方はこんな感じ。

qrcode.php
<?php
require_once("qrcode_img.php");
header("Content-type: image/png");
$qrData = ‘http://php.tekmemo.com';
$qrCode = new Qrcode_image;
$qrCode->qrcode_image_out($qrData, "png");
?>

てな具合だ(事前にライブラリのパス設定が必要)。
最初にライブラリを読み込んで、ヘッダを送信し、次にイメージを生成する。これを<img src=’qrcode.php’>などとイメージタグから呼び出すと、HTML上でQRコードを表示させることができる。
すばらしいライブラリ提供者のY.Swetakeさんに感謝。

postでリダイレクト

2007/05/10 | その他

時々だがこういうお話を聞くことがある(PHP-MLネタ)。

(1) ブラウザからプログラムAにリクエストを出して、Aでしかるべき処理をし、
(2) その後ブラウザからプログラムBへ、プログラムAで処理した内容を持ってpostしたい。

これは「できない」のだ。こんなことができてしまったら大変だ。悪意あるサーバに対して誤ってリクエストを送っただけで、例えば「別のブログサイトへスパム投稿させる」といったこともできてしまう。
上記のような処理を思いついたなら、即座にその考えを捨て、別の処理方法を探るべきだ。

別解として、いくつかあると思う。ぱっと思いついただけでも、
(1) Aで処理した内容をセッションに保存してBへリダイレクトさせ、そして処理。
(2) Aで処理して、必要であればBをインクルードして追加処理をし、結果を表示。
こんなことでできるはず。

しかし最近面白い記事を見かけた。いったんAにpostした内容を、Bへpostで再送信させる方法だ。「Do you PHP」の下岡さんのブログでの記述

HTTPレスポンスで「一時的にこっちのURLをつかってね」返す方法だ。やり方はheader関数を使って、

header(‘Location: http://www.example.com/B.php’, true, 307);

とステータス307を返してやるというもの。なんでもFireFoxではダイアログが表示されるが、IEでは何も表示されず(何事もなかったように)うまくpostしてくれるそうだ。いろいろなステータスコードがあるものだ。

しかしやっぱりスマートな処理方法ではないと思う。
ロジックを見直すほうがきっとスマートなプログラムになるはず・・・。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net