我有一个主脚本,我删除(取消链接)一个文件。然后,在稍后我在主脚本中包含的一些脚本中,我写入该文件(到与删除的文件同名的文件,因为它现在应该已经消失了)。
正在发生的是,在运行主脚本之后,文件将被删除。正如在写入文件后发生的取消链接操作一样。当我在主脚本中截断文件(通过用空字符串覆盖它)并稍后写入该文件时,会发生同样的想法。结果是,该文件为空(就像在写入后截断文件一样,但代码中的文字顺序相反)。
这里有什么不对?或者如果不是,那为什么会这样?
编辑:
首先(在主脚本中):
unlink($config['directory'].'logs/info.txt');
然后(在某些包括脚本中):
$f = fopen($config['directory'].'logs/info.txt', "w");
fwrite($f, "Text");
fclose($f);
我认为可能存在一些常见的错误,你可以指出(比如没有调用fclose或其他东西)。所以我可能需要更仔细地研究它(但我确信没有对此文件进行其他操作,因为我使用了该文件的一些唯一名称,同样的事情发生了。)
答案 0 :(得分:2)
从fopen - mode参数中删除.text
$f = fopen($config['directory'].'logs/info.txt', "w");
答案 1 :(得分:0)
以后如何写文件? file_put_contents()是一种方式(我几乎不再使用任何其他东西)但是如果你使用fopen / fwrite并忘记可能导致这样的问题的fclose。
答案 2 :(得分:0)
如果没有真正看到代码,就无法给出明确的答案,但有一种可能性是客户端发生的资源请求导致文件在主要请求完成后被删除。
尝试在脚本中删除文件的部分使用堆栈跟踪,以确定如何再次调用该文件;请参阅debug_backtrace
或debug_print_backtrace
。
答案 3 :(得分: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);