PHP5 / MySQL5 / JpGraph で Web アプリケーションを!

はじめに、MySQL のインストール方法や PHP と Apache のインストール方法 をまとめてあります。自分にとって必要のあるところだけ参照してください。また、すべての環境をデフォルト設定が UTF-8 になるように構築しています。自分の環境に合わせて変更してください。インストール環境は Solaris 10(OpenSolaris) なので環境依存の部分は、読み替えて参照してください。本当は付属のパッケージでも良いが、ApacheやPHPはセキュリティーパッチをあてやすいようにソースから作っておく。

MySQL5 のセットアップ
PHP5 と Apache2 のセットアップ
JpGraph
MySQL に保存されているデータをもとに JpGraph でグラフ化してみる

MySQL5 のセットアップ

ソースを入手します。
http://dev.mysql.com/

業は スーパーユーザー(root) で行ってください。

    # useradd -m mysql
    # passwd mysql
    New password: <mysql ユーザーのパスワードを設定>
    Re-enter new password: <確認のために同じパスワードを入力>
    # groupadd mysql
    # gzip -dc mysql-5.1.28-rc.tar.gz | tar xf -
    # cd mysql-5.1.28-rc
    # ./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql \
    > --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=all \
    > --with-innodb
    # make
    # make test (cd mysql-test; ./mysql-test-run --force)
    # make install

   ※ main.limit でエラーになる件 Bug #37075
   ※ --with-charsets でデフォルトの文字コードを設定できます。以前は良く binary にしておきました・・・

● データベースの初期化と起動

    # /usr/local/mysql/bin/mysql_install_db --user=mysql
    # chown -R mysql:mysql /usr/local/mysql/var
    # /usr/local/mysql/bin/mysqld_safe --user=mysql &

   ※ 起動時に、キャラクタセットを指定するには ./mysqld --default-character-set=ujis ... と実行します。

● 動作確認

    # /usr/local/mysql/bin/mysqladmin version
    /usr/local/mysql/bin/mysqladmin  Ver 8.42 Distrib 5.1.28-rc, ....
    ...
 
    Server version          5.1.28-rc-log
    Protocol version        10
    Connection              Localhost via UNIX socket
    UNIX socket             /tmp/mysql.sock
    Uptime:                 36 sec
 
    Threads: 1  Questions: 1  Slow queries: 0  Opens: 15  Flush tables: 1 ...
    # /usr/local/mysql/bin/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    | test      |
    +-----------+
    # /usr/local/mysql/bin/mysqlshow mysql
    Database: mysql
    +---------------------------+
    |          Tables           |
    +---------------------------+
    | columns_priv              |
    | db                        |
    | func                      |
    ...
    | time_zone_transition      |
    | time_zone_transition_type |
    | user                      |
    +---------------------------+
    # /usr/local/mysql/bin/mysql -e "select host,db,user from db" mysql
    +------+---------+------+
    | host | db      | user |
    +------+---------+------+
    | %    | test    |      |
    | %    | test\_% |      |
    +------+---------+------+

● 終了方法

    # /usr/local/mysql/bin/mysqladmin shutdown

● MySQL サーバ設定

mysqld_safe は、OS 起動時に起動されるように設定しておく。/usr/local/mysql/share/mysql/mysql.server スクリプトを利用すると良い。また、ソースに含まれるコンフィグレーションファイル (support-files/my-xxxx.cnf) で環境にあったものを /etc/my.cnf としてコピーしておくことで、/etc/my.cnf ファイルの編集でデータベースを最適化できます。huge > large > medium > small の順で規模を選択できます。大規模データベースに合わせたコンフィグレーションファイルの場合、大容量のメモリが必要です。Solaris 10 では、SMFを利用します。

mysqldump コマンドを利用する場合、必ず --default-character-set= によって出力する文字コードを指定すると安全です。また、4.1以上の MySQLを利用するアプリケーションの場合、"SET NAMES キャラクターセット名" という SQL 文(コマンド)を発行しておくことで漢字コードの変換ミスを防ぐことができます。

キャラクターセットmy.cnf で行う方法:

MySQL 4.1.15 以降
[mysqld]
default-character-set=キャラクターセット名
skip-character-set-client-handshake

調整するとよいパラメータ:

