分享一个自用的IP更新PHP小代码,有需要的可以拿去!
因为家里有公网IP(随机的公网IP),有时候需要知道IP连进去,原来都是让媳妇用手机打开度娘搜“本机IP”之类的方式然后直接截图告诉我;女生嘛,嫌麻烦;又学不会,想着拉到吧自己写一个PHP代码用内网服务器挂个定时任务,1分钟执行一次,完事!于是乎你们就看到了如下代码:
完整代码
<?php
// 配置相关,一般只需要改这个
$config = [
// 可以更新IP的密钥,支持GET/POST方式传入
"updateToken" => "605d5a3a8d55ca36f394b01734177bb5",
// 本地IP缓存记录
"tempData" => __DIR__ . "/tempData.json",
// 自定义响应头
"responseHeader" => [
// 跨域配置
"Access-Control-Allow-Origin:*",
"Access-Control-Allow-Headers:*",
"Access-Control-Allow-Methods:GET,POST",
// 返回json数据
"Content-Type:application/json; charset=utf-8",
],
// token字段?默认:token
"tokenField" => "token"
];
// 获取请求参数
$get = $_GET;
$post = $_POST;
$data = array_merge($get, $post);
// 如果参数中有token字段
$debug = $config["debug"];
$tokenField = $config["tokenField"];
$tempData = $config["tempData"];
$allowCors = $config["allowCors"];
$updateToken = $config["updateToken"];
$responseHeader = $config["responseHeader"];
// 自定义响应头
foreach ($responseHeader as $rule) {
header($rule);
}
// 内置函数
class Util
{
/**
* 返回JSON信息
* @param $code
* @param null $msg
* @param null $data
*/
public static function returnJson($code, $msg = null, $data = null)
{
header("Content-Type:application/json; charset=utf-8");
$result = ["code" => $code];
if (!is_null($msg)) $result["msg"] = $msg;
if (!is_null($data)) $result["data"] = $data;
echo json_encode($result);
exit();
}
/**
* 获取真实IP
* @return array|false|mixed|string
*/
public static function getIp()
{
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} else {
$ip = getenv("REMOTE_ADDR");
}
}
return $ip;
}
}
// 业务逻辑
if (isset($data[$tokenField])) {
// 如果有token字段,则表示更新IP,反之为取IP
$token = $data[$tokenField];
// 如果token等于配置token
if ($token === $updateToken) {
$data = ["ip" => Util::getIp(), "update_time" => date("Y-m-d H:i:s")];
file_put_contents($tempData, json_encode($data));
Util::returnJson(200, "更新IP成功!", $data);
} else {
Util::returnJson(401, "您没有权限更新IP地址!");
}
} else {
// 取IP
if (file_exists($tempData)) {
$result = json_decode(file_get_contents($tempData));
Util::returnJson(200, "获取数据成功", $result);
} else {
Util::returnJson(500, "暂未同步过IP地址,请稍后再试!");
}
}
如何使用
1、首先确保你有PHP环境,且环境正常,至于PHP版本具体我没测,反正我自己用测到5.6是没问题的;
2、复制上方代码,粘贴并保存到站点,如:index.php
3、访问站点,即可获取最新IP,如需更新IP,可通过get或post请求传入密钥更新
备注
以下举例仅适用于你把文件保存到站点根目录,且文件名是
index.php
,且默认文档顺序index.php
是第一位;
- 获取最新IP:
http://你的域名/index.php
(此时 index.php 可省略) - 更新IP:`http://你的域名/index.php?token=你的密钥(index.php可省略,token名称可自定义,支持POST传入)
返回报文预览
场景1:没更新过IP
{
"code": 500,
"msg": "暂未同步过IP地址,请稍后再试!"
}
场景2:更新IP
{
"code": 200,
"msg": "更新IP成功!",
"data": {
"ip": "117.64.227.226",
"update_time": "2022-01-16 23:30:08"
}
}
场景3:查看IP
{
"code": 200,
"msg": "获取数据成功",
"data": {
"ip": "117.64.227.226",
"update_time": "2022-01-16 23:30:08"
}
}