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

PHP目录检测代码中URL HTTP状态码显示为0的修复请求

修复Dirbuster状态码全为0的问题

嘿,我帮你搞定这个状态码全显示0的问题啦!咱们先揪出问题根源,再给你修复好的代码:

问题出在哪?

你的代码里状态码全是0,主要是这几个小细节没处理到位:

  • 换行符搞乱了URL:fgets()读取字典每行时会带上末尾的换行符(\n),拼接后URL变成类似http://example.com/\ndir的无效格式,Curl请求失败就会返回状态码0。
  • 没处理Curl请求失败的情况:如果遇到网络问题、URL格式错误等情况,Curl执行会失败,但原代码没捕获错误,只能看到状态码0,没法排查问题。
  • 重复获取POST参数:循环里每次都重新读取$_POST["thelink"],虽然不影响功能,但有点多余,提前拿到变量里更高效。

修复后的完整代码

<?php
function dirSearch() {
    // 先验证用户输入的URL是否有效
    if (!isset($_POST["thelink"]) || empty($_POST["thelink"])) {
        echo "请输入有效的URL!";
        return;
    }
    
    // 处理URL,确保末尾有且只有一个斜杠
    $baseUrl = rtrim($_POST["thelink"], "/") . "/";
    // 打开字典文件,处理打开失败的情况
    $file = fopen("wordlist1.txt", "r") or exit("无法打开wordlist1.txt文件,请检查路径和权限!");
    
    // 逐行读取字典内容
    while(($extension = fgets($file)) !== false) {
        // 去掉每行的换行符、空格等空白字符,跳过空行
        $extension = trim($extension);
        if (empty($extension)) continue;
        
        // 拼接完整URL
        $url = $baseUrl . $extension;
        $ch = curl_init($url);
        
        // 设置Curl选项
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        // 可选:如果不想自动跟随重定向,取消下面的注释
        // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
        
        // 执行Curl请求
        $output = curl_exec($ch);
        
        // 检查请求是否成功
        if ($output === false) {
            $errorMsg = curl_error($ch);
            echo "$url <b>请求失败</b>:->> <b><u>错误信息:$errorMsg</u></b> <br><br>";
        } else {
            $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            echo "$url <b>Response Code</b>:->> <b><u>$httpcode</u></b> <br><br>";
        }
        
        // 关闭Curl资源
        curl_close($ch);
    }
    
    // 关闭字典文件
    fclose($file);
}

dirSearch();
?>

关键改动说明

  1. URL格式处理:用rtrim()去掉用户输入URL末尾多余的斜杠,再补一个,不管用户有没有加斜杠,都能保证拼接后的URL格式正确。
  2. 清理字典行内容:用trim()去掉每行的换行符、空格,还跳过了空行,避免拼接出无效URL。
  3. 增加错误捕获:检查curl_exec()的返回值,如果请求失败,直接输出Curl的错误信息,方便你排查问题(比如网络不通、URL无效等)。
  4. 优化变量逻辑:把用户输入的URL提前拿到循环外,避免重复读取POST参数,提升代码效率。

额外注意事项

  • 确保你的服务器已经开启了PHP的Curl扩展(可以通过phpinfo()查看)。
  • 确认wordlist1.txt文件的路径正确,并且PHP进程有读取这个文件的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:28