パラメータ 意味 設定することで得る効果
key_buffer_size 検索に使われるインデックスをバッファに保存する際のメモリサイズ(MyISAM) パフォーマンスが向上
max_allowed_packet 入力データ保持のための最大バッファサイズ 大きな入力データを扱える
max_connections 認められる同時接続可能なクライアントの数 接続できるクライアント数
table_cache データのキャッシュサイズ(MyISAM) ディスクのI/Oが減りパフォーマンスが向上
sort_buffer_size ソートをおこなう際に使用するバッファサイズ ORDER BYやGROUP BYをクエリーに用いた場合のパフォーマンスが向上
record_buffer スキャンする各テーブルにこのサイズのバッファを割り当てる インデックスを含まないクエリーの実行速度が上がる
join_buffer_size 完全結合(インデックスを使用しない結合)に使用されるバッファのサイズ 大量のjoin の発行に対応(結合を速くする最良の方法はインデックスの追加です)
innodb_buffer_pool_size 検索に使われるデータとインデックスをバッファに保存する際のメモリサイズ(InnoDB) パフォーマンスが向上。スワップに注意して多めに取る。
innodb_log_file_size 更新ログを記録するファイルサイズ 大きなサイズのデータの書き込み時の性能に影響するが、大きなサイズほどデータのリカバリ時間を要する
innodb_flush_method OSによるバッファリングを抑制 InnoDBのみを使っている場合、MySQLとOSとによるダブルバッファリングになるのを抑制する
innodb_flush_logs_at_trx_commit ログファイルへの書き込み方法を設定 0:ログファイルを使用しない/1:ディスクへ書き込み/2:メモリへ書き込み
query_cache_size 実行した Query の SQL とその結果をキャッシュする機能で利用するキャッシュサイズ 実行した Query の SQL とその結果をキャッシュし、同じ Query がキャッシュにある場合は、SQL を実行せずに、キャッシュの内容を返す機能

MySQL が MyISAMにおいて必要とするメモリサイズの計算(実メモリ+スワップ)
key_buffer + ( sort_buffer + record_buffer ) * max_connections = 必要とするメモリサイズ

● ちょっとユーザー管理

MySQL をインストールした際に、デフォルトでいくつかユーザーが作成されています。その中に、root および、利用できる範囲は限定されている無名のユーザーが登録されています。もしそれらのユーザーを削除したり、ユーザーのパスワードの設定や削除をしたいなら以下のように操作します。(使用しているサーバーのホスト名が foobar とします。)

    # mysql mysql
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 13
    Server version: 5.1.28-rc-log Source distribution
 
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
    mysql> select host,user,password from user;
    +-----------+----------+------------------+
    | host      | user     | password         |
    +-----------+----------+------------------+
    | localhost | root     |                  |
    | foobar    | root     |                  |
    | localhost |          |                  |
    | foobar    |          |                  |
    +-----------+----------+------------------+
    4 rows in set (0.00 sec)
 
    mysql> delete from user where user="";
    Query OK, 2 rows affected (0.00 sec)
 
    mysql> select host,user,password from user;
    +-----------+----------+------------------+
    | host      | user     | password         |
    +-----------+----------+------------------+
    | localhost | root     |                  |
    | foobar    | root     |                  |
    +-----------+----------+------------------+
    2 rows in set (0.00 sec)
 
    mysql> set password for root@localhost=password('newpassword');
    Query OK, 0 rows affected (0.00 sec)
 
    mysql> select host,user,password from user;
    +-----------+----------+-------------------------------------------+
    | host      | user     | password                                  |
    +-----------+----------+-------------------------------------------+
    | localhost | root     | *05105863F2A24F0ACD70465AE78B4EEC89E54814 |
    | foobar    | root     |                                           |
    +-----------+----------+-------------------------------------------+
    2 rows in set (0.00 sec)
 
    mysql> quit
    # mysql mysql
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    # mysql mysql -u root -p
    Enter password: <newpassword>
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 13
    Server version: 5.1.28-rc-log Source distribution
 
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
    mysql> set password for root@localhost=password('');
    Query OK, 0 rows affected (0.00 sec)
 
    mysql> quit
    #

PHP 5 + Apache2 のセットアップ

ソースを入手します。
http://httpd.apache.org/download.cgi
http://www.php.net/downloads.php

作業は スーパーユーザー(root) で行ってください。

ソースを展開し、コンパイル、インストールします。

