中易网

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

答案:3  悬赏:0  
解决时间 2021-02-04 08:33
请写一段PHP代码,确保多个进程同时写入同一个文件成功
最佳答案
首先PHP是支持进程的而不支持多线程(这个先搞清楚了),如果是对于文件操作,其实你只需要给文件加锁就能解决,不需要其它操作,PHP的flock已经帮你搞定了。
用flock在写文件前先锁上,等写完后解锁,这样就实现了多线程同时读写一个文件避免冲突。大概就是下面这个流程
/*
*flock(file,lock,block)
*file 必需,规定要锁定或释放的已打开的文件
*lock 必需。规定要使用哪种锁定类型。
*block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。
*lock
*LOCK_SH 要取得共享锁定(读取的程序)
*LOCK_EX 要取得独占锁定(写入的程序)
*LOCK_UN 要释放锁定(无论共享或独占)
*LOCK_NB 如果不希望 flock() 在锁定时堵塞
/*
if (flock($file,LOCK_EX))
{
fwrite($file,'write more words');
flock($file,LOCK_UN);
}
else
{
//处理错误逻辑
}
fclose($file);
)
全部回答
多进程写文件 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的flock已经帮你搞定了。 /* *flock(file,lock,block) *file 必需,规定要锁定或释放的已打开的文件 *lock 必需。规定要使用哪种锁定类型。 *block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。 *lock *lock_sh 要取得共享锁定(读取的程序) *lock_ex 要取得独占锁定(写入的程序) *lock_un 要释放锁定(无论共享或独占) *lock_nb 如果不希望 flock() 在锁定时堵塞 /* if (flock($file,lock_ex)) { fwrite($file,'write more words'); flock($file,lock_un); } else { //处理错误逻辑 } fclose($file);
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我有一个店面,有好多空闲时间,想拿手工活在
开瑞汽车鑫之源店这个地址在什么地方,我要处
阿鲁山地址在哪,我要去那里办事
中国石油泰祥加油站地址在哪,我要去那里办事
怎样输入动态密码
怎么才能看出是不是檀香
公务员考试为什么要考行政职业能力测验和申论
淘宝文案策划的工作难吗?
芦荟维c美白母液发黄了还能用吗
瘦手臂瑜伽 瑜伽可以瘦手臂吗
去广州窖口坐哪次车
中国第一个会神鬼七杀令的道士是林正英吗
永石老怎么去啊,有知道地址的么
放什么添加剂能让蛋卷更酥更脆且保持时间长
烘焙和烹饪有什么区别那个好
推荐资讯
为什麼我老是很容易哭,一生气受气时就哭个不
我看过有俩条龙一条白的一条黑龙大战忘记是什
全网通手机(嵊州剡湖店)怎么去啊,有知道地址
请问如何制黄精?我有大量的新鲜黄精但是不知
贞子是什么东东???急!为什么从电视里出来
哪些机械厂需要不锈钢材料
骁龙625的dsp详细参数
满亿厨具地址在哪,我要去那里办事
听说走后门也能进清华北大?!
confirm recognize identify区别
汤姆想知道杰克住在哪里的英语
绿萝的叶子出现黄色斑点是什么原因
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?