我有一个PHP文件 x.php ,每次运行时都会输出 b.xml 。我这样做的方法是使用crontab运行 x.php 文件。问题是由于服务器的设置,新文件的权限为400.所以我还有另一个crontab行将文件 b.xml 权限更改为777,以便 x.php < / strong>下次可以运行它。
我觉得我这太复杂了。有没有办法让这更简单?
答案 0 :(得分:2)
您需要在x.php脚本中将文件chmod为777。
创建b.xml后,运行以下行:
chmod('path/b.xml', 0777);
注意在使用chmod时应始终指定octals。
运行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(或其他)用户运行,确保下次访问它时,该文件将可用。
答案 1 :(得分:0)
这应该有效:
// set permission
chmod('path/to/b.xml', 777);
// do other stuff
答案 2 :(得分:0)
要求服务器管理员创建一个拥有脚本写入xml文件的文件夹的新用户。 以这样的用户身份通过你的cron作业运行你的php脚本。如果您将脚本作为文件夹的所有者运行,则可以通过php脚本更改权限。
答案 3 :(得分:0)
为了解决这个问题,我最终只创建了一个cronjob,如:
0,10,20,30,40,50 * * * * /usr/bin/wget http://example.com/user/x.php
这执行了创建b.xml的文件,并且由于执行脚本的用户是公共的,因此权限也是公开的。