DIGITAL GATE トップ | PHP・MySQL
PHP・MySQL
以前、Mail_Queueを使ってメールを送る時、本文内の特定の文字から文字化けすることがあると書いたが、同様にメールのタイトル(Subject)が文字化けすることがある。
本文同様、きちんとコード変換して渡しているのに文字化けする場合、Mail_Queue のBody.phpが原因になっていることがある。
具体的には、Mail/Queue/Body.phpの284行目あたりにある(前回のちょっと上)
function getHeaders()
ここのstripslashesを外す。
$tmp_headers[$key] = stripslashes($value);
となっている行を
$tmp_headers[$key] = $value;
としてやるだけでいい。
タイトルの文字化けで悩んだ時はお試しを。
本文同様、きちんとコード変換して渡しているのに文字化けする場合、Mail_Queue のBody.phpが原因になっていることがある。
具体的には、Mail/Queue/Body.phpの284行目あたりにある(前回のちょっと上)
function getHeaders()
ここのstripslashesを外す。
$tmp_headers[$key] = stripslashes($value);
となっている行を
$tmp_headers[$key] = $value;
としてやるだけでいい。
タイトルの文字化けで悩んだ時はお試しを。
Mail_Queueを使ってメールを送る時、特定の文字から文字化けすることがある。
きちんとコード変換して渡しているのに文字化けする場合、Mail_Queue のBody.phpが原因になっていることがある。
具体的には、Mail/Queue/Body.phpの300行目あたりにある
function getBody()
ここのstripslashesを外す。
return stripslashes($this->body);
となっている行を
return $this->body;
としてやるだけでいい。
文字化けで悩んだ時はお試しを。
きちんとコード変換して渡しているのに文字化けする場合、Mail_Queue のBody.phpが原因になっていることがある。
具体的には、Mail/Queue/Body.phpの300行目あたりにある
function getBody()
ここのstripslashesを外す。
return stripslashes($this->body);
となっている行を
return $this->body;
としてやるだけでいい。
文字化けで悩んだ時はお試しを。
データセットの方法
$Dataset =& Image_Graph::factory('random', array(31, 0, 10, false));
ランダム発生
$img_text = mb_convert_encoding('とあるサイト',"UTF-8","euc");
$Dataset->setName($img_text);
凡例
$Line =& Image_Graph::factory('Image_Graph_Line_Solid', "red");
線グラフの線オブジェクトを生成(赤い実線)
Line->setThickness(1);
線の太さ1ピクセル
$Marker =& Image_Graph::factory('Image_Graph_Marker_Array');
マーカーオブジェクト(線上の印)
$BoxMarker =& Image_Graph::factory('Image_Graph_Marker_Box');
マーカー生成
$BoxMarker->setSize(3);
マーカー/サイズ
$BoxMarker->setLineColor("red");
マーカー/枠色
$BoxMarker->setFillColor("red");
マーカー/中色
$Marker->add($BoxMarker);
$Plot =& $Plotarea->addNew('line', array(&$Dataset));
エリアにラインとして描画
$Plot->setLineStyle($Line);
線のスタイルは上の設定($Line)
$Plot->setMarker($Marker);
$Markerオブジェクトをセット。
別の方法
$Dataset2 =& Image_Graph::factory('dataset');
$Dataset2->addPoint('1', 3);
$Dataset2->addPoint('2', 10);
$Dataset2->addPoint('3', 12);
$Dataset2->addPoint('4', 10);
$Dataset2->addPoint('5', 15);
$Dataset2->addPoint('6', 16);
$Dataset2->addPoint('7', 20);
$Dataset2->addPoint('8', 15);
$Dataset2->addPoint('9', 9);
$Dataset2->addPoint('10', 16);
データを作成
$img_text = mb_convert_encoding('別のサイト',"UTF-8","euc");
$Dataset2->setName($img_text);
凡例
$Line2 =& Image_Graph::factory('Image_Graph_Line_Solid', "blue");
線グラフの線オブジェクトを生成(青い実線)
$Line2->setThickness(1);
線の太さ1ピクセル
$Plot2 =& $Plotarea->addNew('line', array(&$Dataset2));
エリアにラインとして描画
$Plot2->setLineStyle($Line2);
$Dataset =& Image_Graph::factory('random', array(31, 0, 10, false));
ランダム発生
$img_text = mb_convert_encoding('とあるサイト',"UTF-8","euc");
$Dataset->setName($img_text);
凡例
$Line =& Image_Graph::factory('Image_Graph_Line_Solid', "red");
線グラフの線オブジェクトを生成(赤い実線)
Line->setThickness(1);
線の太さ1ピクセル
$Marker =& Image_Graph::factory('Image_Graph_Marker_Array');
マーカーオブジェクト(線上の印)
$BoxMarker =& Image_Graph::factory('Image_Graph_Marker_Box');
マーカー生成
$BoxMarker->setSize(3);
マーカー/サイズ
$BoxMarker->setLineColor("red");
マーカー/枠色
$BoxMarker->setFillColor("red");
マーカー/中色
$Marker->add($BoxMarker);
$Plot =& $Plotarea->addNew('line', array(&$Dataset));
エリアにラインとして描画
$Plot->setLineStyle($Line);
線のスタイルは上の設定($Line)
$Plot->setMarker($Marker);
$Markerオブジェクトをセット。
別の方法
$Dataset2 =& Image_Graph::factory('dataset');
$Dataset2->addPoint('1', 3);
$Dataset2->addPoint('2', 10);
$Dataset2->addPoint('3', 12);
$Dataset2->addPoint('4', 10);
$Dataset2->addPoint('5', 15);
$Dataset2->addPoint('6', 16);
$Dataset2->addPoint('7', 20);
$Dataset2->addPoint('8', 15);
$Dataset2->addPoint('9', 9);
$Dataset2->addPoint('10', 16);
データを作成
$img_text = mb_convert_encoding('別のサイト',"UTF-8","euc");
$Dataset2->setName($img_text);
凡例
$Line2 =& Image_Graph::factory('Image_Graph_Line_Solid', "blue");
線グラフの線オブジェクトを生成(青い実線)
$Line2->setThickness(1);
線の太さ1ピクセル
$Plot2 =& $Plotarea->addNew('line', array(&$Dataset2));
エリアにラインとして描画
$Plot2->setLineStyle($Line2);
PEARのライブラリを使うと折れ線グラフも簡単に作ることができる。
使い方は簡単。
require_once 'Image/Graph.php';
ライブラリ読み込み
$w = 600;
$h = 300;
画像サイズを設定
$Graph =& Image_Graph::factory('graph', array($w, $h));
これがキャンバスになる
■日本語フォントを使いたい時は、フリーの日本語フォントをサーバー上に置いて指定する。
$Font =& $Graph->addNew('font', '../../font/ipam.ttf');
フォントオブジェクトを作成
$Font->setSize(10);
フォントサイズも指定できる(10ピクセル)
$Graph->setFont($Font);
キャンバスにフォントを適用
■タイトルとグラフを作成するエリアを設定
$img_text = mb_convert_encoding('日別推移',"UTF-8","euc");
日本語を使う時はUTF-8にするのがポイント
コンバートしてあげればいい
$Graph->add(
Image_Graph::vertical(
Image_Graph::factory('title', array($img_text, 12)),
タイトルエリアは上グラフ関連エリア下
文字サイズ12ピクセル
Image_Graph::vertical(
$Plotarea = Image_Graph::factory('plotarea'),
グラフエリアは上
$Legend = Image_Graph::factory('legend'),
凡例エリアは下
90
グラフの占める縦のパーセンテージ
),
20
タイトルが占める縦のパーセンテージ
)
);
$Plotarea->setPadding(array("top"=>1,"right"=>2,"bottom"=>2,"left"=>2));
グラフ描画エリアのpadding設定はこんな感じ
$Legend->setPlotarea($Plotarea);
データと凡例の関係付け
$Legend->setPadding(0);
Legend の padding
$Plotarea->setFillColor('gray@0.05');
グラフエリアの背景色/透明度
$GridY =& $Plotarea->addNew('line_grid', null, IMAGE_GRAPH_AXIS_Y);
$GridY->setLineColor('gray@0.1');
$GridX =& $Plotarea->addNew('bar_grid', null, IMAGE_GRAPH_AXIS_X);
$GridX->setLineColor('gray@0.1');
升目のグリッド指定
http://digital-gate.com/graph/image_graph.php
使い方は簡単。
require_once 'Image/Graph.php';
ライブラリ読み込み
$w = 600;
$h = 300;
画像サイズを設定
$Graph =& Image_Graph::factory('graph', array($w, $h));
これがキャンバスになる
■日本語フォントを使いたい時は、フリーの日本語フォントをサーバー上に置いて指定する。
$Font =& $Graph->addNew('font', '../../font/ipam.ttf');
フォントオブジェクトを作成
$Font->setSize(10);
フォントサイズも指定できる(10ピクセル)
$Graph->setFont($Font);
キャンバスにフォントを適用
■タイトルとグラフを作成するエリアを設定
$img_text = mb_convert_encoding('日別推移',"UTF-8","euc");
日本語を使う時はUTF-8にするのがポイント
コンバートしてあげればいい
$Graph->add(
Image_Graph::vertical(
Image_Graph::factory('title', array($img_text, 12)),
タイトルエリアは上グラフ関連エリア下
文字サイズ12ピクセル
Image_Graph::vertical(
$Plotarea = Image_Graph::factory('plotarea'),
グラフエリアは上
$Legend = Image_Graph::factory('legend'),
凡例エリアは下
90
グラフの占める縦のパーセンテージ
),
20
タイトルが占める縦のパーセンテージ
)
);
$Plotarea->setPadding(array("top"=>1,"right"=>2,"bottom"=>2,"left"=>2));
グラフ描画エリアのpadding設定はこんな感じ
$Legend->setPlotarea($Plotarea);
データと凡例の関係付け
$Legend->setPadding(0);
Legend の padding
$Plotarea->setFillColor('gray@0.05');
グラフエリアの背景色/透明度
$GridY =& $Plotarea->addNew('line_grid', null, IMAGE_GRAPH_AXIS_Y);
$GridY->setLineColor('gray@0.1');
$GridX =& $Plotarea->addNew('bar_grid', null, IMAGE_GRAPH_AXIS_X);
$GridX->setLineColor('gray@0.1');
升目のグリッド指定
http://digital-gate.com/graph/image_graph.php
PHP4のサポートは既に終了しており、全面的にPHP5に移項することが望ましいが、
環境によってはPHP4のままの場所も存在する。
php5になりfile_put_contentsという関数が用意され、
ファイルの保存にとても便利になった。
この関数をPHP4の環境下で使いたい場合、
PEAR のPHP/Compat.phpライブラリを使用すると簡単。
具体的にはPHP/Compat.phpをセットし、読み込むだけでいい。
こんな感じ。
require_once 'PHP/Compat.php';
PHP_Compat::loadFunction('file_put_contents');
環境によってはPHP4のままの場所も存在する。
php5になりfile_put_contentsという関数が用意され、
ファイルの保存にとても便利になった。
この関数をPHP4の環境下で使いたい場合、
PEAR のPHP/Compat.phpライブラリを使用すると簡単。
具体的にはPHP/Compat.phpをセットし、読み込むだけでいい。
こんな感じ。
require_once 'PHP/Compat.php';
PHP_Compat::loadFunction('file_put_contents');
PHP/SWF Charts http://www.maani.us/charts/index.php
PHP/SWF ChartsはFLASHでグラフを出力するライブラリ
視覚的に見栄えのするグラフが簡単に作れる。
スクリプトはPHPを使用。
上記サイトからライブラリをダウンロード
charts.zip他3種類から好きなものを選択。
解凍するとcharts Folderというフォルダができる。
この中にある
charts.swf
charts.php
charts_library(フォルダ)
が必要なので、charts Folderを「charts」などに変えてそのままサーバーにアップするといい。
PHP/SWF ChartsはFLASHでグラフを出力するライブラリ
視覚的に見栄えのするグラフが簡単に作れる。
スクリプトはPHPを使用。
上記サイトからライブラリをダウンロード
charts.zip他3種類から好きなものを選択。
解凍するとcharts Folderというフォルダができる。
この中にある
charts.swf
charts.php
charts_library(フォルダ)
が必要なので、charts Folderを「charts」などに変えてそのままサーバーにアップするといい。
行数の取得
mysql_num_rows($rst)
↓
$rst->numRows()
カラム数の取得
mysql_num_fields($rst)
↓
$rst->numCols()
mysql_num_rows($rst)
↓
$rst->numRows()
カラム数の取得
mysql_num_fields($rst)
↓
$rst->numCols()
テーブル内で1つのカラムに対しての最大値や最小値が欲しい場合、
max(カラム名)やmin(カラム名)として得ることは多い。
では、1つのレコードに対し、カラム1,カラム3,カラム3の中の最大値が欲しい場合はどうするか。
この場合、3つの値を取得してから比較することもできるが、
GREATESTを使うとそのまま最大値を得ることができる。
ちなみに、最小値はLEASTで得られる。
max(カラム名)やmin(カラム名)として得ることは多い。
では、1つのレコードに対し、カラム1,カラム3,カラム3の中の最大値が欲しい場合はどうするか。
この場合、3つの値を取得してから比較することもできるが、
GREATESTを使うとそのまま最大値を得ることができる。
ちなみに、最小値はLEASTで得られる。
quoteSmartが削除されていることはいろいろなサイトで紹介されているが、
autoCommit()メソッドも削除されているので注意。
トランザクションを利用するときは「begenTransaction()」を利用する。
(要use_transactionsオプション)
autoCommit()メソッドも削除されているので注意。
トランザクションを利用するときは「begenTransaction()」を利用する。
(要use_transactionsオプション)
一件のデータを取得する場合
$row = $db->getRow($sql);
↓
$row = $db->queryRow($sql);
$row = $db->getRow($sql);
↓
$row = $db->queryRow($sql);
調べてみると、多くのサイトで、http://go-pear.org/からgo-pear.phpをダウンロードして使うように書いてあるが、実際にアクセスしてみるとドメインが売りに出ているようで見つからない。
さらに探していると、以下のURLで手にいれることが分かった。
http://pear.php.net/go-pear
このURLで表示されたものをgo-pear.phpの名前で保存する。
その際、漢字コードをUTF8、改行コードをLFにすること。
適当なフォルダを作成し、(例:install)FTPでこのファイルをアップ。
インストール用のフォルダを作成し、(例:go_pear)パーミッションを777にする。
ブラウザでアクセス
http://www.hoge.co.jp/install/go-pear.php
さらに探していると、以下のURLで手にいれることが分かった。
http://pear.php.net/go-pear
このURLで表示されたものをgo-pear.phpの名前で保存する。
その際、漢字コードをUTF8、改行コードをLFにすること。
適当なフォルダを作成し、(例:install)FTPでこのファイルをアップ。
インストール用のフォルダを作成し、(例:go_pear)パーミッションを777にする。
ブラウザでアクセス
http://www.hoge.co.jp/install/go-pear.php
PHPでプログラムを書いたり運用している時、エラー表示は便利なものだが、デバッグのたびにエラー表示を書いたりコメントアウトするのは煩雑で何よりミスの原因にもなる。
そこでお薦めするのが、PEARパッケージのLogを使う方法。
まずは以下から入手
http://pear.php.net/package/Log/download
ログの出力先として、ブラウザ、ファイル、データベースと選べるが、ここではデータベースへの方法を紹介。
テーブルの作成
そこでお薦めするのが、PEARパッケージのLogを使う方法。
まずは以下から入手
http://pear.php.net/package/Log/download
ログの出力先として、ブラウザ、ファイル、データベースと選べるが、ここではデータベースへの方法を紹介。
テーブルの作成
CREATE TABLE dg_log_table (idを主キーとする
id INT NOT NULL,
logtime TIMESTAMP NOT NULL,
ident CHAR(16) NOT NULL,
priority INT NOT NULL,
message VARCHAR(200),
);
任意のURLで公開されているRSSを、サイトに表示させる。
もちろん、自分のサイトで発信しているRSSを表示させることも可能。
RSSの取得にはlastRSSを使うのが簡単。
http://lastrss.oslab.net/
設置は簡単。キャッシュ用のディレクトリを作成することくらい。
次に、取得したデータを表示させるPHPを作成。
lastRSS.phpを読み込み
include 'lastRSS.php';
設定(キャッシュ等)
$rss = new lastRSS;
$rss->cache_dir = './cache';
$rss->cache_time = 3600;
$rs = $rss->get($url);
↑$urlに取得したいRSSのアドレスを渡してやれば、$rsにRSSの配列が取得できる。
動作サンプル
もちろん、自分のサイトで発信しているRSSを表示させることも可能。
RSSの取得にはlastRSSを使うのが簡単。
http://lastrss.oslab.net/
設置は簡単。キャッシュ用のディレクトリを作成することくらい。
次に、取得したデータを表示させるPHPを作成。
lastRSS.phpを読み込み
include 'lastRSS.php';
設定(キャッシュ等)
$rss = new lastRSS;
$rss->cache_dir = './cache';
$rss->cache_time = 3600;
$rs = $rss->get($url);
↑$urlに取得したいRSSのアドレスを渡してやれば、$rsにRSSの配列が取得できる。
動作サンプル
MacOSX server を使っていて、いままで問題なく使えていたのにソフトウェアアップデートをかけた途端、GDが使えなくなったら、PHPをダウンロードしてきて、改めてコンパイル&インストールし直すといい。
http://www.php.net/downloads.php
ここからPHPの最新版をダウンロード。
※現時点でのPHP4の最新版はphp-4.4.7.tar.gz
サーバーに置いたら
ターミナルから
tar zxvf php-4.4.7.tar.gz
参考までにconfigureは、こんな感じ。
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --with-apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-trans-sid --with-xml --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-dbx --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-mysql=/usr --with-mysql-sock=/var/mysql/mysql.sock --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-pear
問題無く進めたら
make && sudo make install
でインストール。
終わったら、apacheを再起動。
apachectl graceful
http://www.php.net/downloads.php
ここからPHPの最新版をダウンロード。
※現時点でのPHP4の最新版はphp-4.4.7.tar.gz
サーバーに置いたら
ターミナルから
tar zxvf php-4.4.7.tar.gz
参考までにconfigureは、こんな感じ。
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --with-apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-trans-sid --with-xml --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-dbx --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-mysql=/usr --with-mysql-sock=/var/mysql/mysql.sock --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-pear
問題無く進めたら
make && sudo make install
でインストール。
終わったら、apacheを再起動。
apachectl graceful
