我使用Curl连接服务器并使用以下函数更新数据。该功能运行良好,可更新约400条记录。之后它会抛出错误,请告知如何解决这个问题?
Fatal error: Uncaught exception with message 'couldn't connect to host' in /var/www/vhosts/abc.com/
comm_Api_Connection->put('https://www.vam...', Object(stdClass)) #2 /var/www/vhosts/abc.com/httpdocs/mysite/demo/comm-common1/Api.php(1530):
comm_Api::updateResource('/products/5250', Array) #3 /var/www/vhosts/abc.com/httpdocs/mysite/demo/sync_prod_inventory_new1.php(1088):
comm_Api::updateProduct('5250', Array) #4 {main} thrown in /var/www/vhosts/abc.com/httpdocs/mysite/demo/comm-common1/Api.php on line 204
PHP函数如下
<?php
public function put($url, $body)
{
$this->addHeader('Content-Type', $this->getContentType());
if (!is_string($body)) {
$body = json_encode($body);
}
$this->initializeRequest();
$handle = tmpfile();
fwrite($handle, $body);
fseek($handle, 0);
curl_setopt($this->curl, CURLOPT_INFILE, $handle);
curl_setopt($this->curl, CURLOPT_INFILESIZE, strlen($body));
curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($this->curl, CURLOPT_URL, $url);
curl_setopt($this->curl, CURLOPT_PUT, true);
curl_exec($this->curl);
return $this->handleResponse();
}
答案 0 :(得分:1)
在紧要关头,我会说你打开了太多与服务器的连接
每次调用该方法时,都会打开一个新请求,但不要关闭它。它将保持打开状态,直到达到超时
如果您的服务器仅允许400个并发连接,则在第400次调用该方法后的任何内容都将失败
您需要在每次请求后关闭您的连接
curl_close($ch)
答案 1 :(得分:1)
我认为你的卷曲需要SSL验证。
请在您的CURL代码
上添加以下内容curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
此行传递“true”是您的请求URL是HTTPS,否则它是“false”。
在你的情况下,我认为这是真的。 请传递true参数并检查它。