2010-12-10 66 views
0

我有一个主要的脚本,我删除(取消链接)一个文件。然后,在稍后包含在该主脚本中的一些脚本中,我会写入该文件(与该文件名称相同的文件,因为它现在应该已经消失)。PHP操作顺序有什么问题?

发生什么事是,在主脚本运行后,该文件被删除。正如在写入文件后发生的取消链接操作一样。当我在主脚本中截断文件(通过用空字符串覆盖文件)并稍后写入该文件时,会发生同样的想法。结果是,该文件是空的(就像截断文件发生在写入后,但代码中的字面顺序颠倒了)。

这里有什么问题?或者如果不是这样,它为什么会这样工作?

编辑:

第一(在主脚本):

unlink($config['directory'].'logs/info.txt'); 

然后(在一些包括脚本):

$f = fopen($config['directory'].'logs/info.txt', "w"); 
fwrite($f, "Text"); 
fclose($f); 

我想可能会有一些常见的错误,你可以指出(如不调用fclose或其他)。因此,我可能必须仔细研究这个问题(但是我相信在这个文件上没有其他操作,因为我使用了文件的一个唯一名称,同样的事情发生了)。

+1

请问您可以发布您的PHP代码? – 2010-12-10 08:21:17

+0

fopen()的第二个参数不是文件名,而是访问类型:'r','w'等。您可以在http://es2.php.net/manual/en/上找到完整的参考资料。 function.fopen.php – 2010-12-10 08:38:39

回答

0

以后如何写入文件? file_put_contents()是一种方法(我几乎不再使用其他任何东西),但是如果使用fopen/fwrite并忘记可能导致这样问题的fclose。

0

如果没有真正看到代码就不可能给出明确的答案,但有一种可能性是客户端发生资源请求在后台发生,导致主请求完成后文件被删除。

尝试在脚本部分使用堆栈跟踪来删除文件以确定它如何再次被调用;见debug_backtracedebug_print_backtrace

0

只是一个想法,但你试过刷新输出?您可以使用fflush($f);强制php将所有缓冲数据写入文件。

当然,你不应该真的需要这个 - 实际上用'w'标志打开它会截断文件。你确定它正在打开吗?也许尝试这样的事情:

$f = fopen($config['directory'].'logs/info.txt', "w"); 
if($f === false)die('File opening failed!'); 
fwrite($f, "Text"); 
fflush($f); 
fclose($f);