Apache 2 のソースを展開して configure を実行

    # cd /usr/local/src
    # gzip -dc  httpd-2.2.9.tar.gz | tar xf -
    # cd httpd-2.2.9
    # ./configure --enable-modules="so ssl" --with-ssl=/usr/sfw
    # make
    # make install
    # cd ..

Apache の設定ファイルである /usr/local/apache2/conf/httpd.conf をチェックします。既に HTTP サーバーが起動している場合、それを停止するか、新しくインストールした Apache の ポートを変更する。特に Listen, User, Group, ServerName といったディレクティブはチェックしてください。

    # edit /usr/local/apache2/conf/httpd.conf

また、デフォルトの charset が ISO-8859-1 なので自分の作った各ページにMETAタグで charset をきちんと書いていないと文字化けすることがあります。日本語がメインのサイトならば、/usr/local/apache2/conf/extra/httpd-languages.conf を有効にして日本語をデフォルトになるように変更してもよい。

PHP のソースの展開とコンパイル(DSOを作成する)、gd ライブラリ以外は、OpenSolaris付属(Solaris Express Community Edition) のパッケージを利用(特に大意は無いので gd も付属でもよい)

    # gzip -dc gd-2.0.35.tar.gz | tar xf -
    # cd gd-2.0.35
    # ./configure
      ...
    ** Configuration summary for gd 2.0.35:
 
       Support for PNG library:          yes
       Support for JPEG library:         yes
       Support for Freetype 2.x library: yes
       Support for Fontconfig library:   yes
       Support for Xpm library:          yes
       Support for pthreads:             yes
      ...
    # make
    # make install
    # cd ..
    # bzip2 -dc php-5.2.6.tar.bz2 | tar xf -
    # cd php-5.2.6
    # ./configure --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql \
    > --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-mbregex \
    > --enable-zend-multibyte --enable-gd-native-ttf --enable-gd-jis-conv \
    > --with-gd=/usr/local --with-libxml-dir=/usr --with-freetype-dir=/usr/sfw --with-curl
    # make
    # make test
    # make install

ここでは MySQLだけだが、PostgreSQL の場合には --with-pgsql=<PostgreSQLのインストール場所> を、Oracle の場合には --with-oci8=<Oracle のインストール場所> --enable-sigchild を指定します。

PHP の初期化ファイルの設定と Apache 2 の初期化ファイルの設定(AddType の .php のコメントをはずす。php4_moduleの LoadModuleは、上記のインストールで自動的に追記されています。)

    # cp php.ini-recommended /usr/local/lib/php.ini
    # edit /usr/local/lib/php.ini
include_path = ".:/usr/local/lib/php"
 ...
output_handler = mb_output_handler
display_errors = On
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0
mbstring.script_encoding = auto

register_globals は、EGPCS(Environment, GET, POST, Cookie, Server)変数をグローバル 変数として登録するかどうかを指定します。デフォルトで Off になっています。いくつか、On にしないと動作しないアプリケーションがあるようですが、セキュリティーに考慮して On にしてください(セキュリティーといっても、変数を初期化せずに利用しているケースで問題があるようで、きちんと対処すれば問題無い?ようです...そんなプログラミングって、プログラミングの基本が出来てない気がするけれど...)。とはいっても、プログラミングする場合、register_globals=Off にしてスーパーグローバル変数である $_ENV, $_GET, $_POST, $_COOKIE, $_SERVERを利用することをお勧めします(track_vars:PHP 4.0.3 以降常に Onvariables_ordergpc_order をチェック)。

    # edit /usr/local/apache2/conf/httpd.conf
#LoadModule php5_module        modules/libphp5.so
...
# PHP settings
Include conf/extra/httpd-php.conf
    # edit /usr/local/apache2/conf/extra/httpd-php.conf
# LoadModule
LoadModule php5_module        modules/libphp5.so
 
# AddType
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Apache 2 を起動したら使用可能になります。

    # /usr/local/apache2/bin/apachectl start

Solaris 10 では、apachectl コマンドを直接利用せずに SMFを利用するとよい。


JpGraph

ソースを入手します。
http://www.aditus.nu/jpgraph/
http://ossipedia.ipa.go.jp/ipafont/

