为了账号安全,请及时绑定邮箱和手机立即绑定

PHP并发读写文件问题 高手请进!

PHP并发读写文件问题 高手请进!

PHP
呼啦一阵风 2019-03-16 03:30:11
ajax1.html三个ajax方法同时访问ajax1.php,ajax1.php中有进行文件data.php读写,由于三个ajax方法访问频率特别高,就产生了并发访问,导致读写出错,使用了flock()还是会出错,请高手们指导一下怎么解决呢? ajax1.html代码: var a = 1; var b = 1; var c = 1; function ajax1(){ $.get('ajax1.php?from=a&value='+a, function(res){ $('#ajax1').text(a); a++; if(res == 1){ ajax1(); } }); } function ajax2(){ $.get('ajax1.php?from=b&value='+b, function(res){ $('#ajax2').text(b); b++; if(res == 1){ ajax2(); } }); } function ajax3(){ $.get('ajax1.php?from=c&value='+c, function(res){ $('#ajax3').text(c); c++; if(res == 1){ ajax3(); } }); } function beginAjax(){ ajax1(); ajax2(); ajax3(); } ajax1.php代码: $from = $_GET['from']; $value = $_GET['value']; $data = is_array(include 'data.php')? include 'data.php': array(); $data[] = $from .'-'. $value; $file = fopen('data.php', 'w'); $lock = flock($file, LOCK_EX); if($lock){ fwrite($file, '<?php'); fwrite($file, PHP_EOL); fwrite($file, 'return '); fwrite($file, var_export($data, true)); fwrite($file, ';'); flock($file, LOCK_UN); } fclose($file); exit('1'); data.php代码(以下数据是出错了的数据): return array ( 0 => 'b-3', );1 => 'a-1', 2 => 'c-1', 3 => 'b-2', 4 => 'a-2', 5 => 'c-2', );
查看完整描述

4 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

如果数据库和Nosql都不用,那么针对文件并发读写时:

1、在写之前生成个副本,做读取

2、并发写时,文件频繁加锁效率会降低。我觉得可以,在写时先创建个临时文件,最后再进行文件合并(这个有难度,什么时间合并?怎么合并?),合并后再生成一个用于读的副本,这样速度会提高很多

查看完整回答
反对 回复 2019-03-18
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

你缺乏网络知识和系统知识。
不要作文件IO,用数据库,或者其它对象存储的基础设施。

查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 387 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信