我需要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非常感谢
我最诚挚的问候
答案 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";
}
}