3

ソケットを使用する php スクリプトがあり、ローカルホスト (XAMPP) でテストするとコードがうまく機能します。しかし、同じコードを Web ホスティングにアップロードした後、正しく動作しません。詳細には、数分でロードされ、最終的にこれらのエラーメッセージが表示されます.

Warning: socket_connect() [function.socket-connect]: unable to connect [110]: Connection timed out in /home/....

Warning: socket_send() [function.socket-send]: unable to write to socket [32]: Broken pipe in /home/....

Warning: socket_read() [function.socket-read]: unable to read from socket [107]: Transport endpoint is not connected in /home/....

おそらくサーバーがソケット接続をブロックしているためだと思います。そして私の質問は次のとおりです。

  1. サーバーがブロックしているかどうかを確認するコードを実行できますか? (例: phpinfo() )
  2. 接続できるようにするには、どのサーバー構成に注目する必要がありますか? (.htaccess ファイルにはアクセスできますが、php.ini にはアクセスできません)
  3. SSL はソケット接続に必要ですか?
  4. サーバーの設定が原因でこの問題を最終的に解決できない場合は、別の Web ホスティングが必要です。「プランリスト」のどの機能/キーワードに注意すればよいですか?

かなり多くの質問があることは承知していますが、誰かが私を助けてくれることを願っています. 誰かが私にアドバイスを与えることができれば、とても感謝しています。

4

2 に答える 2

1

これは奇妙です... 私の知る限り、ソケット接続を有効/無効にするための特定の INI ディレクティブは実際にはありません。タイムアウトを設定するディレクティブ (default_socket_timeout) がありますが、何かを変更できるとは思えません。

SSL はソケットとは関係ありません。SSL に依存する可能性のあるプロトコル (HTTP など) を使用している場合を除きます。

サーバーの TCP 構成により、リモート ホストの一部の TCP ポートへのアクセスが妨げられている可能性が高くなります。これは通常、セキュリティとリソースの使用がより厳しい共有ホスティング プランに当てはまります。

おそらく標準ポート (80 など) に接続する方法を見つけた場合、ホスティング プロバイダーに対処する必要があるか、他の場所に移動する必要があるかがわかります :)

ホストで次のコードを実行してみてください。この問題がネットワーク構成に関連しているかどうかを調べるのに役立つ場合があります

//just in case
if (!extension_loaded('sockets')) {
    die('The sockets extension is not loaded.');
}

echo '<p><strong>Establishing connection...</strong></p>';
$socket = socket_create(AF_INET,SOCK_STREAM,0);
if (!socket_connect($socket, "stackoverflow.com", 80))
{
    die('Socket error : '.socket_strerror(socket_last_error()));
}

echo '<p><strong>Connection successful!</strong></p>';

$request = join("\n",array(
    "GET / HTTP/1.1",
    "Connection: close",
    "Host: stackoverflow.com",
    "User-Agent: Mozilla/5.0 (Windows NT 6.1)",
    "Accept: text/html,*/*;q=0.8",
    ""));
socket_write($socket,$request,strlen($request));

$response = socket_read($socket,2048);


echo "<p><strong>This is the received data : </strong></p>";
echo '<pre>'.htmlentities($response).'</pre>';

socket_close($socket);
于 2012-09-16T13:39:25.303 に答える