発行した全てのクエリのログをとる

2006/04/06 | MySQL

MySQLで発行した全てのクエリをログにとる方法は、MySQL起動時に「–log」オプションをつけることだけ。RedHat系だと起動スクリプト「/etc/rc.d/init.d/mysqld」に記述する。ただし記述する位置に注意がいるみたいで、場所を間違うと起動しなくなってしまう。具体的にはこういう感じになっている。

/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf –pid-file=”$mypidfile” >/dev/null 2>&1 &

上記の行に–logオプションをつければよいのだが、以下のように

/usr/bin/mysqld_safe –log –defaults-file=/

一番先頭につけると起動しない。二つ目以降に書くといいみたい。

/usr/bin/mysqld_safe –defaults-file=/etc/my.cnf –log –pid-file=”$mypidfile” >/dev/null 2>&1 &

これで/var/lib/mysql/以下に[ホスト名].logというファイルができ、そこに実行された全てのクエリが記録される。

ファイル名と行番号

2006/04/06 | PHPの基本

普段は必要ないけれど、エラーをハンドリングする際には実際にエラーがあったファイル名とその行番号を取得できるとデバッグが容易。
phpの便利な定数で「__FILE__」「__LINE__」というのがある。
__FILE__ 実行中のファイル名
__LINE__ 記述された行番号
複雑にincludeされていても、この定数を使えばどのファイルの何行目かを容易に知ることができる。定数なんて普段はあまり気にしないけど、便利な使い方もあるなぁ、と実感です。

phpMyAdminの文字化け

2006/04/06 | MySQL

自作PHPスクリプトとMySQLとのデータのやり取りで文字化けする件は、phpスクリプトのデータベース接続時に「SET NAMES」コマンドで回避できることがわかった。
自作スクリプトはこれで動いたけれど、とある環境でphpMyAdminで文字化けが発生することがわかった。不思議なことに「phpの設定」「MySQLの設定」が同じであるにもかかわらず、である。
いろいろ調べてみた。どうやらLinuxインストール時の環境にも依存するよう?だ。調べてみたところはここ。

/etc/sysconfig/i18n

このファイルで言語の設定が一行目に書いてあるのだが・・・。うまく動作しているほうはこのように記述があった。
LANG=”en_US.UTF-8″
対して動かないほうはというと・・・。

LANG=”ja_JP.eucJP”

つまり基本言語が「UTF8」か「EUC」かという違い(よくはわからないけど「Localeの違い」ってやつ?)。phpの設定としては基本的にEUCしか使用しないのでどちらも以下のように設定している。

mbstring.http_output EUC-JP
mbstring.http_input Auto
mbstring.encoding_translation Off
「モノは試し」ということでphpmyadminのあるディレクトリに以下の記述をしたhtaccessファイルを設置した。

php_value mbstring.http_output utf8

あら不思議。これでphpMyAdminからもちゃんと日本語が通るようになりました。ひょっとしたらhttp_outputの記述を変更せずにencoding_translationの値を変更することでもうまくいくかもしれない。
phpMyAdminはサーバの言語設定も見ているのかもしれない・・・。今度暇があればソースをじっくり眺めてみる必要がありそうだな。

cookieを有効に使う

2006/04/06 | cookie

「cookieを有効に使う」といってもcookieを使うための関数を紹介するわけではない。
IE6ではプライバシーの観点から、サイトごとにcookieを受け入れるかどうか設定することができる。これはこのバージョンからcookie管理機能が導入されたことによるためだ。
これはW3Cが勧告するP3P(Platform for Privacy Preferences)という機能に準拠したものだ。
詳しくは@ITに記事を見つけたのでリンクをメモっておく。
http://www.atmarkit.co.jp/fwin2k/experiments/ie6privacy/ie6privacy_01.html

出力をカスタマイズする

2006/04/04 | HTML_QuickForm

QuickFormは非常に強力なフォーム作成ライブラリだが、出力するHTMLのカスタマイズは基本的に<input>タグ(もしくは<label>タグなど)の内側だけだ。しかしラジオボタンやチェックボックスなどはテーブル形式に表示するなど美しく整形して表示したいなどのリクエストも多いはず。
これはPHPのMLで話題になった表示をカスタマイズする方法のメモ。やり方としては既存のフォーム部品用classを拡張したカスタムクラスを生成し、そこでtoHTML関数を上書き、新たなフォーム用部品classとして新規登録する手順を踏むことで実現可能だ。以下サンプル(checkboxとラベルを<span>タグで囲む)。

<?php
 require_once(‘HTML/QuickForm/checkbox.php’);
 class myCheckbox extends HTML_QuickForm_checkbox {
  function toHtml()
  {
   if (0 == strlen($this->_text)) {
    $label = ”;
   } elseif ($this->_flagFrozen) {
    $label = $this->_text;
   } else {
    $label = ‘<label for="’ . $this->getAttribute(‘id’) . ‘">’ . $this->_text . ‘</label>';
   }
   return ‘<span>’ . HTML_QuickForm_input::toHtml() . $label . ‘</span>';
 } //end func toHtml
}
?>

上記のようなカスタムクラスを作成し、生成したQuickFormオブジェクトで新規部品として以下のように登録する。

$myForm=& new HTML_QuickForm(‘myForm’,’post’);
$myForm->registerElementType([新たな部品名],[作成したファイルへのパス],[定義したクラス名]);

これで部品を追加(addElement)する際に、上記で定義した[新たな部品名]で呼び出せばカスタム表記した部品を表示することができる。


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