为了运行cron作业,确定请求是否是由服务器本身发出的


Determining if request is made by server itself, for purposes of running cron jobs?

所以我需要做一个cron作业,每24小时运行一次,并发送一些电子邮件。我需要这样做,只有服务器能够运行它,它需要在CodeIgniter。

假设它在控制器cron.php中,我如何确保只有服务器才能执行它。到目前为止,我已经想到在构造函数中放入这样的东西:

if($_SERVER['SERVER_ADDR'] != $SERVER['REMOTE_ADDR']){
    //kill the script, do not send emails
}

所以我的问题是,这似乎太简单了,这些值可以被欺骗/操纵吗?很难做到吗?

有没有更好的方法来解决这个问题(除了把它作为一个独立的程序隐藏在公共web根之外的某个地方吗?

增加一些"安全性"的方法是实现一种执行脚本所需的API密钥。

您的cron将获取一个URL,如

https://server/.../cron.php?key=<random string here>