考慮這個簡單的代碼:怪異的行爲:Apache的PHP的Windows用的fsockopen
<?php
error_reporting(E_ALL);
//error_reporting(E_STRICT);
date_default_timezone_set('Asia/Calcutta');
$smtp_server = fsockopen("onelocalserver.com", 25, $errno, $errstr, 120);
if(!$smtp_server)
{
// We have an error, do something
echo " Error found! <br>$errno <br>$errstr";
exit;
}
?>
在Windows XP + php5.3.8 + Apache 2.2的,我得到一個錯誤: 警告:的fsockopen():無法連接到onelocalserver.com:25(無法建立連接,因爲目標機器主動拒絕它)
但是,在安裝了Apache和PHP的系統上,如果我從命令提示符運行php:ex:c:\ php \ php.exe filename.php(上面的代碼在文件名中),那麼我不會得到錯誤!
服務器onelocalserver.com正在監聽端口25:有一個SMTP服務器在那裏運行。
任何想法?這真是
的bizzare在此先感謝
機器上是否安裝有防火牆軟件?聽起來像'php.exe'可以做出傳出連接,'httpd.exe'則不可以。嘗試暫時禁用防火牆軟件,如果它可以正常工作,請將「httpd.exe」添加到它的例外列表中。 '目標機器主動拒絕它'表明TCP'RST'數據包正在接收以響應'SYN',因此請[Wireshark](http://wireshark.org/)並確認是否是這種情況。 – DaveRandom 2012-04-18 11:21:32
感謝Wireshark上的提示。我運行它,當我在php上使用命令行界面時,我發現請求已經通過。但是當我通過瀏覽器執行文件時,wireshark甚至沒有註冊任何我使用fsockopen的IP地址的條目!我在fsockopen命令中用正確的IP地址替換了主機名!奇怪的! IT人士聲稱沒有防火牆正在運行。我看到一個微軟防火牆服務正在運行,也停止了它,結果也是一樣!有什麼想法嗎? – Rajan 2012-04-18 12:42:27
如果在WS中嘗試通過Apache時什麼都看不到,那麼肯定會有某種數據包過濾器在數據包被允許傳遞到網絡之前阻止數據包。 Windows防火牆服務器沒有用於過濾出站流量的功能(AFAIK),屬於Norton和McAfee等煩人的軟件領域 - 這些都是常見的嫌疑犯,對系統上的任何痕跡都有很好的關注。 – DaveRandom 2012-04-18 12:50:26