PHP4 & Postgres


PHP4 の portupgrade で思いっきりハマってたら、
どうやら周りの先生方もハマっちゃってたらしい…。


モジュール (pgsql とか) を使うなら、
php4-extensions を入れなきゃいけないんですってよ!
そんで、*.so のパスが通ってないらしいから
手で php.ini を書きかえるんだって。
ちなみに僕の環境では php.ini の extension_dir は
 extension_dir = "/usr/local/lib/php/20020429"
ってことに。
…なんですか? 20020429 って。


そういえば、こないだ apache 2.0.50 の
ports をインストールするときもハマったんだよなぁ…。
普通は、cd /usr/ports/www/apache2 から、
いきなり make install clean とかするものなんですか?
僕はつい make configure とかやっちゃうんですけど…。
make configure ってやっちゃうと、
suexec が全然インストールされなくて、半泣きでした。
たまたま configure の指定を忘れて
make clean の後に make としたらうまくいきました。
apache2 はそもそも configure を使ってない??


FreeBSD 歴、4ヶ月。少しずつ経験値がたまってきています。


で、PHP とポスグレ。
ポスグレの配列型にちょっと興味があったんで、
少し試してみました。
多言語の情報を扱うのには良いかも。
多次元配列は何に使えるかなぁ?
とりあえず、普通に SELECT すると
{{"hoge", "moge"},{"jobs","gates"}}
みたいな text が返ってくるんで、
それを PHP の配列に置き換える関数を作ってみたよ。
↓の array_from_pgarray() ってやつ。

function array_from_pgarray($pgstr, $base = 0) {
	$dim = 0;
	$max_dim = 0;
	$dim_index = array();
	$ret_array = array();
	$quot = false;
	$backslash = false;
	$tmpstr = "";
	for ($cp = 0; $cp < mb_strlen($pgstr); $cp++) {
		$c = mb_substr($pgstr, $cp, 1);
		if (!$backslash) {
			if (!$quot) {
				if ($c == '{') {
					$dim_index[++$dim] = $base;
					if ($dim > $max_dim) $max_dim = $dim;
					$backslash = false;
					continue;
				}
				if ($c == '}') {
					if ($dim == $max_dim)
						set_value_to_multidim_array($tmpstr, $ret_array, $dim_index, $dim);
					$tmpstr = "";
					$dim_index[$dim--] = $base;
					$backslash = false;
					continue;
				}
				if ($c == ',') {
					if ($dim == $max_dim)
						set_value_to_multidim_array($tmpstr, $ret_array, $dim_index, $dim);
					$tmpstr = "";
					$dim_index[$dim]++;
					$backslash = false;
					continue;
				}
			}
			if ($c == '"') {
				$quot = !$quot;
				$backslash = false;
				continue;
			}
			if ($c == '??') {
				$backslash = true;
				continue;
			}
		}
		$tmpstr .= $c;
		$backslash = false;
	}
	return $ret_array;
}

function set_value_to_multidim_array($value, &$ar, $dim_index, $dim) {
	$d_index = array_shift($dim_index);
	if ($dim > 1) set_value_to_multidim_array($value, $ar[$d_index], $dim_index, $dim-1);
	else $ar[$d_index] = $value;
}


テキトウだけど、動いてる(はずだ)からいいや、これで。
(使うことなさそうだからいいや、とも言える)
なんだか、教科書の例題によさげな感じですな。


で。
このソースは Dreamweaver を使って書いたんですが、
僕は Dreamweaver を全く使いこなしてない自分に
気付いてしまいました。
エディタとしてしか使わないなら mi の方がマシだし…。
サイト管理とかは使ってるけど、元々 FTP とか使ってないから
あんまりありがたみを感じておりません。
標準では PHP+MySQL で便利な機能があるみたいで、
ポスグレはどうなんよ? って探したらすぐみつかりました。
PHAkt っていう拡張機能があるんだってさ
Mac 用のパッチも入れて、つながるか試してみたら
あっさり成功。ごっついコードが自動生成されるみたい。
読んでないけど、上みたいな関数もあるんじゃねえの??
ちょっとした Web DB アプリだったら、
めっちゃ楽ちんぽいなんじゃねえの??
とか思ったけど、すぐに飽きてほとんど触ってません。
(Xcode1.5 ってどうなんよ? ってすぐに浮気しました。)


調子に乗って iMODE 拡張を入れたら、
起動時にエラー吐きやがります。
よーぉっく Dreamweaver を見ると、
ところどころで文字化けしてる。
使わない機能のところばっかだからいいけど、
インストールし直したほうがいいかもしれないなぁ…。