Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让PHP文件自动运行?_Php_Cron - Fatal编程技术网

如何让PHP文件自动运行?

如何让PHP文件自动运行?,php,cron,Php,Cron,我有一个PHP文件,x.PHP,每次运行时都会输出b.xml。我这样做的方法是使用crontab运行x.php文件。问题是,由于服务器的设置,新文件的权限为400。因此,我还有另一个crontab行将文件b.xml权限更改为777,以便下次运行x.php 我觉得这太复杂了。有没有办法让这更简单一点 这应该有效: // set permission chmod('path/to/b.xml', 777); // do other stuff 要求服务器管理员创建一个新用户,该用户拥有脚本写入x

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

我觉得这太复杂了。有没有办法让这更简单一点

这应该有效:

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

// do other stuff

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

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

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

chmod('path/b.xml', 0777);
注意:使用chmod时,应始终指定八进制

更好的方法? 运行cron作业时,应特别注意运行cronjob的用户

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

su-c“php/home/jonathan/public_html/b.php”apache

这可能有效,也可能无效,这取决于是否允许您以用户身份切换到apache。不要忘记将apache切换为实际的web服务器用户名

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

OP建议的另一种方式:

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


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

为了解决此问题,我创建了一个cronjob,如下所示:

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

这执行了创建b.xml的文件,因为执行脚本的用户是公共的,所以权限仍然是公共的。

为什么不让x.php自己更改b.xml的权限?使用PHP内置的
chmod
函数。这里没有
umask
要做什么吗?
umask()
的值是什么?我应该提到我不允许更改umask,因为我不是服务器管理员。@Dai我试过了,但它遇到了错误,因为它没有这样做的权限,即使文件是777,我试过了,我得到了这个。在创建b.xml之后,我在文件的末尾有一行。PHP警告:chmod():第111行的/home/account/public_html/x.PHP中没有这样的文件或目录。听起来这可以完成这项工作。如果我没有找到另一种方法,按照我的意愿去做,我会用这个。谢谢你详尽的回答!我在底部添加了你的答案,这样做很有意义,我喜欢。