ファイルの読み書きについて検索してると良く見かけるのが、
ファイルを開いて、行があるだけ読み込んで、閉じてって流れを良く見かけます。
書くときも、ファイルを開いて、ロックして、書き込んで、ファイルを閉じてって流れを見かけます。
今まで僕もそう書いてたんですけど、毎回読み出しがややこしくて調べます。
実は3行で書ける
今日も、あーファイルだーめんどくせーと思って、いつもの流れを調べてたんですけど、
こないだそういや参考書買ったじゃないかと思って、パーフェクトPHPを開いてみると、
えらく簡単にできるじゃないですか。
今までのコード
$fp = fopen(path,"r");
$row = 1;
if (($read = $fp) !== FALSE) {
while (($data = fgetcsv($read, 1000, ",")) !== FALSE) {
$row++;
for ($i=0; $i < count($data); $i++) {
echo $data[$i];
}
}
fclose($read);
}
$fp = fopen(path,"ab");
flock($fp,LOCK_EX);
fwrite($fp,"なんか文字");
flock($fp,LOCK_UN);
fclose($fp);
この非常に面倒くさいコードが
define(path,"nantyara.csv"); echo file_get_contents(path); file_put_contents(path, "おとくな三行", FILE_APPEND | LOCK_EX);
こんだけで書けます。
ファイル読み込み時に配列で取得する
このまま取ると、そのままファイルの内容が吐き出されるので、
配列にすると便利です。
define(path,"nantyara.csv");
//改行を区切り文字として一行ごとに配列化する
$line = explode("n",file_get_contents(path));
//カンマ区切りを配列にする
$line = explode(",",file_get_contents(path));
便利だなーって思いました。
でもカンマ区切りの配列だと扱いにくいので1行ごとに連想配列で取得したかったんですけど、
できなかったので、nを区切り文字として、配列に置き換えました。なんか良い方法ないかなー。
$line = explode("n",file_get_contents(path));
foreach($line as $val)
{
explode(",",$val)
}
ってやれば可能だそうですよ!


コメントを残す