我有一个循环脚本,我在其中执行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
问题是我收到错误:
("Connection timed out after 10000 milliseconds").
如何增加限额? 我在屏幕上添加了这个,但它仅用于PHP而不是卷曲请求:
set_time_limit(0);
通常,如果我使用的是纯CURL而没有集成在PHP Geocoder中,那么我会做类似的事情:
$ch = curl_init();
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
但我现在该怎么办?
答案 0 :(得分:4)
我是通过阅读文档来构建的,我没有安装软件包,也无法对其进行测试。
官方方式,来自文档:
$配置 - &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")
后来我可以下载了。