ここから本文です

現在phpでID登録機能を作成しているのですが、登録する際にCSVの書き込む位置を指...

m_d********さん

2016/12/2010:32:49

現在phpでID登録機能を作成しているのですが、登録する際にCSVの書き込む位置を指定して書き込むことは可能でしょうか?

CSV,fseek,テキストファイル,ftruncate,ID登録機能,SQLite,fputcsv

閲覧数:
51
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shi********さん

2016/12/2014:48:35

一般的にテキストファイルは「位置を指定して」アクセスする用途には向いていません。というか使えません。fseekでファイルポインタを移動させることが出来ないからです(何バイトめに移動させればいいかは読まないとわからない)。まして今まで1バイトだった部分を3バイトのデータで置換することは不可能です。改行なしの固定長レコード形式ならばどうにか出来るでしょうけど、それならばテキストファイルにする必然性がなくなります(というか、それはテキストファイルと呼びませんね)。

CSVファイルならば「いったん全体を読込んで二次元配列で処理し再度全体を書き戻す」のが一番楽だと思います。当然ファイルロック必須です。

(例)
$csv = array();
$fp = fopen($filename, 'r+');
flock($fp, LOCK_EX);
while (($data = fgetcsv($fp)) !== false) { $csv[] = $data; }

// 二次元配列 $csv に対する処理を行う
$csv[1][1] = 'aaaa';

fseek($fp, 0);
ftruncate($fp, 0);
foreach ($csv as $arr) { fputcsv($fp, $arr); }
flock($fp, LOCK_UN);
fclose($fp);



他のアプリとの兼ね合いがなければSQLiteでも使った方がシアワセにになれると思います。何らかの用途でCSV形式のデータも要るのであれば、必要に応じてSQLiteのテーブルから書き出せばいいでしょう。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる