文档说我需要:
如果您的主机帐户在 LINUX/UNIX 系统上,您可以设置 CRON 作业以指向此 URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31
尽管这是他们提供的有关如何设置 cron 的唯一信息。我知道脚本工作正常,因为当我通过浏览器访问 URL 时,我会收到电子邮件。
*/1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul虽然这不起作用并且我没有收到任何电子邮件或错误?
cron.php使其无法从浏览器执行?虽然对于单个文件而不是目录,但可能类似于这个答案。调用 PHP 脚本的方式略有不同,尤其是它处理给定参数的方式。该文档是关于 HTTP GET 请求,您正在执行 PHP 脚本的命令行调用。
通过命令行执行的 HTTP GET 请求示例:
wget -q -O - "http://localhost/domain-manager/cron.php?cron=do&d=31"
Run Code Online (Sandbox Code Playgroud)
通过命令行执行 PHP 脚本的示例:
php -f /var/www/website/public/domain-manager/cron.php cron=do d=31
Run Code Online (Sandbox Code Playgroud)
主要区别在于 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
Run Code Online (Sandbox Code Playgroud)
保护此文件免受外部请求的建议: /var/www/website/public/domain-manager/.htaccess 的内容(在同一目录中)
<files cron.php>
order deny,allow
deny from all
allow from localhost
</files>
Run Code Online (Sandbox Code Playgroud)