PHP fsockopen失去连接

问题描述 投票:1回答:1

我需要使用soap请求来检索大量的远程数据(检索大约12000个送货订单,并为每个单独的订单发出请求)。在我的测试服务器上(使用Xampp的windows),它工作得很好,大约需要一个小时左右。把这些脚本放在生产服务器(Linux)上,大约10分钟后连接就会丢失(有变化)。

我试着把头从 "Connection: 关闭 "到 "连接。Keep-Alive",但由于某种原因,这使得检索每条记录的速度很慢--比如每分钟只能检索3条记录,而不是170条记录。注意确定是因为fputs还是fgets-loop的原因。

有谁能告诉我如何强制连接在给定的时间内是活的?

基本上我的脚本是这样的。

if (!is_resource($fp))
{
    $fp = @fsockopen($host, $port, $errno, $errstr);
    if (!$fp) { echo "soap_parser error message is: $errstr ($errno)<br />\n";exit;}
    stream_set_timeout($fp,3600);//one hour
}

$soap_out  = "POST " . $path . " HTTP/1.1\r\n";
$soap_out .= "Host: " . $hostname . "\r\n";
$soap_out .= "User-Agent: MYSOAPREQUEST \r\n";
$soap_out .= "Content-Type: text/xml;charset=UTF-8;\r\n";
$soap_out .= "Content-Length: ".strlen($xml_request)."\r\n";
$soap_out .= "Connection: Close\r\n"; 
$soap_out .= "Cache-Control: no-cache\r\n";
$soap_out .= "SOAPAction: ".$soap_action."\r\n\r\n"; 
$soap_out .= $xml_request;

fputs($fp, $soap_out); //send request SOAP
$soap_in = "";

while (!feof($fp)) 
{
       $soap_in .= fgets($this->fp, 512);
}

return $soap_in;
php fsockopen
1个回答
0
投票

现在已经解决了;使用stream_socket_client()代替fsockopen()似乎可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.