2010-01-20 15 views
2

我建立一个简单的PHP脚本守护程序,使用提供在一个PHP守护类:
http://www.phpclasses.org/browse/file/8958.html为什么我不能从PHP守护进程的子进程中删除文件?

我坚持用这个类是好还是坏,我没有太多的时间来完成这件事;所以为了向守护进程发出自定义命令,我只是使用位于/ tmp目录中的命令文件。但是,我需要在守护进程处理其中包含的任何命令后删除此文件。

但是,当我尝试在PHP中“取消链接”文件时,取消链接操作简单失败,并且文件保留。我知道这不是一个权限问题。事实上,我很确定这与守护程序的每个“迭代”都是作为子进程产生的事实有关,并且该子进程必须某种程度上没有删除文件的权限。

我的问题:为什么PHP不能删除这个文件,我能做些什么呢?

+0

什么是错误信息? – 2010-01-20 16:59:42

+0

没有错误消息,我很确定我正在使用error_reporting(E_ALL&E_STRICT)。但是,我将“unlink”的结果赋值给一个变量$ test,然后var_dump($ test)和get bool(false)。 – 2010-01-20 17:15:15

回答

1

/tmp通常有粘性位设置,所以我相信只有在那里存放文件的用户可以删除它。你的子进程是否在父进程(apache,www等)的同一个用户下运行?哪个流程实例创建了该文件?

+0

我以root身份从命令行运行脚本为“php daemonscript.php”。我无法想象加载守护进程类的初始进程能够产生除root之外的其他任何东西。 – 2010-01-20 17:19:52

+0

我也不能 - 但你可能想检查一下。 – prodigitalson 2010-01-20 17:23:15

+0

哇,这很有趣。出于测试目的,我在我的脚本开始处放置了一个sleep(15)延迟。当我第一次运行我的脚本,然后运行“顶部”我看到“php”过程,并且用户是“根”。 15秒后,产生新的过程,并且用户现在是“99”! 任何想法如何解决这个问题? – 2010-01-20 18:10:50