notebook510

備忘録とか覚え書き的なところを想定しています

PHP入門 第6回 ファイルの読み書き

改めてPHPを勉強しなおしているんだけど、
なんで動画の授業って眠くなるんだろう。

 

今回はファイルの読み書きに関する内容でした。
出てきた関数を振り返ってみたいと思います。

 

ファイルへの書き込み:新規作成

サンプルコード

<?php
$fp = fopen("test1.txt", "w");

fwrite($fp , "testです。");

fclose($fp);

 

  • fopen・・・ファイルを開く、モードがwならファイルを作成
  • fwrite・・・ファイルへの書き込み
  • fclose・・・ファイルのクローズ

 

ファイルへの書き込み:追記

サンプルコード

<?php
$fp = fopen("test1.txt", "a");

fwrite($fp , "\ntestです。");

fclose($fp);

fopenのモードが a の場合、
ファイルの最後に追記します。

 

ファイルからの読み込み:file_get_contents

サンプルコード

<?php
$str = file_get_contents("test1.txt");

echo $str;

 file_get_contents は、指定されたファイルの内容を
すべて文字列として返します。

 

ファイルからの読み込み:fgets

サンプルコード

<?php
$fp = fopen("test1.txt", "r" );

$str = fgets($fp);
echo $str;
fclose($fp);

fopenのモードが r で 読み込み可能になります。

fgets ファイルポインタの先頭行から1行分取得して
文字列として返します。

 

1行ずつではなく、全行読み込む場合のサンプルコード

<?php
$fp = fopen("test1.txt", "r" );

while( !feof($fp) ){
$str = fgets($fp);
echo $str;
echo "<br>";

}
fclose($fp);

ファイルの行数は、あらかじめわからないケースが多いので、
while分を使って繰り返し処理をするのがベターですね。

 

CSVファイルの読み込み

サンプルコード

<?php
$fp = fopen("csv1.csv", "r" );

$data = fgetcsv($fp , "," );
print_r($data);
fclose($fp);

fgetcsv は、ファイルの先頭行のデータを
カンマで区切った配列を作成して返します。


上記中のprint_r関数で、どのように配列として
格納しているのかを実行結果で確認できます。

 

格納した配列の2番目の要素をechoで出力するサンプルです。

<?php
$fp = fopen("csv1.csv", "r" );
$data = fgetcsv($fp , "," );
echo $data[1]; 

 

CSVファイル、全行の読み込み

サンプルコード

<?php
$fp = fopen("csv1.csv", "r" );
while*1!== false){
foreach($data as $key){
echo $key.',';
}
echo "<br>";
}
fclose($fp);

fgetcsv関数は、ファイルの終端に行くとfalseを返します。

 

CSVファイルの読み込み:全行を二次元配列に格納

サンプルコード

<?php
$csv_data = array();
$fp = fopen("csv1.csv", "r" );
while*2!== false ){
$csv_data[] = $data;
}
fclose($fp);
echo $csv_data[0][1];

 ちょっと難しいけど、どうにか理解したい

 

CSVファイルの書き込み

サンプルコード1

<?php
$fp = fopen("csv2.csv", "a");
fwrite($fp , "5,男性,eee@abc.com\n");
fclose($fp);

サンプルコード2

<?php
$fp = fopen("csv2.csv", "a");
$data = array(5,"男性", "eee@abc.com");
fputcsv($fp , $data);

コード2は、書き込みたいデータを配列に格納して、
fgetcsv関数で書き込みます。

 

fopen関数のモードが a なので、ファイルポインタは終端に置かれ、
変数$dataの値が追記されます。

 

 

つらつら書いてみたけど、理解するのに時間がほしいね。これ。

 

 

*1:$data = fgetcsv($fp , ","

*2:$data = fgetcsv($fp , ","