我觉得你应该检查每一个函数的返回值以确保操作是按照你所预想的进行的。你现在的代码看上去很不负责任。$fp = fopen($gfile, "w");
if ($fp && flock($fp, LOCK_EX))
{
    fwrite($fp, $content);
    fclose($fp);
}其他地方也是,比如你$data = file($gfile)这句执行完后就没有检查$data到底是不是按照你所预想的有24个元素,你在执行这句$content=explode("|",$content); 之前也没有检查$content中到底有没有一个"|"字符,这使得你的程序的健壮性很一般般。在实际运行环境中,到底是不是你自己的拙劣代码把文件清空了都未可知。

解决方案 »

  1.   

    如果在fopen和fwrite之间出现问题
      

  2.   

    感谢hsboy(PHP it!) 的确我对这个检查属于不负责的~呵呵
    由于这个是找的原来的一个老程序我修改的,其中的这些部分我也在一步一步修改
    但是问题出现在,有的时候允许是正常的,,,但是有的时候突然就不行。。~ 
      

  3.   

    flock对于cgi模式似乎是没用的
      

  4.   

    查了一下,我就是CGI模式 怎么办?
      

  5.   

    你可以检查flock的返回值看看是不是true,如果是true就说明Lock成功了。文档里面并没有提到flock在cgi模式下不好用,倒是提到在某些特定系统以及某些特定文件系统下是不好用的。总之你要自己检查一下。另外,你提到了你的服务器是在国外,我想问一下,你的虚拟主机是哪家公司的?谢谢。
      

  6.   

    easyCgi不过感觉国内访问很慢。 所以我们只有英文网站挂在外面。
      

  7.   

    在部分操作系统中,flock() 以处理级执行。当用一个多线程服务器 API(比如 ISAPI)时,您可能不可以依靠 flock() 来保护文件,因为在同一服务器内运行在其它线程的 PHP 脚本可以对该文件进行处理。 
    cgi还是多进程的
      

  8.   

    进程和线程又不一样。现在能用来做web服务的难道还有单进程的系统
      

  9.   

    flock应该是进程锁,也就是说宿主应该不是进程内有效。否则这样锁的意义不是很大。(第三方程序修改后也能着成不可预料的影响)讨论可以继续,贴可以先结了。 关于我提的问题, 我试了试, 虽然是cgi的模式,但是flock是可以使用的,所以还是打算自己再找其他原因了。
      

  10.   

    如果是isapi或者mod_php就只有一个进程了