刷新页面时,fsockopen并不总是执行mysql查询

时间:2011-12-28 15:49:13

标签: php mysql fsockopen

服务器A使用fsockopen,fwrite和fgets从远程服务器B收集信息。远程服务器B创建mysql查询并提供此信息。当服务器A首次加载时,所有信息(来自远程服务器B)都出现在服务器A上 - 这意味着连接正常。 但是,有时刷新页面时(在服务器A上)没有显示远程服务器B的信息。这是为什么?

服务器A上的代码非常简单:

function test_http_request($path, $host, $test_request, $port=80){
    $test_request_proc= test_encode($test_request);
    //http request  
    $http_request  = "POST $path HTTP/1.0\r\n";
    $http_request .= "Host: $host\r\n";
    $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
    $http_request .= "Content-Length: " . strlen($test_request_proc) . "\r\n";
    $http_request .= "User-Agent: testConnection/PHP\r\n";
    $http_request .= "\r\n";
    $http_request .= $test_request_proc;
    /////output
    $test_resource = '';
    //open socket
    if(false == ($test_connect =@fsockopen('[remote server Bs IP ]', $port, $errno, $errstr, 10))){die('could not open test connection');}
    //send http_request 
    fwrite($test_connect, $http_request);
    //get response 
    while(!feof($test_connect))$test_resource .= fgets($test_connect, 1160);
    //close socket 
    fclose($test_connect);

    $test_resource = explode("\r\n\r\n", $test_resource, 2);
    return $test_resource;
}

根据远程服务器B的错误日志,未执行mysql查询(执行以向服务器A提供信息)(资源是布尔值)。有时他们会被执行,有时他们没有被执行。问题不在查询语言中,因为它在远程服务器B上请求和执行查询时工作正常。只有当服务器A通过fsockopen()请求信息时才会出现问题。 注意:问题仅在于远程服务器B执行的mysql查询,每次都会出现之前输出的任何文本。 谢谢你的时间

1 个答案:

答案 0 :(得分:0)

如果你有两个插座就像你一样互相交谈 - 用“while(true)” - 你重启其中一个,另一个仍在尝试与第一个实例通信。您需要查找(重新启动)服务器已断开连接的一些指示并重新打开连接。基本上谈话的一方已经挂了,但另一方仍然在听......什么都没有。