经过一周的尝试,我不知道还能做什么。 我的网络服务器上有一个简单的 PHP 脚本,名为 getpoem.php。 该脚本打开一个网站,提取其内容并将其保存到服务器上的诗歌.txt 中
<?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 和诗歌.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 用户的访问权限中。这很奇怪,因为我所有的网页内容(php 文件、webapp usw.)也归 www-data 用户所有,并且它们运行顺利。
我需要为 www-data 的 cron 授予额外的权限吗?
从 cron 运行 php 时,您的工作目录通常不是文件所在的目录。写入文件时,它可能会尝试相对于
poem.txt
写入文件 /
,而该文件通常不可写。
因此,您要么设置工作目录,要么应该使用“绝对”路径。例如:
file_put_contents(__DIR__.'/poem.txt');
其中
__DIR__
是一个神奇常量,包含当前文件所在的目录。