fopenをするための最良の方法
無題
とりあえず下記にユーザ関数を。
<?php function fopen_read($filepath){ $fp = @fopen($filepath, 'rb'); if(!$fp){ return false; } flock($fp, LOCK_SH); return $fp; } function fopen_write($filepath){ $fp = @fopen($filepath, 'a+b'); if(!$fp){ return false; } ftruncate($fp, 0); if(!flock_ex($fp)){ return false; } rewind($fp); return $fp; } /* function fopen_write($filepath){ $fp = @fopen($filepath, 'w+b'); if(!$fp){ return false; } if(!flock_ex($fp)){ return false; } //fseek($fp, 0, SEEK_SET); rewind($fp); return $fp; } */ function fopen_add($filepath){ $fp = @fopen($filepath, 'a+b'); if(!$fp){ return false; } if(!flock_ex($fp)){ return false; } fseek($fp, 0, SEEK_END); return $fp; } function flock_ex($fp){ if(!is_resource($fp)) return false; $retries = 0; $max_retries = 100; do{ if($retries > 0){ usleep(rand(1, 10000)); } $retries += 1; }while(!flock($fp, LOCK_EX) and $retries <= $max_retries); if($retries == $max_retries){ return false; } return false; } ?>参考:http://testwiki.仮.jp/index.php?PHP%2F%A5%D5%A5%A1%A5%A4%A5%EB%A5%ED%A5%C3%A5%AF%2F%C0%DF%B7%D7
http://www.php.net/manual/ja/function.flock.php