PHP 代码 ,确保多个进程同时写入同一个文件成功


 
 

fopen :打开文件或者URL

 
 
参数1:文件地址或者URL
参数2:mode 参数指定了所要求到该流的访问类型
    'r'	只读方式打开,将文件指针指向文件头。
    'r+'	读写方式打开,将文件指针指向文件头。
    'w'	写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    'w+'	读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
    'a'	写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
    'a+'	读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
 
 

? ?fwrite : 写入文件

 
 
参数1:文件名文件系统指针
参数2: 要写入的内容 string类型
返回值: 写入成功返回写入的字符数,失败返回false
 
 

? ?flock: 轻便的咨询文件锁定

 
 
参数1:文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
参数2:模式
    LOCK_SH取得共享锁定(读取的程序)。
    LOCK_EX 取得独占锁定(写入的程序。
    LOCK_UN 释放锁定(无论共享或独占)。
    如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。
 
 

? ?fclose : 关闭一个打开的文件指针



方案一
function writeData($filepath, $data) { $fp = fopen($filepath,'a'); do{ usleep(100); }while (!flock($fp, LOCK_EX)); //LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得 $res = fwrite($fp, $data."\n"); flock($fp, LOCK_UN); //LOCK_UN 释放锁定(无论共享或独占)。 fclose($fp); return $res; } 方案二(自己做标记的方法) function write_file($filename, $content) { $lock = $filename . '.lck'; $write_length = 0; while(true) { if( file_exists($lock) ) { usleep(100); } else { touch($lock); $write_length = file_put_contents($filename, $content, FILE_APPEND); break; } } if( file_exists($lock) ) { unlink($lock); } return $write_length; }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM