【第九回】PHPでシステム開発を実践!基本的な構文⑥:ファイルの読み書き

はじめに

ここまでで繰り返し構文や配列、if文など基本的なことに触れていきました。
どれもとてもよく使う大切なプログラムとなります。
今回取り上げるテーマも大事なことですので、ご覧くださいましたら幸いです。

さて今回はPHPでファイルの読み込みや書き込みについてどのように行うか取り上げたいと思います。
PHPではテキストファイルやJSONファイルと言われるファイルに書き込みを行ったり、書き込んだものを読み込むことができます。
これだけでは何のことか分からないかと思いますので、1つ1つ丁寧に説明できればと思います。

文字列のフォーマット

その前に文字列のフォーマット(書式)を整える方法から始めたいと思います。
例えば日付を表示させたい場合、2022年4月1日や2022.04.01など色々な書式があります。
この書式を指定する際に使うのが、sprintf関数(エスプリントエフ)です。

まずは以下のプログラムを入力してみましょう。
——————
<?php
$date = sprintf(‘%04d.%02d.%02d’, 2022,4,1);
echo $date;
?>
——————
VSCフォーマット設定
上書き保存し、ブラウザで表示を確認してみます。
ブラウザ確認フォーマット設定
2022.04.01と表示されていましたら正しく動いていることになります。

先ほど入力したsprintf関数がどのような処理を行ったかといいますと、最初に「%04d.%02d.%02d」と入力しました。
こちらそれぞれ「%04d」、「%02d」、「%02d」と区別してみます。
それぞれ指定子といいまして、「%04d」は後に入力されています2022の書式、一番目の「%02d」は後に入力されています4の書式、二番目の「%02d」は後に入力されています1の書式という意味になります。

それぞれの指定子がどのような意味になるかですが、まずどの指定子も「%d」の間に数字が入っています。
この「%d」は整数(デシマル)という意味でして、数字を出力するための指定子です。
その間に数値を入れていますが、こちらは桁数を意味しており最初の「%04d」は4桁以上で表示するようにということになり、もし渡される数字が4桁未満の場合は最初に0を入れて最低でも4桁にするようにして下さいという意味になります。

この形で他も考えてみますと「%02d」は、2桁以上でもし2桁未満の数字だった場合は最初に0を入れて表示して下さいという意味になります。

上記の例ですと2022は4桁なのでそのまま表示され、4は1桁なので最初に0が付きました。
最後の1も1桁なので同様の理由で最初に0が付き2桁にしています。

指定子は他にも種類がありますので、調べていただくと指定したい書式に合ったものが見つかるかもしれません。
参考にもURLを貼り付けましたので、もしよろしければそちらもご覧下さい。

参考:sprintf
参考:フォーマットを作る!PHPのsprintf関数の使い方【初心者向け】

ファイルへの書き込み

さて今回の記事のメインテーマとなりますファイルの書き込みや読み込みについて触れていきます。
まずはファイルの書き込みからです。
ファイルの書き込みではfile_put_contents()という関数を使います。
基本的な形式は
——————
file_put_contents(‘ファイル名’,’書き込む内容’);
——————
となります。

試しに以下のプログラムを入力してみます。
——————
<?php
file_put_contents(‘test.txt’,’こちらはテストファイルです。’);
?>
——————
VSCファイルへの書き込み
上書き保存をし、ブラウザを確認しますとブラウザ上は真っ白ですが、VScodeを確認してみますとプログラムを実行したPHPのファイルと同じ階層に先ほど指定した「test.txt」のファイルが保存されているのが確認できます。
VSCファイル確認
こちらクリックしますと先ほど指定した内容が入力されています。
ファイルの内容

こちらで書き込みが出来ているということになりますが、現状ですとブラウザ上では、ファイルの書き込みが成功しますと真っ白の状態で失敗しますとエラーが表示され、ファイルの書き込みで特に失敗した場合にエラー文だけに頼るというのは危険です。
そこで返り値(戻り値)というものを使います。

返り値とは、簡単に言いますとプログラムの処理によって出てきた値のことです。
今回の例では、ファイルへの書き込みに成功した場合はファイルに書き込まれたバイト数を返し、失敗した場合はfalseを返します。
このあたりは意味を理解するのが少し難しいかと思いますので、もし分からないことがありましたらご自分で調べていただくか参考にサイトURLを貼り付けますのでそちらもぜひご覧ください。

