PHPでファイルの書き込みを行う方法|file_puts_contents関数を理解する!【初心者向け】
プログラミング初心者向けにPHPでfile_puts_contens()を使ってファイルの書き込むを行う方法について解説しています。データベースだけでなく、テキストファイルにもデータを書き込むことができるので、ぜひ覚えておきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
文字をファイルに保存するにはテキストエディタを使いますが、この記事ではPHPのプログラムからファイルへ書き込む方法を扱います。
この記事では関数1つでファイルへの書き込みができるfile_put_contents関数と、ファイルの書き込み処理を3つに分けたfopen・fwrite・fclose関数について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
PHPのデータはデータベースだけでなく、テキストファイルに書き込むこともできるので、ぜひ書き方を覚えておきましょう。
目次
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
file_puts_contents関数とは
本来、ファイルの書き込み操作をプログラムから行うには、ファイルを開く・書き込む・閉じるという一連の操作が必要です。
このファイルへの書き込みの3つの処理を一度にしてくれるのがfile_puts_contents関数です。
ファイル名の文字列と書き込みたい内容をfile_puts_contents関数に渡すだけで、必要な処理を行ってくれます。
file_puts_contents関数を使うと、存在しないファイル名を指定した場合は新規作成され、すでに存在するファイル名を指定した場合は上書き保存されます。
また同時に書き込むことがないよう、処理中にファイルをロックすることも可能です。
ファイル書き込みの書き方
自動でファイルの書き込み【file_put_contents関数】
通常のファイル操作で必要なファイルを開く・書き込み・閉じる処理をすべて自動で行ってくれます。
書き込んだバイト数 = file_put_contents(ファイル名, 書き込む内容);
書き込みたいファイル名と、ファイルに書き込む内容をfile_puts_contents関数に渡します。
戻り値は、書き込みが失敗した場合はfalse、成功した場合は書き込まれたバイト数を返します。
※バイト(byte)とは256通りの情報を扱える単位で、ファイルへの書き込みの最小単位です。半角英数は1バイトで表現できますが、漢字やひらがなの全角文字は2から3バイトで表現されます。
※3つめのパラメータにFILE_APPENDフラグを指定してファイルの末尾から追記したり、LOCK_EXフラグで他のプログラムなどから同じファイルを開かれて同時に書き込まれないようにできます。
手動でファイルの書き込み【fopen・fwrite・fclose関数】
ファイルを開く・書き込む・閉じる処理を分けて行うには、それぞれfopen・fwrite・fclose関数を使います。
1.ファイルを開く
ファイルポインタ = fopen(ファイル名, モード);
fopen関数で指定したファイル名を開きます。
モードは、開いたファイルをアクセスする形式を指定します。
主なモードには以下の種類があります。
モード | 説明 |
---|---|
“r” | 読み込み専用で開きます。書き込みはできません。 |
“w” | 書き込み専用で開きます。既存ファイルの中身は消去されます。 |
“r+” | 読み書き両用で開きます。ファイルの先頭から処理されます。 |
“a” | 追記用で開きます。ファイルの最後から書き込まれます。 |
戻り値のファイルポインタとは、ファイルを処理するときの管理用のもので開いたファイルを特定し、次に読み書きされるファイル内の位置を記憶しています。
※ファイルポインタの位置を設定するには、ファイルを開いたときのモードで指定する(たとえば”w”なら最初、”a”なら最後など)か、任意の位置に移動させるfseek関数などを使って行います。
※ファイルを読み書きするとファイルポインタの位置が移動します。
2.ファイルへ書き込む
書き込んだバイト数 = fwrite(ファイルポインタ, 書き込む内容);
すでに開かれているファイルと処理する位置をファイルポインタで指定し、書き込む内容を関数に渡します。
戻り値は書き込みが成功した場合は書き込まれたバイト数、失敗した場合はfalseを返します。
3.ファイルを閉じる
fclose(ファイルポインタ);
ファイルの処理が終了したら、fclose関数に処理が終わったファイルポインタを渡してファイルを閉じます。
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
実際に書いてみよう
file_put_contents
<?php define("TESTFILE","./TEST.txt"); $s = "上書き"; print_r("file_put_tcontents関数n"); file_put_contents(TESTFILE,$s); var_dump(file_get_contents(TESTFILE)); ?>
実行結果
$ php 01.php file_put_tcontents関数 string(9) "上書き"
fwrite
<?php define("TESTFILE","./TEST.txt"); $fh = fopen(TESTFILE, "w"); echo "fwrite関数n"; fwrite($fh,"書き込み"); fclose($fh); var_dump(file_get_contents(TESTFILE)); ?>
実行結果
$ php fwrite.php fwrite関数 string(12) "書き込み"
おわりに
ファイルの書き込みを実行できるようになると、プログラムを終了してもデータを保持できます。
基本的ですが、とても重宝する機能なのでしっかりとマスターしましょう。
file_put_contents関数は、1行でファイルに書き込めていますね。
fwriteだと、ファイルを開くモードを指定してファイルを開き、ファイルハンドルを取得してから書き込まなければならないんだよ。
ちょっと面倒ですね。
そうだね。ファイルに書き込むのは簡単だけど、PHPの場合、Webで複数人で使用する場合が多いよね。そうなるとファイルロックが必要になるんだよ。そこで違ってきたりするんだよね。
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!