« こんなのび太になりたいなぁ | Main | お題 »

2004.08.07

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 を見ると、
ところどころで文字化けしてる。
使わない機能のところばっかだからいいけど、
インストールし直したほうがいいかもしれないなぁ…。

|

« こんなのび太になりたいなぁ | Main | お題 »

Comments

123

Posted by: | 2004.12.20 at 17:58

ちょうどarray_from_pgarray()なものを探してました。使わせていただきます。

Posted by: captino | 2006.07.24 at 16:36

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/15584/1139923

Listed below are links to weblogs that reference PHP4 & Postgres:

» [PHP][Postgres]PgSQLで配列変数 [ただのにっき]
Postgresで配列変数を使えるのはいいけど、PHPでselectして読んでもarrayにはならない。 DATABASE= select hoge from fuga; hoge ------------- {foo,bar} これをpg_query()で読むと”{foo,bar}”という文字列になる。 特定の要素を取得するときは select hoge[1] from fu... [Read More]

Tracked on 2006.07.24 at 16:20

« こんなのび太になりたいなぁ | Main | お題 »