それでは上記の例を返り値を使って組み直してみます。
まずは変数を用意し、その中に返り値が入るように定義します。
次にif文を使い、ファイルの書き込みが成功した場合と失敗した場合とで処理を場合分けします。
——————
<?php
$success = file_put_contents(‘test.txt’,’こちらはテストファイルです。’);
if($success !== false){
echo ‘ファイルの書き込みに成功しました。’;
}else{
echo ‘ファイルの書き込みに失敗しました。’;
}
?>
——————
VSC返り値
上書き保存をし、ブラウザを確認してみます。
もしファイルの書き込みに成功した場合は、先ほどと同じ場所にtest.txtが作られ、ブラウザ上には「ファイルの書き込みに成功しました。」と表示されます。
ブラウザ表示確認返り値
失敗した場合は、ブラウザ上には「ファイルの書き込みに失敗しました。」と表示されます。
ブラウザ表示確認返り値失敗
コメントと一緒にエラーメッセージも表示されていますが、こちらは最初にエラーが表示されるようMAMPの設定をしているためです。
エラー文を表示させないように設定しましても「ファイルの書き込みに失敗しました。」というコメントは表示されます。

このようにファイルの書き込みなどは、書き込みが成功したのか失敗したのか分かるようにした方が良いです。

参考:file_put_contents
参考:戻り値 【return value】 返り値 / リターン値
参考:引数・戻り値はこうやって理解する

ファイルを読み込む

先ほどtest.txtというファイルを作りましたので、今度はこちらのファイルを読み込んでみましょう。
書き込みを行った時と同様、返り値でプログラムを組んでみます。
読み込む時に使う関数はfile_get_contents()です。
基本的な形式は
——————
file_get_contents(‘読み込みたいファイル’);
——————
となります。
今回の例で当てはめてみますと以下のようになります。実際に入力してみます。
——————
<?php
$read = file_get_contents(‘test.txt’);
echo $read;
?>
——————
VSCファイル読み込み
上書き保存をし、ブラウザで表示を確認してみます。
ブラウザ表示確認読み込み
すると保存されているtest.txtの内容が表示されます。
こちらtest.txtの内容を書き換えますとブラウザで表示される内容も書き換えた内容に変わります。

ファイルを読み込む関数は他にもあり、readfile()というものです。
基本的な形式は先ほどのfile_get_contents()と同様、
——————
readfile(‘読み込みたいファイル’);
——————
となります。
今回の例で当てはめてみますと以下のようになりますので入力してみます。
——————
<?php
readfile(‘test.txt’);
?>
——————
VSCファイル読み込みreadfile
上書き保存をし、ブラウザの表示を確認してみますと同じようにtest.txtの内容が表示されます。

こちら違いは、file_get_contents()ですと一度変数に代入してから表示させていますが、readfile()ではこの関数自体にブラウザに表示させる処理があるためechoなどを使わず表示させています。

もし内容をただ単に表示するだけでしたらreadfile()を使っていただいた方が早いかと思いますが、簡単に表示させることが目的ではなく内容を読み込んで、その読み込んだデータを使って他の処理をしたい場合はfile_get_contents()を使用する方が良いかと思います。
状況に応じて使い分けをお願いします。

参考:file_get_contents
参考:readfile

ファイルに追記する

ここまで出てきましたfile_put_contents()とfile_get_contents()を使ってファイルへ追記し、追記したファイルを読み込んでみます。
試しに以下のように入力してみます。
——————
<?php
$read = file_get_contents(‘test.txt’);
echo $read;
$read = $read . ”
追記した文章です。”;
$success = file_put_contents(‘test.txt’, $read);
if($success !== false){
echo ‘ファイルの書き込みに成功しました。’;
}else{
echo ‘ファイルの書き込みに失敗しました。’;
}
?>
——————
VSC追記
上書き保存しましょう。

ブラウザで表示を確認してみますと最初にtest.txtの内容を読み込みますので、test.txtに元々入力していた「こちらはテストファイルです。」という一文とファイルの書き込みに成功した際に表示される『ファイルの書き込みに成功しました。』の一文が表示されます。
ブラウザ表示確認追記
この時点でtest.txtを実際に開いて内容を確認してみますとファイルの書き込みに成功しているので「こちらはテストファイルです。
追記した文章です。」となっています。
test.txtの内容
今回の例では一度内容を読み込んだ後に追記していますので、表示されている内容とtest.txtの違いに混乱されるかもしれませんが、プログラムの流れを1つ1つ確認しますと正しく動いていることが分かるかと思います。

こちらブラウザを更新する度に処理が行われ追記されるため、どんどん「追記した文章です。」が追加されます。

まとめ

今回は文字の書式の指定やテキストファイルの書き込みと読み込みを行いました。

特にテキストファイルの書き込みや読み込みは応用を利かすことができまして、例えば新着情報などの記事内容をテキストファイルで読み込み、修正があった場合はテキストファイルを修正しますと変更が反映されるといったことができます。
プログラムを直接変更する必要がありませんので手間が省けます。

今回はテキストファイルだけを取り上げましたが書き込むことができるファイルは他にもあり、次回は他のファイルへの書き込みと読み込みについて取り上げたいと思います。

この記事をシェアしましょう!