又一段代码如下,如果文件修改时间超过1分钟,则从数据库里查询一次,并写进一个外部文件。
请教一下,如果同1秒钟又若干不同的IP用户打开这个页面,php代码执行写入,会不会引发什么潜在的错误?
若有,有何方法避免?谢谢。if((time()-filemtime(filename)) > 60){
   //mysql_query;  query时间小于2秒
   file_put_contents($filename, $query_contents);
}
file_get_contents($filename);
//读出该文件里的内容

解决方案 »

  1.   

    会,写入失败时将清空空文件
    至少 file_put_contents 要有 LOCK_EX 参数彻底的防止共享冲突,需要使用数据库
      

  2.   

    从判断文件修改时间超过1分钟成立到将数据库读取出来的内容写入文本,中间过程太久,并发的问题不可避免。我建议你建立一个共享的锁,所有用户都能读取到。在判断一成立时,就将锁锁定,处理完文件操作后才解锁。形如这样:if (!is_lock() && ...) {
    lock();
    .... unlock();
    }其中锁建议放到共享内存里,内存的速度非常快,能承受的并发量应当远大于服务器能承受的并发量了。在linux下可以用apc,memcache,windows下可以用wincache
      

  3.   


    老大:怎么用 LOCK_EX ?能不能给个例子?
      

  4.   

    PHP手册中找一下file_put_contents();LOCK_EX是这个函数的一个参数,它有三个方式分别为:FILE_USE_INCLUDE_PATH 、FILE_APPEND 、LOCK_EX ;具体的还需要看手册
      

  5.   

    error_log(msg, 3,path)
    应该可以的吧
      

  6.   

    网上都是 fwrite lock_ex的例子,谁能给段 file_put_contents lock_ex的例子?