[PHP-users 22751]Re: DBを使わないでPHP

NAGATANI Ryo ryon3 @ mutt.freemail.ne.jp
2004年 7月 24日 (土) 17:11:52 JST


 初めまして、長谷と申します。

 テキストファイルベースで作成する場合はPerlのCGIを参考にすると
いいかもしれません。(元々DBをほとんど使わないで作るものでしたし。)

> テキストファイルの、ある行だけ書き換える
 Perlでよく使われる手法をPHPにそのまま直すとこんな感じです。

// ファイル読み込み
$array=file("num.log");
$write=array(); // 書き込み配列初期化
foreach($array as $a){
	list($n,$dat)=split("<>",$a);
	if($n == '10'){	$dat="over write"; } // 見つけたら置き換え
	array_push($write,"$n<>$dat<>\n");
}

$fp=fopen("num.log","w"); // 書き込み開始
flock($fp,LOCK_EX);
foreach($write as $w){ fputs($fp,$w); }
flock($fp,LOCK_UN);
fclose($fp);

print "done.";

 読み込むファイルは、
0<>test<>\n
1<>test2<>\n
  …
というようになってます。区切り文字が改行の前にもあるのは、split
で切ったときに末尾の変数に改行文字が入らないようにする工夫です。
 配列から検索文字列の一部(または列を指定して検索:SELECT文その
ままですね)を探して、その配列番号を返すような命令があれば一発な
んですけどね。array_searchだと全文一致のみのようですし。

# ファイルベースでもDBをそのままCSVに変換して考えればOKです。

 もしお使いのサーバがSQLiteに対応していれば、普通にMySQLと同じ
感覚でDBが使えます。MySQLと違うところはconnectではなくopen,close
を使うところでしょうか。(普通のファイルと同じようにオープンする。
権限はパーミッションで設定。型設定いらず。中規模までなら速い。)
 あとはmysql_〜をsqlite_〜に置き換えればほとんど変わらず使える
と思います。

# 変なこと言ってたらツッコミお願いします(^^;

-----------------------------
 長谷 亮(NAGATANI Ryo)
 ryon3 @ mutt.freemail.ne.jp
-----------------------------



PHP-users メーリングリストの案内