めも。
通常ファイルに値を書き込みたい際は、fopen()でファイルポインタを開き、fwrite()、fclose()、という操作をするが、file_put_contents()はこれを一度にやってくれる。
$filePath = '/path/to/targetFile.ext';
$data = 'testMessage';
// 一気にファイル操作を行ってくれる
file_put_contents($filePath, $data);
上記に示した操作と、下記に示す操作は全く等価の動作を行う。
$filePath = '/path/to/targetFile.ext';
$data = 'testMessage';
// file_put_contents()の内部動作
$fp = fopen($filePath, 'w');
fwrite($fp, $data);
fclose($fp);
またfile_put_contents()は第1引数に指定したファイルが存在しない場合、作成を試み、存在する場合は上書きを行う。これはfopen()関数の「w」モードと同様である。
追記モードでファイル操作を行いたい場合は、第3引数に「FILE_APPEND」を指定することで、fopen()の「a」モードと同様の動作を行う。
第3引数に渡せる定数は以下に示すものが存在し、複数のモードを指定したい場合は「|」(OR演算子)で連結し指定すればよい。
定数 |
詳細 |
FILE_APPEND |
ファイルが存在している場合、上書きではなく追記を行う。 |
LOCK_EX |
書き込み処理中にファイルを排他ロックする。 |
FILE_USE_INCLUDE_PATH |
ファイルをインクルードディレクトリから探す。 |
$filePath = '/path/to/targetFile.ext';
$data = 'testMessage';
// 書き込み中にファイルを排他ロックし、追記モードで動作させる。
file_put_contents($filePath, $data, FILE_APPEND | LOCK_EX);
fopen()を用いてファイル操作を行う際、重複書き込みを防ぐためflock()関数を使用し、ロック→書き込み→ロック開放という手順を踏む必要があったが、file_put_contents()の場合第3引数に「LOCK_EX」を指定するだけで、この操作さえ一気にやってくれてしまう。
それでも「LOCK_SH」や「LOCK_NB」モードを指定したい場合のみ、flock()関数を用いるアプローチを選択する必要があるが、ほとんどの場合file_put_contents()で事足りてしまうと考えられる。