ファイルに書き込む(fwrite)
ファイルからデータを書き込みます。fwrite関数を使います。この関数ではバイナリモードで書き込みが行われます。
fwrite int fwrite(resource handle, string string [, int length])
引数のハンドルで指定したファイルポインタの位置に指定した文字列を書き こみます。バイト数が指定されている場合は、バイト数分だけ書き込みます。 (指定したバイト数よりも文字列が小さい場合には文字列を書き込んだ時点 で終了)。 引数: handle 対象となるファイルのハンドル string 書き込む文字列 length 一度に書き込む最大バイト数 返り値: 書き込んだバイト数。エラーが起こった場合はFALSE
書き込まれる位置はfopenで指定したモードによって異なります。「r+」「w」「w+」「x」「x+」の場合はファイルポイントが先頭に設定されますので、上書きでファイルの先頭から上書きで書き込みが行われます。「a」「a+」の場合はファイルポインタがファイルの最後に設定されますので、既存のファイルの内容の最後に追加される形で書き込みが行われます。
またバイナリモードでの書き込みですので、Windows環境で使う場合にはfopenのモードに「b」を追加して下さい。(例:「ab」「wb」)。
実際の流れは下記のようになります。
$data = 'abcdefg'; $fp = fopen('filename', 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); }else{ print($data.'をファイルに書き込みました'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); } } fclose($fp);
サンプルプログラム
では実際に試して見ます。
<html> <head><title>PHP TEST</title></head> <body> <?php $data = 'abcdefg'; $fp = fopen('sample.txt', 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました<br>'); }else{ print($data.'をファイルに書き込みました<br>'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました<br>'); } } $flag = fclose($fp); if ($flag){ print('無事クローズしました'); }else{ print('クローズに失敗しました'); } ?> </body> </html>
書き込みの対象となる"sample.txt"は下記のようなファイルです。
サンプルプログラムをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。
今回は追加する形で書き込みを行いましたので"sample.txt"は下記のようになっています。
では次に上書きした場合も試してみます。
<html> <head><title>PHP TEST</title></head> <body> <?php $data = 'abcdefg'; $fp = fopen('sample.txt', 'wb'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました<br>'); }else{ print($data.'をファイルに書き込みました<br>'); } flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました<br>'); } } $flag = fclose($fp); if ($flag){ print('無事クローズしました'); }else{ print('クローズに失敗しました'); } ?> </body> </html>
書き込みの対象となる"sample.txt"は下記のようなファイルです。
サンプルプログラムをWWWサーバに設置しブラウザ経由で見ると下記のように表示されます。
今回は上書きする形で書き込みを行いましたので"sample.txt"は下記のようになっています。
上書きの場合は、既存の内容が全て消えた上で頭から書き込みということになりますので注意して下さい。
( Written by Tatsuo Ikura )