PHP实现多个进程同时写入同一个文件的两种方案分享

黄舟
풀어 주다: 2023-03-07 07:50:01
원래의
3300명이 탐색했습니다.

考点:对函数的理解

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: 关闭一个打开的文件指针

参数1:文件名 参数2:成功时返回 TRUE, 或者在失败时返回 FALSE。
로그인 후 복사

方案一

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; }
로그인 후 복사

위 내용은 PHP实现多个进程同时写入同一个文件的两种方案分享의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!