在CURL和PHP Geocoder

时间:2015-07-17 09:38:41

标签: php curl

我有一个循环脚本,我在其中执行PHP地理编码器功能。 循环有超过1000次迭代,整个过程需要一些时间。 这是我的剧本:

for ($x = 0; $x < 1000; $x++) { 

////////////////////////////////////////////////////
// GECODE THE ADRESS AND GET THE COORDS
$curl     = new \Ivory\HttpAdapter\CurlHttpAdapter();

$geocoder = new \Geocoder\Provider\BingMaps($curl,$bingApikey);
//$geocoder = new \Geocoder\Provider\MapQuest($curl,$mapQuestApikey);
//$geocoder = new \Geocoder\Provider\ArcGISOnline($curl);
//$geocoder = new \Geocoder\Provider\OpenStreetMap($curl);


$result =  $geocoder->geocode($matchesAdressRightValues[$x][0]);

if (count($result)==0 || count($result)>1 ){
    $bingSucUn = 'not_success'; 
    array_push($arraySucUnsucBing,$bingSucUn);
}   
else {
    //echo ('result');
    //echo (count($result));
    //echo ('Endresult');
    $bingSucUn = 'success'; 
    array_push($arraySucUnsucBing,$bingSucUn);
}
//var_dump($result);
////////////////////////////////////////////////////
}  // end for

问题是我收到错误:

(&quot;Connection timed out after 10000 milliseconds&quot;).

如何增加限额? 我在屏幕上添加了这个,但它仅用于PHP而不是卷曲请求:

set_time_limit(0); 

通常,如果我使用的是纯CURL而没有集成在PHP Geocoder中,那么我会做类似的事情:

$ch = curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT,1000);

但我现在该怎么办?

4 个答案:

答案 0 :(得分:4)

声明

我是通过阅读文档来构建的,我没有安装软件包,也无法对其进行测试。

在ivory-http-adapter

中设置超时

官方方式,来自文档:

  
    

$配置 - &GT; setTimeout的(30);

  
     

https://github.com/egeloen/ivory-http-adapter/blob/master/doc/configuration.md

代码

// new curl
$curl = new \Ivory\HttpAdapter\CurlHttpAdapter();

// get curl config
$conf = $curl->getConfiguration();

// set timeout
$conf->setTimeout(30);

// save config
$curl->setConfiguration($conf);

短版

// curl + timeout (quick version)
$curl = new \Ivory\HttpAdapter\CurlHttpAdapter();
$curl->setConfiguration($curl->getConfiguration()->setTimeout(30));

答案 1 :(得分:1)

我设法通过查找包含CurlHttpAdapter的php文件来更改CURL TIMEOUT选项。此文件的路径(在GEOCODER PHP安装中)是:

vendor\egeloen\http-adapter\src

我评论了这两行:

//$this->configureTimeout($curl, 'CURLOPT_TIMEOUT');
//$this->configureTimeout($curl, 'CURLOPT_CONNECTTIMEOUT');

并添加了这一行:

curl_setopt($curl, CURLOPT_TIMEOUT,0);

解决了这个问题..

答案 2 :(得分:1)

我猜你正在尝试做一项繁重的任务(或许多轻松的任务)。最好在Web请求的异步调用中执行此操作,直接从操作系统调用脚本。此任务也可能由于外部问题而失败,您需要连接到地理编码器服务。

我会从 cron task 将结果记录到与Web应用程序共享的数据库中运行。这样,应用程序可以检查任务执行的方式并获得结果。请注意,此任务可能会失败,问题不是超时(这只是问题的信使!)超时会告诉您出现问题,你需要在其他地方找到这个东西:服务器网络连接,你的主机,你请求的主机,你正在使用的库等。

所以你必须采取不同的方法。祝你好运!

答案 3 :(得分:1)

我有类似的错误,这是由于代理设置。我通过以下方式设置了代理:

Sys.setenv(https_proxy="http://proxy:8000")

后来我可以下载了。