人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のメソッドを使用して、ファイルの書き込みをしたいのですが、
PHPで同時書き込みを制限したり、
ファイルが壊れないように、
さらに書き込みデータ等が正常に来ない場合はエラーに
するなどの制限をしたいです。
DBに格納するような感じで、ファイルにデータを書き込みたいです。
PHPでもっときちんと出来るのでしょうか?
自分のスキルでは以下のソースが限界です。
他に知っている方がいましたら教えて下さい。

function test_wirte($data){
define("CSVFILE_CAMP","/test/list.csv");
$file_csv = CSVFILE_CAMP;
//ファイルオープン
if(!($fno = fopen("$file_csv","a+"))){
return -1;
}

//ファイルロック
flock($fno,LOCK_EX);
//現在日付の取得
$bbbb = $data['bbbb'];
$aaaa = $data['aaaa'];
$strDate = date("y-m-d H:i:s");
$str_file = "";
$str_file .= "$strDate";
$str_file .= "\t";
$str_file .= "$bbbb";
$str_file .= "\t";
$str_file .= "$aaaa";
$str_file .= "\t";
$str_file .= "\n";
//ファイル書き込み
fwrite($fno, $str_file);
//ファイルアンロック
flock($fno,LOCK_UN);
//ファイルクローズ
fclose($fno);
return 0;
}

●質問者: hopefully
●カテゴリ:就職・転職 コンピュータ
✍キーワード:CSV dB Flock PHP test
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●23ポイント

http://jp.php.net/manual/ja/function.fclose.php

書き込みできたかの確認には fclose の返り値もチェックしましょう。

ただ、出来ればこのような制御はDBに任せたいところですね。

SQL に抵抗が無ければ、SQLite 等がオススメです。

ファイルベースなのでサーバーを立てる必要がありません。

◎質問者からの返答

件数が多くなると思うので

SQLiteはちょっと無理そうですね。

でもありがとうございます。


2 ● b-wind
●23ポイント

http://jp.php.net/manual/ja/function.flock.php

CGI 等でもファイルの書き込み制御等は話題になりますが、

結局のところ flock が唯一最善の解になります。

このため方法としては提示のとうりでよいと思いますが

、1点だけ。

flock($fno,LOCK_EX);

flock 関数は flock の成否が返り値となっていますので、

必ずチェックするようにしましょう。

でないとロックを取得できていないのに書き込む可能性があります。

◎質問者からの返答

ありがとうございます。


3 ● yoshi_12
●22ポイント

fcloseの前にLOCK_UNでロックを外した場合は、バッファの関係で不完全なファイル内容を読み込まれる場合があり、危険です。


詳細は下記URL

http://testwiki.xn--xnq.jp/?PHP%2F%A5%D5%A5%A1%A5%A4%A5%EB%A...


上記の点について、私の場合の解決策は

必ずfflushし、LOCK_UNでロックを外す事はせず、fcloseでロックを外すようにしてます。

◎質問者からの返答

これなんですが、

//ファイルアンロック

flock($fno,LOCK_UN);

//ファイルクローズ

fclose($fno);

の部分を

//ファイルアンロック

fflush($fno);

//ファイルクローズ

fclose($fno);

に変更するのでいいのでしょうか?


4 ● b-wind
●22ポイント

なんか余談を膨らませてしまって恐縮ですが、件数が多いならなおのこと SQLite の方がいいですよ。

http://journal.mycom.co.jp/special/2004/php5/006.html

数万件程度のオーダーであれば、MySQL より高速です。

◎質問者からの返答

でもですね、ちょっとDB系は使用出来ないんですよ。

結構な制限があるので。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