でのApache、PHP Windowsのこの単純なコードを検討します。Windows XP +のphp5.3.8 + apacheの2.2で奇妙な行動: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;
}
?>
を、私はエラーを取得: 警告:fsockopenの():に接続できませんがonelocalserver.com:25(ターゲットマシンが積極的にそれを拒否したため接続できませんでした)
しかし、ApacheとPHPがインストールされているシステムでは、コマンドプロンプトからPHPを実行すると、ex:c:\ php \ php.exe filename.php(上記のコードはファイル名にあります)、エラーは表示されません!
サーバーonelocalserver.comはポート25でリッスンしています。そこにはSMTPサーバーが実行されています。
アイデア?これは
事前のおかげで異なるIPアドレスを持ついくつかの試行後
マシンにファイアウォールソフトウェアがインストールされていますか? 'php.exe'のように私に聞こえるのは発信接続を許可され、' httpd.exe'はそうではありません。あなたのファイアウォールソフトウェアを一時的に無効にして、それがうまくいけば 'httpd.exe'を例外リストに追加してください。 'ターゲットマシンは積極的にそれを拒否しました'は、 'SYN'に応答してTCP RSTパケットが受信されていることを示唆しているので、[Wireshark](http://wireshark.org/)を出して、 。 – DaveRandom
Wiresharkのヒントをありがとう。私はそれを実行し、私はPHPでコマンドラインインターフェイスを使用すると、私は要求が通過したことを確認します。しかし、私がブラウザ上でファイルを実行すると、wiresharkはfsockopenで使用したIPアドレスのエントリも登録しませんでした。私はfsockopenコマンドでホスト名を正しいIPアドレスに置き換えました!奇妙な! ITスタッフはファイアウォールが動作していないと主張しています。私は、マイクロソフトのファイアウォールサービスが実行されているのを見て、同じ結果で停止しました!どのようなアイデアをしてください? – Rajan
Apacheで試したときにWSで何も表示されない場合、パケットがネットワークに渡される前にパケットをブロックする何らかの種類のパケットフィルタがあります。 Windowsファイアウォールサーバーには、アウトバウンドトラフィックをフィルタリングするための機能(AFAIK)がありません。NortonやMcAfeeのような厄介なソフトウェアのドメインに該当します。これらは通常の疑いがあります。 – DaveRandom