我想为 CakePHP 设置一个 cron 作业,它在我的 Cake 应用程序中发送 GET 请求一个 URL,(或在我的控制器中运行一个函数)。但是,如果用户访问此 URL,他们只会收到 404 以防止滥用。
我怎样才能做到这一点?像这样的东西会很好用吗?
注意:我使用的是 CakePHP 2.3.0
我想为 CakePHP 设置一个 cron 作业,它在我的 Cake 应用程序中发送 GET 请求一个 URL,(或在我的控制器中运行一个函数)。但是,如果用户访问此 URL,他们只会收到 404 以防止滥用。
我怎样才能做到这一点?像这样的东西会很好用吗?
注意:我使用的是 CakePHP 2.3.0
最简单(且相当安全)的方法是检查用户代理。像这样的东西(示例假设您正在使用来自 cron 的“wget”)。在 crontab 中,您可以使用它让它在每小时后 7 分钟运行:
7 * * * * cd /tmp; /usr/bin/wget http://domain/controller/cron; rm cron
如果 cron 作业与网站在同一台服务器上运行,则可以使用“localhost”而不是“domain”;否则,请使用您的域名(例如:“www.example.com”)。将您希望使用 cron 方法的控制器的名称替换为“控制器”一词。接下来,在控制器的 PHP 中:
public function cron() {
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 4) != 'wget')
$this->redirect('/');
...
它只是“合理”安全的,因为欺骗用户代理并不难。在不了解您的应用程序的更多信息的情况下,我无法为您提供生成 404 的好方法(不过,其他人可能可以);这会将它们发送到您的主页,这可能已经足够了。
如果您想使用不同的名称(“cron”除外),请记住更改 crontab 和 PHP。
如果您不使用 cron 来调用 wget 来调用您的方法,则可以将其调整为您使用的方法生成的任何用户代理字符串。
如果是我,我可能还会让它检查是否是 cron 调用的正确时间(例如:在一小时的第 7 分钟的前 10 秒内)。