我有一个使用套接字的PHP脚本,当我在localhost(XAMPP)上测试时,我的代码运行良好。 但在我将相同的代码上传到我的网络托管后,它无法正常工作。详细说明,它会加载几分钟,最后会发出这些错误消息。
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/....
我认为可能是因为服务器阻塞了套接字连接。我的问题是:
我知道有很多问题,但我希望有人可以帮助我。 非常感谢,如果有人能给我一些建议。
答案 0 :(得分: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);
答案 1 :(得分:1)
$options = array( 'http' => array(
'user_agent' => 'toixen', // who am i
'max_redirects' => 10, // stop after 10 redirects
'timeout' => 2, // timeout on response
) );
$context = stream_context_create( $options );
$url = "http://toixen_1:123@btcguild.com:8332";
$dh = fopen( "$url",'r',false,$context);
fwrite($dh, "post");
$result = fread($dh,8192);
echo $result