通过Cron Job执行PHP脚本时如何正确获取IP地址?
解决Cron Job运行PHP无法获取IP的问题
Cron直接运行PHP属于CLI命令行模式,没有HTTP请求的上下文环境,所以$_SERVER['REMOTE_ADDR']这个仅在HTTP请求中存在的变量会返回null,解决方法分以下几种场景:
场景1:需要获取服务器的公网IP
可以通过调用简单的IP查询服务,或者读取服务器本地网卡信息:
方法A:调用外部IP查询服务
// 获取服务器公网IP $ip = trim(file_get_contents('https://icanhazip.com'));
方法B:读取服务器本地网卡信息
适合仅需要内网IP的场景:
// 获取服务器主网卡IP(Linux环境) $ip = trim(exec('hostname -I | cut -d" " -f1'));
场景2:仅需要标记该请求来自Cron Job
不需要真实IP的话,可以直接设置一个自定义标识:
$ip = 'cron-job-internal';
重要提醒:修复SQL注入风险
你原代码直接拼接变量到SQL语句中存在严重的SQL注入漏洞,务必改用预处理语句:
// 安全的数据库更新写法 $stmt = $con->prepare("UPDATE `table` SET `colum` = ? WHERE id = 1"); $stmt->bind_param("s", $ip); // "s"表示字符串类型参数 $stmt->execute(); $stmt->close();
内容的提问来源于stack exchange,提问作者Abhishek Chatterjee
相关产品推荐
相关产品推荐

