文档说我需要:
如果你的托管账户在 LINUX/UNIX 系统上,你可以设置一个 CRON 任务来指向此 URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31
尽管这是他们给出的有关如何设置 cron 的唯一信息。但我知道脚本运行正常,因为当我通过浏览器访问 URL 时,我会收到电子邮件。
- 我看了几个例子并尝试阅读手册:执行 PHP 文件并得出了以下结论:
*/1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul
虽然这不起作用并且我没有收到任何电子邮件或错误?
- 我该如何保护此文件
cron.php
,使其无法通过浏览器执行?也许可以这个答案尽管是针对单个文件而不是目录。
答案1
调用 PHP 脚本的方式以及它处理给定参数的方式略有不同。文档是关于 HTTP GET 请求的,而您正在执行 PHP 脚本的命令行调用。
通过命令行执行的 HTTP GET 请求示例:
wget -q -O - "http://localhost/domain-manager/cron.php?cron=do&d=31"
通过命令行执行PHP脚本的示例:
php -f /var/www/website/public/domain-manager/cron.php cron=do d=31
主要区别在于 PHP 如何获取参数。对于 HTTP 请求,PHP 将使用 Apache 或您正在使用的任何 Web 服务器的接口,并在 $_GET 数组中获取参数。对于命令行调用,PHP 必须使用 $argv 数组。
如果文档需要 HTTP 调用,我会使用它,即使出于性能原因命令行调用会更好并且没有这样的限制。
针对您的 crontab 的建议:
*/2 * * * * wget -q -O - "http://localhost/domain-manager/cron.php?cron=do&d=31" > /dev/null 2>&1
保护此文件免受外部请求的建议:/var/www/website/public/domain-manager/.htaccess 的内容(在同一目录中)
<files cron.php>
order deny,allow
deny from all
allow from localhost
</files>