見出し画像

【 PHP学習 #23 】 ファイル操作 「ファイル名型」 FIREへの旅路 ♯477

今回は、ファイル操作を学びます。

前回の記事での、mainteフォルダ内にファイルを作っていきます。


【 PHPでファイルを保存する方法 】

 ファイル(テキストファイル)
データベース(MySQL , MariaDB

ファイルの保存は、コンタクトフォームの入力内容などを保存する時などに使います。


① ファイルに保存する


▶︎ ファイル操作の方法

ファイル名型(ファイル丸ごと)
  file_get_contents, file_put_contents
・ストリーム型(1行ごと)
    fopen,  fclose,  fgets,  fwrite
・オブジェクト型(オブジェクトとして)
    SpiFileObject

このようにファイル操作の方法があります。

今回は、① ファイル(テキストファイル)を学びます。

今回も、前回作ったmainteフォルダの、test.phpというファイルで処理をします。



■ ファイル名型

mainteフォルダに、 .contact.dat というファイルを作ります。

こちらに「.contact.datファイルです。」と書きます。
このファイルをtest.phpから操作してみます。


▶︎ ファイルを読み込む方法

.contact.dat ファイル

.contact.datファイルです。


test.php ファイル

<?php

$contactFile = '.contact.dat';

//ファイル丸ごと読み込み
$fileContents = file_get_contents($contactFile);

echo $fileContents;


< 解説 >

$contactFile 変数 に、 '.contact.dat'ファイルを代入します。
ファイルごと'.contact.dat'ファイルを読込ます。
$fileContents 変数 に、file_get_contents関数で、
$contactFile変数'.contact.dat'ファイル を代入します。
$fileContents 変数 を echo します。


◆  file_get_contents

ファイルの内容を全て文字列に読み込む

file_get_contents( ' ファイル名 ' ) という形で書きます。


< 結果 >

このように、test.phpで、 .contact.datのテキストの内容を表示できます。



【 ファイルに書き込む方法(上書き) 】

<?php

$contactFile = '.contact.dat';

//ファイル丸ごと読み込み
$fileContents = file_get_contents($contactFile);

//ファイルに書き込む(上書き)
file_put_contents($contactFile, '上書きです');


echo $fileContents;

< 解説① >

file_put_contents関数に、対象となるファイル名、上書きする内容を引数で渡します。


◆  file_put_contents

データをファイルに書き込む 上書き

file_put_contents( 対象のファイル , ' 上書きする内容' ) と書くことで、対処のファイルが上書きされます。


< 結果 >



【 ファイルに書き込む方法(追記) 】

<?php

$contactFile = '.contact.dat';

//ファイル丸ごと読み込み
$fileContents = file_get_contents($contactFile);


//ファイルに書き込む(上書き) ・・・解説①
file_put_contents($contactFile, '上書きです');


//ファイルに書き込む(追記) ・・・解説②
file_put_contents($contactFile, '追記です' , FILE_APPEND);


echo $fileContents;

< 解説 ② >

上書きの場合と同様に、file_put_contents関数を使いますが、
引数を1つ足します。3つ目の引数に、
FILE_APPEND  と書くと、データをファイルに上書きするするのではなく追記します。


< 結果 >

このように、'追記です'という文字列が、追加されました。




【 追記項目を改行する 】

コンタクトフォームの入力内容を保存していく場合には、
改行されてファイルに項目が追加されていく方が見やすいのです。

その際に、" \n " という改行を意味するコードを追加して、ファイル内に、項目を縦に並べいく方法を紹介します。

これは、ブラウザでのechoの結果の改行<br>とは違います。

▶︎  " \n "

バックスラッシュnです。
バックスラッシュは、option + ¥マークで入力できます(Mac)


contact.dat

contact.datファイルです

contact.datファイルの中身をこのようにします。


test.php

<?php

$contactFile = '.contact.dat';

$addText =  '追記です' . "\n";

//ファイルに書き込む(追記)
file_put_contents($contactFile, $addText, FILE_APPEND);

$addText 変数に、 '追記です'  と、"\n" を、「  .  」でつないでいます。
そして、この変数を、file_put_contents第二引数に入れます。

この状態で、test.phpを更新します。(ブラウザで再読み込み

すると、

contact.datファイルに、'追記です' と、縦に追加されます。

contact.datファイルです
追記です
追記です



【 CSV形式ファイルを管理する 】

CSVファイルを項目ごとに、管理しやすく編集する方法です。


▶︎ CSV形式とは

各項目が、コンマで区切られたファイルの形式です。

タイトル1,本文1,日付1,カテゴリ1
タイトル2,本文2,日付2,カテゴリ2
タイトル3,本文3,日付3,カテゴリ3


▶︎ 方法

配列にして、区切る、foreachで処理を回す

▶︎ コード

<?php

$contactFile = '.contact.dat';


//配列 file ,区切る explode, foreach

// 解説 ①
$allData = file($contactFile);


// 解説 ②
foreach($allData as $lineData){
    $lines = explode(',' , $lineData);
    echo $lines[0]. '<br>';
    echo $lines[1]. '<br>';
    echo $lines[2]. '<br>';
}


<解説 ①>

$allData = file($contactFile);

$allDataという変数を作ります。
file関数を使って、$contactFileを引数にすると、
$contactFileファイル全体を配列として読み込みます。

この時点での、配列はこのような配列です。

$contactFilefile関数で配列化した状態

キー[0] の値は、"タイトル1, 本文1, 日付1, カテゴリ1 "
キー[1] の値は、"タイトル2, 本文2, 日付2, カテゴリ2 "
キー[2] の値は、"タイトル3, 本文3, 日付3, カテゴリ3 "

です。



<解説 ②>

foreach($allData as $lineData){
    $lines = explode(',' , $lineData);
    echo $lines[0]. '<br>';
    echo $lines[1]. '<br>';
    echo $lines[2]. '<br>';
}

foreach文で、配列になった、$contactFileである、$allDataを展開します。
$lineData
には$allDataの配列が一行ずつ入っていきます。

$allDataの配列
キー[0] の値は、"タイトル1, 本文1, 日付1, カテゴリ1 "
キー[1] の値は、"タイトル2, 本文2, 日付2, カテゴリ2 "
キー[2] の値は、"タイトル3 ,本文3, 日付3, カテゴリ3 "

$lineDataには、"タイトル1 , 本文1, 日付1, カテゴリ1 " この配列が入り、
コンマで区切られて、
キー[0] の値は、タイトル1
キー[1] の値は、本文1
キー[2] の値は、日付1

と入って、

foreachで処理が回り、次は、

$lineDataには、"タイトル2、本文2, 日付2, カテゴリ2 " この配列が入り、
コンマで区切られて、
キー[0] の値は、タイトル1, タイトル2
キー[1] の値は、本文1, 本文2
キー[2] の値は、日付1, 日付2

と、入っていきます。 



$lines 変数は、 explode関数で、文字列を分割した配列が入ります。
今回の場合は、$lineDataの配列が、コンマで区切られた配列が入ります。


explode
関数の、戻り値は、配列形式なので、この時点での$lines配列はこうなっています。

explode関数で処理され$linesに格納された配列




◆  explode関数

文字列を文字列により分割する
explode( ' 区切り文字列 '  ,  '文字列データ'  )

第一引数では、どの文字で分割するのかを指定
第二引数では、対象となる文字列を指定



< 結果 >

このコンマで区切られたCSV形式のファイルが、

タイトル1,本文,日付,カテゴリ
タイトル2,本文,日付,カテゴリ
タイトル3,本文,日付,カテゴリ

このようにechoされます。


$linesの中身はこの配列なので、

explode関数で処理され$linesに格納された配列


$lines[0] は、タイトル1 タイトル2 タイトル3 
$lines
[1] は、本文1 本文2 本文3
$lines
[2] は、日付1 日付2 日付3


となるので、

キー[0]の値=タイトル を echo して、<br> で改行
キー[1]の値=本文 を echo して、<br> で改行
キー[2]の値=日付 を echo して、<br> で改行

しているということです。


【 まとめ 】

PHPでのファイルの管理、追加等について、学びました。
次回はストリーム型を学びます!!


この記事が気に入ったらサポートをしてみませんか?