1

我有一个 PHP 文件x.php ,每次运行时都会输出b.xml 。我这样做的方法是使用 crontab 运行x.php文件。问题是由于服务器的设置,新文件的权限为 400。所以我还有另一个 crontab 行将文件b.xml权限更改为 777,以便下次可以运行x.php 。

我觉得我把这件事弄得太复杂了。有什么办法可以让这更简单一点吗?

4

4 回答 4

2

快速回答

您需要在 x.php 脚本中将文件 chmod 为 777。

创建 b.xml 后,运行以下行:

chmod('path/b.xml', 0777);

请注意,使用 chmod 时应始终指定八进制数。

更好的方法?

运行 cron 作业时,应特别注意运行 cronjob 的用户。

通常在共享服务器上,您将拥有自己的登录名,因此 cron 作业以该用户身份运行。我问你的问题——那个用户和你的网络服务器一样吗?通常 php 作为“apache”运行,而 cron 可能作为“tanner”运行。在这种情况下,将 b.xml 设置为 tanner 拥有,并且权限为 400 意味着只有 tanner 可以更改文件。要解决这个问题,如果您无权访问 umask,一种方法是将您的 cron 作业更改为作为网络服务器运行:

su -c "php /home/jonathan/public_html/b.php" apache

这可能会也可能不会起作用,具体取决于您是否被允许以用户身份切换到 apache。不要忘记将 apache 切换到实际的 Web 服务器用户名。

现在,如果这不起作用,那么另一种选择是获得 777 权限。请记住,在共享服务器上,这意味着该服务器上的任何人如果知道路径,则可能会访问该文件。

OP建议的另一种方式:

0,10,20,30,40,50 * * * * /usr/bin/wget http://example.com/user/x.php

这种方式将始终以 apache 运行的 apache(或其他)用户身份运行,确保下次访问时,该文件将可用。

于 2012-12-11T00:50:44.737 回答
0

这应该有效:

// set permission
chmod('path/to/b.xml', 777);

// do other stuff
于 2012-12-11T00:43:33.957 回答
0

为了解决这个问题,我最终只创建了一个 cronjob,如下所示:

0,10,20,30,40,50 * * * * /usr/bin/wget http://example.com/user/x.php

这执行了创建 b.xml 的文件,并且由于执行脚本的用户是公开的,因此权限也保持公开。

于 2012-12-11T03:19:13.003 回答
0

要求服务器管理员创建一个新用户,该用户拥有脚本写入 xml 文件的文件夹。以这样的用户身份通过​​您的 cron 作业运行您的 php 脚本。如果您以文件夹所有者的身份运行脚本,则可以通过 php 脚本更改权限。

于 2012-12-11T00:50:28.870 回答