在将输出重定向到文本文件时使用exec似乎锁定了所述文件

时间:2011-06-30 12:03:56

标签: php apache

在WAMP配置中,我正在使用exec执行shell命令,并使用>> log.txt重定向输出。在剧本中多次调用突击队。第一次创建文件,并在其上写入第一个输出,但似乎文件流未关闭(我无法删除该文件,Windows告诉我该文件是由其他人打开的),因此脚本尝试继续加载但不执行任何其他操作,并且仍然在我为此脚本设置的5分钟限制后尝试。

我做错了吗?如果是,为什么?否则问题出在哪里?

编辑:我已经通过评论代码行确认它是我的问题的根源。此外,虽然我中断了脚本,但文件仍保持锁定状态(编辑/移动/删除)。

编辑2:使用pclose(popen("start /B ". $cmd, "r"))而不是this comment中的建议似乎没有带来任何内容,无论我是否使用>> log.txt

编辑3:强制意外重启服务器后,问题就不再存在了。

我和一些同事谈过他们的应用程序遇到类似的问题,他们说重启他们的服务器总是"解决了#34;问题。但是,如果问题迟早再次出现,我不会称之为解决方案。所以似乎"无声更新"场景越有可能。

与此同时,服务器将迁移到具有较新操作系统的计算机(Windows 2008 Server)。我等着看问题是否会再次出现,但如果可能的话,我想采取措施,以便将来不必处理。

1 个答案:

答案 0 :(得分:1)

为什么你不执行($ cmd,$ output,$ result)?这将返回$ output变量中的输出。然后你可以做一个file_put_contents($ file,implode(“\ r \ n”,$ output),FILE_APPEND)

这将允许您以纯php方式将命令的输出直接附加到日志文件中