You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让多目录PHP文件共享block_this.txt实现IP拦截与重定向?

解决IP拦截脚本的多目录适配与重复维护问题

针对你遇到的黑名单文件多目录重复上传、重定向地址适配问题,直接给你修改后的方案和代码:

1. 统一黑名单文件路径

把block_this.txt放到网站根目录(比如public_html或www),用网站根目录绝对路径读取文件,这样所有目录下的PHP文件调用函数时,都会读取同一个文件,一次更新全站点生效,不用重复上传。

PHP里可以用$_SERVER['DOCUMENT_ROOT']获取网站根目录的绝对路径,拼接成黑名单文件的完整路径。

2. 优化重定向地址(可选)

如果重定向到站内页面,用根目录绝对路径写法(比如/blocked.html),避免相对路径的适配问题;如果是外部地址,直接写固定URL即可。

3. 优化后的完整代码(含精确匹配+性能提升)

原代码的正则匹配可能出现部分IP误匹配(比如黑名单192.168.1.1会误匹配192.168.1.10),同时每次调用都读文件会影响性能,这里一并优化:

function smeblock($a)
{
    // 用静态变量缓存黑名单内容,避免重复读取文件
    static $blockedIps = null;
    
    if ($blockedIps === null) {
        // 读取根目录下的黑名单文件,可根据实际存放路径调整
        $filePath = $_SERVER['DOCUMENT_ROOT'] . '/block_this.txt';
        if (!file_exists($filePath)) {
            // 文件不存在时直接返回,避免报错
            return;
        }
        $temps = file_get_contents($filePath);
        // 分割黑名单并过滤空行、空格
        $blockedIps = array_filter(array_map('trim', explode('|', $temps)));
    }
    
    // 精确匹配IP,避免部分匹配错误
    if (in_array(trim($a), $blockedIps, true)) {
        // 重定向到站内拦截页示例(根目录下的blocked.html)
        // header('Location: /blocked.html');
        // 或重定向到外部地址
        header('Location: https://www.google.com');
        die();
    }
}

关键改动说明

  • 绝对路径读取:$_SERVER['DOCUMENT_ROOT']确保所有目录的PHP都指向同一个黑名单文件,彻底解决重复维护问题。
  • 静态缓存:仅第一次调用函数时读取文件,后续直接用缓存的IP列表,大幅提升性能。
  • 精确匹配:用in_array严格匹配IP,比原正则更高效,避免部分IP误拦截。
  • 容错处理:增加文件存在判断,避免文件缺失时触发PHP错误。

内容的提问来源于stack exchange,提问作者taigi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:20:28