<?php
//File to extract the Poem of the day
$homepage = file_get_contents('http://SomeWebsite.com/today.php');
$poemALL = substr($homepage,strpos($homepage,"<p>"),strlen($homepage));
.
. // extracting the poem and saving it to $poemFinish
.
file_put_contents("poem.txt", $poemFinish); ?>
所以这是一个相当简单的脚本(如果我手动执行它,它可以正常工作)。这个脚本应该与www-data用户及其cron一起执行,所以我用这个命令打开cron并输入它应该运行的命令
sudo crontab -u www-data -e
0 3 * * * php /var/www/html/getpoem.php
为了避免任何权限问题,我给了getpoem.php和poem.txt这样的rwx权限(我知道我应该在它生效时更改它,但这只是为了测试)
-rwxrwxrwx 1 www-data www-data 1189 Aug 17 15:07 getpoem.php
-rwxrwxrwx 1 www-data www-data 1335 Aug 17 15:07 poem.txt
所以这是设置,但它不会执行。
我到目前为止所做的是将“php”更改为/ usr / bin / php以确保cron知道php是什么。 我接下来要做的就是让cron正在运行,所以我将cronjob更改为
2 * * * */usr/bin/php /var/www/html/getpoem.php | > /var/www/html/test.txt
再没有做任何事......所以我把它改成了
2 * * * */usr/bin/php /var/www/html/getpoem.php | > /tmp/test.txt
没有运行php文件,但在我的tmp目录中创建了一个名为test.txt的空( - .-“)文件。
所以我认为问题必须是我的www-data用户的访问权限中的问题。它只是非常奇怪,因为我的所有webcontent(php文件,webapp usw。)也归www-data用户所有,并且运行顺畅。
我是否需要为www-data的cron提供额外的特权?
答案 0 :(得分:2)
从cron运行php时,您的工作目录通常不是该文件所在的目录。编写文件时,它可能会尝试编写相对于poem.txt
的文件/
是不可写的。
因此,您要么设置工作目录,要么使用“绝对”路径。例如:
file_put_contents(__DIR__.'/poem.txt');
其中__DIR__
是一个魔术常量,包含当前文件所在的目录。