php file_put_contentsでファイルに書き込みを行う

php file_put_contentsでファイルに書き込みを行う

phpで、file_put_contentsを使用して、ファイルに書き込みを行うサンプルコードを記述してます。phpのバージョンは8.0です。

環境

  • OS  CentOS Stream release 8
  • php 8.0.0
  • nginx 1.14.1

file_put_contents使い方

file_put_contentsを使用すれば、ファイルに書き込みを行うことが可能です。
この関数は、fopen(),fwrite(),fclose()と同じ動作をします。

file_put_contents("ファイル名", "書き込むデータ" [, フラグ] [,  独自コンテキスト] )

// 書き込んだバイト数が返ります。 
// 書き込みに失敗時は falseが返ります。 

フラグ一覧
・FILE_USE_INCLUDE_PATH : インクルードパス使用
・FILE_APPEND : 追加モードで書き込み
・LOCK_EX : ファイルをロックする

以下は、「hoge.txt」に「hogehoge」と書き込みを行って、表示するサンプルコードとなります。

<?php

$filename = 'hoge.txt';
 
// ファイルに書き込む
file_put_contents($filename, 'hogehoge');
 
// ファイル内容を確認する
readfile($filename);
// hogehoge

上記で書き込みを行ったファイルに追記モードで書き込むと、既存の内容に追記されます。

<?php

$filename = 'hoge.txt';
 
// ファイルにt追記モードで書き込む ロックモードを併用
file_put_contents($filename, 'hogehoge', FILE_APPEND | LOCK_EX);
 
// ファイル内容を確認する
readfile($filename);
// hogehogehogehoge

また、ファイルが存在しない場合は、作成されます。

<?php

$filename = 'hoge2.txt';
 
// ファイルに書き込む
file_put_contents($filename, 'hogehoge');
 
// ファイル内容を確認する
readfile($filename);
// hogehoge

fwrite

fwriteを使用しても、ファイルへの書き込みは可能です。

<?php

$filename = 'hoge.txt';
 
// fopenでファイルを開く('w'は上書きモード)
$fp = fopen($filename, 'w');
 
// fwriteで書き込む
fwrite($fp, 'hogehoge');
 
// ファイルを閉じる
fclose($fp);
 
// ファイルの内容を確認
readfile($filename);
// hogehoge

fopenのmode一覧

modeポインタ
の位置
処理
r先頭読み込みのみ
r+先頭読み込み書き出し
w先頭書き出しのみ
ファイルがなければ作成して、新規書き込み
w+先頭読み込み・書き出し
ファイルがなければ作成して、新規書き込み
a終端書き出しのみ
ファイルがなければ作成して、追加書き込み
a+終端読み込み・書き出し
ファイルがなければ作成して、追加書き込み
x先頭書き込みのみ
ファイル存在時はエラー
x+先頭読み込み・書き出し
ファイル存在時はエラー
c先頭書き込みのみ
ファイルがなければ作成して、ファイルは排他的ロック
c+先頭読み込み・書き出し
ファイルがなければ作成して、ファイルは排他的ロック

パフォーマンスは、file_put_contentsの方が少しだけ良さそうです。

【参考】 file_put_contentsとfwrite(wモード)で、それぞれ同じ内容の書き込み処理を10万回実行した結果

測定結果 : file_put_contents
process time: 127.43767 ミリ秒

測定結果 : fwrite
process time: 129.09895 ミリ秒