Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 刷新页面时,fsockopen并不总是执行mysql查询_Php_Mysql_Fsockopen - Fatal编程技术网

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

Php 刷新页面时,fsockopen并不总是执行mysql查询,php,mysql,fsockopen,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_

服务器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查询,每次都会出现之前输出的任何文本。
感谢您抽出时间

如果您有两个套接字像以前一样相互通信-使用“while(true)”-并且您重新启动了其中一个套接字,那么另一个套接字仍在尝试与第一个实例通信。您需要查找(重新启动的)服务器已断开连接的指示,然后重新打开连接。从本质上讲,对话的一方挂断了电话,但另一方仍在倾听。。如果您有两个套接字像以前一样相互通信(使用“while(true)”,并且您重新启动其中一个套接字,那么另一个套接字仍在尝试与第一个实例通信。您需要查找(重新启动的)服务器已断开连接的指示,然后重新打开连接。从本质上讲,对话的一方挂断了电话,但另一方仍在倾听。。什么都没有。

我认为你需要发布一些srv A和B的示例。我认为你需要发布一些srv A和B的示例。这听起来不错。不过我对这方面还是新手。你建议我怎么做?我不熟悉“fsockopen”、“fgets”等词,但我敢打赌有某种迹象表明对话的一方已经结束了。另外-(刚刚偷看)-“fgets”函数使用第二个参数作为长度。在获得所有值之前,您一直处于阻塞状态。尝试一个较小的值(或1),然后自己构建响应。这会让你知道连接是否关闭。这听起来不错。不过我对这方面还是新手。你建议我怎么做?我不熟悉“fsockopen”、“fgets”等词,但我敢打赌有某种迹象表明对话的一方已经结束了。另外-(刚刚偷看)-“fgets”函数使用第二个参数作为长度。在获得所有值之前,您一直处于阻塞状态。尝试一个较小的值(或1),然后自己构建响应。这会让您知道连接是否已关闭。