超级外链发布工具(V2.0 版)

网创_www.wc88.cn 4 阅读 网站源码

超级外链发布工具(V2.0 版)

一款基于 PHP8 + SQLite 的免费超级外链发布系统,向 90+ 高权重查询类站点同步提交网址,
帮助搜索引擎快速发现并收录你的网站。全程静默 iframe 提交,零弹窗打扰

下载地址chaojilianjie.rar

e00e09a0-fd25-4c82-9773-c4f1c4a59f46.png

一、环境要求

项目

要求

PHP

>= 8.0(宝塔面板 PHP8.x 均可)

扩展

pdo_sqlitesessioncurl(新增,探测必须)

数据库

无需 MySQL,数据自动存储在 data/site.db(SQLite)

目录权限

data/ 目录需可写(755,属主 www)

重要:本次升级新增了「服务端可达性探测」功能,必须开启 PHP 的 curl 扩展
否则「🔍 可达性探测」页面会提示"PHP curl 扩展未安装"。

宝塔开启 curl 扩展

  1. 宝塔面板 → 软件商店 → 已安装 → 找到对应 PHP 8.x

  2. 点击「设置」→「安装扩展」→ 勾选 curl → 安装

  3. 重启 PHP 服务


二、安装步骤(宝塔)

  1. 宝塔面板 → 网站 → 添加站点(PHP 版本选 8.0+,无需数据库)

  2. 上传本程序所有文件到网站根目录并解压

  3. 确认 data 目录可写(宝塔默认即可;如异常可执行 chmod 755 data

  4. 确认 PHP 已启用 curl 扩展(见上文)

  5. 首次访问 index.php 会自动初始化数据库(含默认文章、默认友链、管理员账号)

  6. 后台地址:http(s)://你的域名/admin/login.php


三、默认管理员

  • 用户名:admin

  • 密码:admin123

  • ⚠️ 登录后请立即在「网站设置」中修改密码!


四、功能一览

🏠 前台功能

  • 超级外链工具:http/https 下拉预填、支持单个域名 + 批量域名(一行一个)

  • 静默提交:全程使用隐藏 iframe,零弹窗打扰

  • 三级过滤:格式校验 + 可达性探测 + iframe 嵌入检测,自动跳过无效站点

  • 实时日志:每个站点的加载状态(成功/超时/失败)实时可见

  • 精确统计:推广完成后显示"加载成功 X 个 / 超时 Y 个 / 失败 Z 个 / 跳过 N 个"

  • 最新文章:首页展示后台发布的文章

  • 友情链接:页脚展示后台配置的友链

⚙️ 后台功能

  • 网站设置:名称/关键词/描述/宣传语/ICP 备案/统计代码、管理员改密

  • 文章管理:发布/编辑/删除,支持纯文本内容(空行分段)

  • 友情链接:添加/排序/删除

  • 🎯 目标检测(新增):静态校验 targets.php 每个站点的占位符格式

  • 🔍 可达性探测(新增):cURL 并发实探所有站点,检查 HTTP 状态 + iframe 策略


五、三重可信度检测机制

本次优化最大的亮点:从"能不能拼 URL"升级到"能不能真的访问"

TEXT复制

┌─────────────────────────────────────────────────────────────┐
│  ① 格式层:targets.php 里的 URL 模板是否含 {domain}/{url}  │
│     → admin/targets.php 静态校验                             │
│     → 缺占位符 = 无法定位目标页面,直接跳过                  │
├─────────────────────────────────────────────────────────────┤
│  ② 可达层:服务器 cURL 实探 HTTP 状态码                     │
│     → admin/probe.php 并发探测                               │
│     → 2xx/3xx = 通过;4xx/5xx/0 = 失败,跳过                 │
├─────────────────────────────────────────────────────────────┤
│  ③ 嵌入层:响应头是否允许被 iframe 嵌入                     │
│     → admin/probe.php 检测 X-Frame-Options / CSP             │
│     → DENY / SAMEORIGIN = 禁止嵌入,跳过                     │
└─────────────────────────────────────────────────────────────┘
              ↓ 三层全部通过
        前端推广时才真正访问

解决了什么问题?

旧版本问题

新版本解决

targets.php 里加了无占位符的 URL(如 https://ip.chinaz.com/)也提示"成功"

✅ 格式层拦截,直接跳过

站点已关闭(DNS 失败/超时)也提示"成功"

✅ 可达层拦截

页面返回 404/500 也提示"成功"

✅ 可达层拦截

站点禁止 iframe 嵌入X-Frame-Options: SAMEORIGIN)也提示"成功"

✅ 嵌入层拦截(最隐蔽的失效

推广完成只有"访问了 N 个站点",无法分辨真假

✅ 细分"加载成功/超时/失败"三类


六、目标站点探测详解

🎯 目标检测(admin/targets.php)

作用:静态检查 targets.php 中每一个站点的 URL 模板是否含有占位符。

判定规则

  • {domain}{url} → ✅ 有效

  • 都不含 → ❌ 无效

页面显示

  • 每个站点的 URL 模板、含哪些占位符、格式是否有效

  • 有效/无效站点数量统计

  • 无效站点会给出修复建议和示例

示例

PHP复制

// ✅ 正确:带占位符
["站长工具 IP查询", "https://ip.chinaz.com/{domain}"],

// ❌ 错误:没有占位符 —— 会被自动跳过
["错误示例", "https://ip.chinaz.com/"],

🔍 可达性探测(admin/probe.php)

作用:服务器用 cURL 并发访问每个目标 URL,检查 HTTP 状态码和 iframe 嵌入策略。

工作原理

  1. 输入你的真实域名(如 example.com)和协议(https/http)

  2. 系统把每个目标模板里的 {domain} / {url} 替换成真实值

  3. curl_multi 20 并发同时访问所有目标

  4. 逐条检查:

    • HTTP 状态码是否 2xx / 3xx

    • 响应头是否有 X-Frame-Options: DENY/SAMEORIGIN

    • 响应头是否有 CSP frame-ancestors 'none'/'self'

  5. 结果缓存到 data/targets_status.json

  6. 前端推广时 api.php 读取缓存,自动跳过失效站点

探测结果分类

分类

数量色块

含义

✅ 可用

绿色

HTTP 正常 + 允许 iframe

🚫 禁止 iframe

红色

HTTP 正常但禁止嵌套

⚠️ HTTP 异常

橙色

返回 4xx / 5xx

❌ 网络/超时

灰色

DNS 失败 / 连接超时 / SSL 错误

耗时:约 10~40 秒(取决于站点响应速度)

缓存文件data/targets_status.json,可通过删除该文件重新探测。


七、HTTP 状态码判定规则

系统判定"可访问"的规则:

PHP复制

'ok' => ($err === '')                    // ① 没有 cURL 错误
     && ($code >= 200 && $code < 400)    // ② HTTP 状态码 2xx 或 3xx
     && $canIframe;                      // ③ 允许被 iframe 嵌入

状态码速查表

状态码

含义

判定

0

无响应(DNS/超时/SSL 失败)

❌ 失效

200

正常返回

✅ 通过

201~206

其他 2xx

✅ 通过

301 302 307 308

重定向(跟随跳转后再判)

✅ 通过

304

未修改(缓存)

✅ 通过

400

请求格式错误

❌ 失效

401 403

需登录 / 被拦截

❌ 失效

404 410

页面不存在

❌ 失效

405 406

方法/内容不符

❌ 失效

429

限流

❌ 失效(可能临时)

500 502 503 504

服务器问题

❌ 失效(可能临时)

520~527

Cloudflare 错误

❌ 失效

灰色地带(可稍后重试)

以下状态可能是临时的,建议隔 24 小时再探测一次:

  • 403 —— 服务器识别出你是机器人

  • 429 —— 探测并发太高被限流(可降低 probe_urls_batch() 的并发数)

  • 502 503 504 —— 目标站点临时故障


八、日常使用流程

🚀 首次部署(一次性)

TEXT复制

① 安装 PHP8 + 开启 curl 扩展
        ↓
② 上传文件,访问首页,初始化数据库
        ↓
③ 登录后台 → 「🎯 目标检测」看格式校验
        ↓
④ 登录后台 → 「🔍 可达性探测」填入真实域名 → 开始探测
        ↓
⑤ 探测结果缓存到 data/targets_status.json
        ↓
⑥ 返回首页正常使用工具

📅 日常推广

  1. 打开首页,输入域名(支持批量)

  2. 选择协议(https/http)

  3. 点击「🚀 开始推广」

  4. 观察实时日志:

    • ⚠️ 已跳过 N 个格式无效目标

    • 🚫 已跳过 N 个探测失败目标

    • ✓ 站点名 — 已提交 (1234ms)

    • ⏱ 站点名 — 超时

    • ✗ 站点名 — 失败

  5. 完成时统计:共提交 X 个站点 —— 加载成功 Y,超时 Z,失败 W,跳过 N

🔧 维护更新

场景

操作

修改了 targets.php

重新运行一次「🔍 可达性探测」

想重新探测所有站点

删除 data/targets_status.json 后重新探测

某站点临时失效

隔 24 小时重测,若仍失败则从 targets.php 删除

怀疑某站点内容异常

在探测页点击「测试 URL」手动打开查看


九、文件结构

TEXT复制

├── index.php            首页(工具+文章+友链)
├── article.php          文章详情
├── api.php              目标站点接口(JSON,含探测状态)
├── targets.php          91个提交目标站点库
├── lib.php              核心函数/数据库初始化/探测函数
├── admin/               管理后台
│   ├── login.php        登录
│   ├── logout.php       退出
│   ├── index.php        网站设置+改密
│   ├── articles.php     文章列表/删除
│   ├── article_edit.php 发布/编辑文章
│   ├── links.php        友情链接管理
│   ├── targets.php      🎯 目标检测(新增)
│   ├── probe.php        🔍 可达性探测(新增)
│   └── _header.php / _footer.php
├── assets/
│   ├── css/style.css
│   └── js/main.js       前端推广逻辑(三级过滤 + 详细日志)
└── data/
    ├── site.db                  SQLite 数据库(自动创建)
    └── targets_status.json      探测结果缓存(自动创建)

十、常见问题

Q1:探测页面提示"PHP curl 扩展未安装"?

宝塔 → 软件商店 → PHP 8.x → 设置 → 安装扩展 → 勾选 curl → 重启 PHP。

Q2:探测结果全部失败 / 大量超时?

可能原因:

  1. 服务器出口 IP 被目标站封禁 —— 换服务器或加代理

  2. 探测并发太高 —— 打开 lib.php,把 probe_urls_batch($urlMap, 6, 20) 里的 20 改成 5

  3. PHP 超时太短 —— 宝塔 PHP 设置里把 max_execution_time 调到 300

Q3:站点显示"禁止 iframe",但我手动打开是正常的?

说明该站点设置了 X-Frame-Options: SAMEORIGIN只能在自己的域名下被 iframe 嵌套
这类站点无法通过隐藏 iframe 推广(浏览器会拒绝加载),系统会自动跳过。
如果确实想推广这类站点,唯一的替代方案是服务端 cURL 提交(但会暴露服务器 IP,不推荐)。

Q4:探测后,首页显示的站点数变少了?

首页显示的是"格式有效"的站点数,而不是"探测可用"的站点数。
探测可用的数量只在推广时的日志里体现,属于动态过滤。

Q5:探测结果会过期吗?

不会自动过期,会一直用缓存直到你重新探测。
建议每月探测一次,或每次修改 targets.php 后重新探测。

Q6:数据备份怎么做?

只需备份两个文件:

  • data/site.db —— 所有文章、友链、设置、管理员密码

  • targets.php —— 目标站点库

data/targets_status.json 是探测缓存,可随时重新生成,无需备份

Q7:为什么推广日志里有"超时"但状态码是 200?

前端 iframe 的超时判定基于浏览器加载时间(7 秒),
有些站点首屏加载慢、图片多、有 JS 阻塞,可能导致 iframe 超时。
但服务端探测(6 秒超时 + 只读 64KB)通常会通过。
这类站点不算真失效,只是加载慢,可忽略。

Q8:如何添加新的目标站点?

编辑 targets.php,按下面格式追加即可:

PHP复制

["站点名称", "https://example.com/query?q={domain}"],
  • {domain} 会被替换成纯域名(如 example.com

  • {url} 会被替换成完整网址(如 https://example.com

  • 至少要含一个占位符,否则会被格式层自动跳过

  • 添加完记得重新运行「🔍 可达性探测」


十一、说明与免责

提交原理

以隐藏 iframe 向 IP 查询 / SEO 查询 / Whois / 收录 / 安全检测等站点发起请求,
留下查询记录供搜索引擎抓取。整个过程不会弹出任何窗口

关于"成功"的定义

本工具对"成功"的判定是三层可信度

  1. ✅ URL 模板格式正确(含占位符)

  2. ✅ HTTP 状态码正常(2xx / 3xx)

  3. ✅ 允许 iframe 嵌入

三层全通过才会真正提交。

但由于浏览器跨域限制,无法 100% 保证页面内容正确——
有些站点会用 200 状态码返回"未找到/请登录"页面。
这类情况需要人工抽查(探测页的"测试 URL"列可直接点击打开)。

使用建议

  • 建议每天使用 1~2 次,连续数天效果更佳

  • 使用真实域名做探测,而不是 example.com

  • 定期检查 targets.php 中的站点是否仍然有效

  • 请勿用于任何违规用途,仅适合正规网站的收录推广

免责声明

本工具仅用于技术学习和正规网站的 SEO 推广,
使用者需自行承担因使用本工具产生的一切后果。
请勿用于刷量、作弊、攻击等任何违反法律法规或目标站点服务条款的用途。


版本更新日志

v2.0(本次优化)

新增

  • 🎯 目标检测页面:静态校验 targets.php 占位符格式

  • 🔍 可达性探测页面:cURL 并发实探 HTTP 状态 + iframe 策略

  • 📊 探测结果缓存data/targets_status.json

  • 🔎 HTTP 状态码判定:2xx/3xx 通过,4xx/5xx/0 失败

  • 🚫 iframe 嵌入检测:识别 X-Frame-Options / CSP frame-ancestors

  • 📈 三级过滤:格式层 + 可达层 + 嵌入层,逐层过滤

优化

  • 前端日志细分"加载成功 / 超时 / 失败"三类状态

  • 推广完成时显示"跳过无效目标 N 个"的明确提示

  • 首页站点数改为显示"格式有效"的站点数

修复

  • ❌ 修复"无占位符的站点也提示成功"的假成功问题

  • ❌ 修复"站点已关闭/404 也提示成功"的假成功问题

  • ❌ 修复"禁止 iframe 嵌入也提示成功"的假成功问题

v1.0(初版)

  • 首页工具 + 文章 + 友链

  • 管理后台 + 文章管理 + 友链管理

  • 91 个目标站点库

  • 隐藏 iframe 静默提交


开源协议

MIT License


保留开发者链接及版权,免费获得后续最新版本及站点库支持。 网创小站 https://www.wc88.cn