JpGraph のライブラリは、どこに置いても構いませんが PHP がサーチできるパス (include_path)に置くか、インストールしたディレクトリを php.iniinclude_path に追加すると良いでしょう。 ここでは、include_path = ".:/usr/local/lib/php" となっているとして、/usr/local/lib/php/JpGraph にライブラリをインストール(コピー)します。

JpGraph の設定は、キャッシュのディレクトリと TrueType フォントが含まれるディレクトリを指定します。デフォルトではIPAフォントが指定されているためダウンロードしてインストールします(Linuxの場合、ディストリビューションによっては既にインストールされている場合があります)。JpGraph で日本語を扱うには、文字コードをUTF-8 にする必要があります。

    # unzip IPAfont00203.zip
    # mkdir -p /usr/local/share/fonts/truetype
    # cp IPAfont00203/*.ttf /usr/local/share/fonts/truetype/

● JpGraph の設定設定(jpg-config.inc.php で、キャッシュのディレクトリと TrueType フォントが含まれるディレクトリと日本語のフォントを指定)

    # gzip -dc jpgraph-2.3.3.tar.gz | tar xf -
    # cp -rp jpgraph-2.3.3/src /usr/local/lib/php/JpGraph
    # edit  /usr/local/lib/php/JpGraph/jpg-config.inc.php
      39行目
        define("CACHE_DIR",   "/tmp/jpgraph_cache/");
        define("TTF_DIR",     "/usr/X11R6/lib/X11/fonts/TrueType/");
        define("MBTTF_DIR",   "/usr/local/share/fonts/truetype/");
    # mkdir /tmp/jpgraph_cache
    # chmod 777 /tmp/jpgraph_cache

※ IPAフォント(Ver.3 - OpenTypeフォント形式)を利用する場合、jpgraph_ttf.inc.php を変更する必要があります。

    # edit  /usr/local/lib/php/JpGraph/jpgraph_ttf.inc.php
      136行目
        define('MINCHO_TTF_FONT','ipam.otf');
        define('PMINCHO_TTF_FONT','ipamp.otf');
        define('GOTHIC_TTF_FONT','ipag.otf');
        define('PGOTHIC_TTF_FONT','ipagp.otf');
    # 

● サンプルのレーダーチャート

以下のサンプルが EUCで書かれているとして mb_convert_encoding を利用して UTF-8 にしています。サンプルが Shift-JIS で書かれていれば sjis-winUTF-8 にするようにし、UTF-8 で書かれていれば変換の必要はありません。

<?php
require_once("JpGraph/jpgraph.php");
require_once("JpGraph/jpgraph_radar.php");
 
// データ
$aryData = array(7, 10, 6, 8, 5); // 軸タイトル $aryTitle = array( mb_convert_encoding("走り", "UTF-8", "eucJP-win"), mb_convert_encoding("乗り心地", "UTF-8", "eucJP-win"), mb_convert_encoding("燃費", "UTF-8", "eucJP-win"), mb_convert_encoding("操作性", "UTF-8", "eucJP-win"), mb_convert_encoding("デザイン", "UTF-8", "eucJP-win") ); // レーダーグラフの初期化 $graph = new RadarGraph(350, 250, "auto"); // 背景の設定 $graph->SetColor("white"); $graph->SetFrame(false);
// グラフの描画位置
$graph->SetCenter(0.5, 0.55); // 軸の設定 $graph->axis->SetFont(FF_GOTHIC, FS_NORMAL); $graph->axis->title->SetFont(FF_GOTHIC, FS_NORMAL); $graph->axis->SetColor("#207870"); // グリッドの設定 $graph->grid->SetLineStyle("dotted"); $graph->grid->SetColor("gray"); $graph->grid->Show(); $graph->HideTickMarks(); // タイトルの設定 $graph->title->Set(mb_convert_encoding("ニコニコカーⅡ", "UTF-8", "eucJP-win")); $graph->title->SetFont(FF_GOTHIC, FS_NORMAL, 13); $graph->title->SetColor("#406898"); $graph->SetTitles($aryTitle); // プロットデータの作成 $plot = new RadarPlot($aryData); $plot->SetColor("#ff5588", "#ffeeee"); //$plot->SetFill(false); $plot->SetLineWeight(2); // プロットデータの追加
$graph->Add($plot); // グラフの描画 $graph->Stroke(); ?>

RadarGraph

● サンプルの折線グラフ

