我需要一些关于fsockopen函数的帮助

时间:2011-11-24 01:15:41

标签: php authentication fsockopen

我需要fsockopen函数的一些帮助。

我有这个PHP代码:

if (in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554,47830,50070))
    || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 1))

如果不请求身份验证,我需要通过端口80检查IP fsockopen

我想我应该在某处使用isset($_SERVER['PHP_AUTH_USER']),但我不能自己做。有人可以帮忙吗?

更新...........................

@ drew010非常感谢

我最诚挚的问候

1 个答案:

答案 0 :(得分:0)

要查看远程服务器是否请求身份验证,您需要发出请求并阅读响应。

如果响应是401 Authorization Required,那么它正在请求auth,否则它不是。

if (in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554,47830,50070)) {
    $fp = @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 1);

    if ($fp) {
        $url = "/";

        fputs($fp, "GET $url HTTP/1.1\r\nHost: {$_SERVER['REMOTE_ADDR']}\r\nConnection: close\r\n\r\n");
        $resp = '';

        while(!feof($fp)) {
            $resp .= fgets($fp, 1024);
        }

        if (preg_match('/^http\/1\.\d+ 401/i', $resp)) {
            echo "Requires authentication";
        } else {
            echo "No auth required.";
        }
    } else {
        echo "Failed to connect on port 80, reason: $errstr";
    }
}