2011-11-24 71 views
2

我需要fsockopen函數的一點幫助。我需要一個關於fsockopen函數的litle幫助

我有這樣的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進行fsockopen檢查IP地址,如果它不要求身份驗證。

我認爲我應該在那裏使用isset($_SERVER['PHP_AUTH_USER']),但我不能自己做。誰能幫忙?

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

@ drew010非常感謝您

我的問候

+3

如果沒有將這些東西放在實際的if條件中,你會更好。 –

+0

「@」是什麼?不會刪除那給你有價值的信息? – netcoder

回答

0

要查看遠程服務器是否請求認證,您需要提出請求並閱讀響應。

如果響應是401授權要求,那麼它正在請求授權,否則它不是。

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"; 
    } 
} 
+0

非常感謝你你是對的,你是如此接近....請稍等一下,閱讀我的更新 –

+0

不客氣,有沒有一部分工作不正常,或者我能做些什麼來幫助更多? – drew010

+0

是的..請問你是否可以再次檢查我的Q ..我已經爲你更新了..再次感謝 –