以下のサンプルが EUCで書かれているとして mb_convert_encoding を利用して UTF-8 にしています。サンプルが Shift-JIS で書かれていれば sjis-winUTF-8 にするようにし、UTF-8 で書かれていれば変換の必要はありません。

<?php
require_once("JpGraph/jpgraph.php");
require_once("JpGraph/jpgraph_line.php");
require_once("JpGraph/jpgraph_canvas.php");
 
// データ
$labelx = array("1999", "2000", "2001", "2002", "2003", "2004");
$data1  = array(  1683,   1719,   1754,   1883,   1502,   1677);
$data2  = array(  1261,    996,    875,    794,    982,   1140);
$data3  = array(   101,    230,    380,    513,    827,   1843);
 
// Y軸用のコールバック関数
function yScaleCallback($aVal) {
    return number_format($aVal);
}
 
// グラフオブジェクトの生成
$graph = new Graph(500,400,"auto");
 
// 画像フォーマット
$graph->img->SetImgFormat("jpeg");
$graph->img->SetQuality(80);
 
// マージン left, right, top, bottom
$graph->img->SetMargin(80,40,70,40);
$graph->SetScale("textint");
$graph->SetFrame(false);
$graph->SetColor('lightblue');
 
// タイトル
$title = mb_convert_encoding("にこにこ村交通事情","UTF-8","eucJP-win");
$graph->title->Set($title);
$graph->title->SetFont(FF_GOTHIC, FS_NORMAL, 14);
 
// X,Y軸
$graph->xaxis->SetTickLabels($labelx);
$graph->yaxis->SetLabelFormatCallback('yScaleCallback');
$graph->yaxis->SetTextLabelInterval(2);
$graph->yaxis->HideZeroLabel();
$graph->yaxis->SetTitleMargin(55);
$titley = mb_convert_encoding("人口","UTF-8","eucJP-win");
$graph->yaxis->title->Set($titley);
$graph->yaxis->title->SetAngle(0);
$graph->yaxis->title->SetFont(FF_GOTHIC, FS_NORMAL);
$titlex = mb_convert_encoding("年度","UTF-8","eucJP-win");
$graph->xaxis->title->Set($titlex);
$graph->xaxis->title->SetFont(FF_GOTHIC, FS_NORMAL);
 
// グリッド
$graph->xgrid->Show(true,false);
$graph->ygrid->SetFill(true,'#EFEFFF@0.5','#DDEEFF@0.5');
 
// 凡例
$graph->legend->Pos(0.5, 0.08, "center", "top");
$graph->legend->SetLayout(LEGEND_HOR);
$graph->legend->SetFont(FF_GOTHIC, FS_NORMAL);
$graph->legend->SetShadow(false);
$graph->legend->SetLineWeight(1);
$graph->legend->SetColor('black','darkgray');
$graph->legend->SetFillColor('lightblue');
 
// 陸の交通手段
$legend1 = mb_convert_encoding("陸","UTF-8","eucJP-win");
$p1 = new LinePlot($data1);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("blue");
$p1->mark->SetWidth(3);
$p1->SetColor("blue");
$p1->SetCenter();
$p1->SetLegend($legend1);
$graph->Add($p1);
 
// 海の交通手段
$legend2 = mb_convert_encoding("海","UTF-8","eucJP-win");
$p2 = new LinePlot($data2);
$p2->mark->SetType(MARK_SQUARE);
$p2->mark->SetFillColor("red");
$p2->mark->SetWidth(4);
$p2->SetColor("red");
$p2->SetCenter();
$p2->SetLegend($legend2);
$graph->Add($p2);
 
// 空の交通手段
$legend3 = mb_convert_encoding("空","UTF-8","eucJP-win");
$p3 = new LinePlot($data3);
$p3->mark->SetType(MARK_DIAMOND);
$p3->mark->SetFillColor("orange");
$p3->mark->SetWidth(6);
$p3->SetColor("orange");
$p3->SetCenter();
$p3->SetLegend($legend3);
$graph->Add($p3);
 
// グラフの描画
$graph->Stroke();
?>

RadarGraph


MySQL に保存されているデータをもとに JpGraph でグラフ化してみる

