PHP 備忘録 | メシのタネ

このエントリーをはてなブックマークに追加

php ファイルの読み書きは3行

 2013/04/16

ファイルの読み書きについて検索してると良く見かけるのが、

ファイルを開いて、行があるだけ読み込んで、閉じてって流れを良く見かけます。
書くときも、ファイルを開いて、ロックして、書き込んで、ファイルを閉じてって流れを見かけます。
今まで僕もそう書いてたんですけど、毎回読み出しがややこしくて調べます。

実は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)

}

ってやれば可能だそうですよ!


このエントリーをはてなブックマークに追加

コメント

"php ファイルの読み書きは3行 "
でメシのタネのおすすめを検索したよ!

プログラミング備忘録 | メシのタネ