![見出し画像](https://assets.st-note.com/production/uploads/images/83339647/rectangle_large_type_2_e9445686f7495e12989bfe25e23e8fee.jpeg?width=800)
【 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( ' ファイル名 ' ) という形で書きます。
< 結果 >
![](https://assets.st-note.com/img/1657602178153-D2BtAwhXm1.png)
このように、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( 対象のファイル , ' 上書きする内容' ) と書くことで、対処のファイルが上書きされます。
< 結果 >
![](https://assets.st-note.com/img/1657602752986-1ZG7Kmh23S.png)
【 ファイルに書き込む方法(追記) 】
<?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 と書くと、データをファイルに上書きするするのではなく追記します。
< 結果 >
![](https://assets.st-note.com/img/1657603532215-N2xqIszMJn.png)
このように、'追記です'という文字列が、追加されました。
【 追記項目を改行する 】
コンタクトフォームの入力内容を保存していく場合には、
改行されてファイルに項目が追加されていく方が見やすいのです。
その際に、" \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ファイル全体を配列として読み込みます。
この時点での、配列はこのような配列です。
![](https://assets.st-note.com/img/1657615771655-OYq6l0ZgRX.png?width=800)
キー[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配列はこうなっています。
![](https://assets.st-note.com/img/1657615849355-EHvKNXYkvc.png?width=800)
◆ explode関数
文字列を文字列により分割する
explode( ' 区切り文字列 ' , '文字列データ' )
第一引数では、どの文字で分割するのかを指定
第二引数では、対象となる文字列を指定
< 結果 >
このコンマで区切られたCSV形式のファイルが、
タイトル1,本文,日付,カテゴリ
タイトル2,本文,日付,カテゴリ
タイトル3,本文,日付,カテゴリ
このようにechoされます。
![](https://assets.st-note.com/img/1657615424325-rOXW52N5ST.png)
$linesの中身はこの配列なので、
![](https://assets.st-note.com/img/1657615849355-EHvKNXYkvc.png?width=800)
$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でのファイルの管理、追加等について、学びました。
次回はストリーム型を学びます!!
この記事が気に入ったらサポートをしてみませんか?