まず作業用の DB を作成しアクセス可能なユーザーを設定する。

    $ mysql -u root -p
    Enter password: <root password>
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 68
    Server version: 5.1.28-rc-log Source distribution
 
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
    mysql> create database NIKONIKO;
    Query OK, 1 row affected (0.00 sec)
 
    mysql> grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on NIKONIKO.* to analyst@'%' identified by 'chart';
    Query OK, 1 row affected (0.00 sec)
 
    mysql> \q
    Bye
    $ 

続いて、テーブルを作成しデータをいくつか入れてみましょう。

    $ mysql -u analyst -pchart NIKONIKO
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 73
    Server version: 5.1.28-rc-log Source distribution
 
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
    mysql> create table CarReview (
        -> name varchar(255),
        -> speed int(2),
        -> comfortable int(2),
        -> fuel int(2),
        -> operability int(2),
        -> design int(2));
    Query OK, 0 rows affected (0.00 sec)
 
    mysql> insert into CarReview value ('ニコニコ7', 8, 3, 2, 7, 10);
    Query OK, 1 row affected (0.00 sec)
 
    mysql> insert into CarReview value ('ファミリー900', 6, 9, 7, 6, 4);
    Query OK, 1 row affected (0.00 sec)
 
    mysql> \q
    Bye
    $ 

このデータを PHPから参照しグラフで表示してみます。以下のプログラムは、すべて UTF-8 で記述します。また、どう動いているか理解するためだけのロジックしか記述していません。きちんとエラー処理やセキュリティー対策など行っていないので扱いには十分注意してください。

メインプログラム(car_view.php)

<html>
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title>ニコニコ村 車情報</title>
</head>
 
<body>
<h3>ニコニコ村 車情報</h3>
<table>
<tr>
<?php
// DB情報
$sDsn    = "mysql:dbname=NIKONIKO;host=localhost";
$sUser   = "analyst";
$sPasswd = "chart";
 
// DBアクセス
try {
    $objDB = new PDO($sDsn, $sUser, $sPasswd);
    $objDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    $sSql = "select * from CarReview";
    $objSta = $objDB->query($sSql);
    while ( $aryRet = $objSta->fetch(PDO::FETCH_ASSOC) ) {
        echo '<td><img src="car_chart.php?name='.rawurlencode($aryRet["name"]);
        echo '&s='.$aryRet["speed"];
        echo '&c='.$aryRet["comfortable"];
        echo '&f='.$aryRet["fuel"];
        echo '&o='.$aryRet["operability"];
        echo '&d='.$aryRet["design"];
        echo '"></td>'."\n";
    }
} catch (PDOException $e) {
    echo "<td>".$e->getMessage()."</td>\n";
}
?>
<tr>
</table>
</body>
</html>

レーダーチャート表示プログラム(car_chart.php)

<?php
require_once("JpGraph/jpgraph.php");
require_once("JpGraph/jpgraph_radar.php");
 
// データ
$sName   = $_GET["name"];
$aryData = array($_GET["s"],$_GET["c"],$_GET["f"],$_GET["o"],$_GET["d"]);
 
// 軸タイトル
$aryTitle = array(
        "走り",
        "乗り心地",
        "燃費",
        "操作性",
        "デザイン"
    );
 
// レーダーグラフの初期化
$graph = new RadarGraph(350, 250, "auto");
 
// 背景の設定
$graph->SetColor("white");
$graph->SetFrame(false);
// グラフの描画位置
$graph->SetCenter(0.5, 0.55); // 軸の設定 $graph->axis->SetFont(FF_GOTHIC, FS_NORMAL); $graph->axis->title->SetFont(FF_GOTHIC, FS_NORMAL); $graph->axis->SetColor("#207870"); // グリッドの設定 $graph->grid->SetLineStyle("dotted"); $graph->grid->SetColor("gray"); $graph->grid->Show(); $graph->HideTickMarks(); // タイトルの設定 $graph->title->Set($sName); $graph->title->SetFont(FF_GOTHIC, FS_NORMAL, 13); $graph->title->SetColor("#406898"); $graph->SetTitles($aryTitle); // プロットデータの作成 $plot = new RadarPlot($aryData); $plot->SetColor("#ff5588", "#ffeeee"); //$plot->SetFill(false); $plot->SetLineWeight(2); // プロットデータの追加
$graph->Add($plot); // グラフの描画 $graph->Stroke(); ?>

ブラウザで表示すると以下のようになります。

CarReview