PHPで排他制御してファイルに書き込む
PHPで排他制御してファイルに書き込む方法です。
下記サンプルコードは、メソッドOutputFileに対して、文字列もしくは配列とファイルのパスを渡すと、指定したパスのファイルへ渡された文字列を書き込みます。
- $lines[] = "1行目\r\n";
- $lines[] = "2行目\r\n";
- $lines[] = "3行目\r\n";
- OutputFile($lines,"test.html");
- function OutputFile($lines,$filePath){
- if(empty($lines))return false;
- $fp = fopen($filePath,"w") or exit("Error");
- if(function_exists('stream_set_write_buffer')){
-
- stream_set_write_buffer($fp, 0);
- }
-
- flock($fp, LOCK_EX);
- $lineCount = count($lines);
- if($lineCount == 1){
-
- fwrite($fp, $lines);
- }else{
-
- for($i=0;$i<$lineCount;$i++){
- fwrite($fp, $lines[$i]);
- }
- }
-
- flock($fp, LOCK_UN);
-
- fclose($fp);
- return true;
- }
上記プログラムの場合、既に同名ファイルが存在した場合、一旦中身を全てクリアしています。
既存の内容を残して追記したい場合は、fopen($filePath,"w")で指定している"w"を"a"に変更してください。
fopenメソッドに関する詳しい情報は下記を参照してください。
https://jp1.php.net/manual/ja/function.fopen.php