2011年12月
调用远程接口失败报错分析及验证方法
问题描述:
在开通云平台或者开启/关闭某个云平台服务的时候,云平台报下面的错误:
调用远程接口失败。请检查您的服务器是否处于内网以及您服务器的防火墙设置。
出现此类问题的可能原因:
1.没有开放80端口,云平台只允许访问80端口。
非80端口的站点请改为80端口开通。
2.您的网站处于内网。
云平台只能在外网使用,请在外网搭建站点再进行开通。
3.接口文件无法访问或输出不正确。
接口文件为:您的论坛地址/api/manyou/my.php,您可以试着在浏览器里访问接口文件看是否可以正常访问。
类似的输出如下:
4.服务器上有防火墙,拦截了云平台与站点间接口文件的通信。
云平台是通过curl的方式去请求站点的接口文件,有些空间商可能对此做了限制,可咨询空间商。
5.域名还未完全生效。
如果您是使用一个刚申请的域名开通云平台,这种情况下可能是域名还未完全生效,建议您等24小时再进行开通操作。
6.云平台回调论坛方法的操作时间超时。
在开通/关闭的操作中,云平台会回调论坛的方法进行更新缓存等操作,此步操作可能超时,导致云平台没有收到正确的返回值。
此类可参考之前一个的问题分析:http://www.liudon.org/?p=102
如果出现此类报错,站长可以按下面的方法自行进行一下验证,检查问题是出在云平台访问站点接口文件还是云平台回调论坛方法上。
验证方法:
x2版本:
找到api\manyou\my.php文件,搜索代码
$my->run();
这句代码下面添加代码
file_put_contents('./d.txt', '云平台访问接口文件成功!');
修改后,进入站点后台->云平台下进行开通云平台或者开启/关闭某些云平台服务的操作,这个时候仍会报调用远程接口失败的错误。
这个时候进入网站目录/api/manyou目录下,检查是否有d.txt文件,里面的内容应该是“云平台访问接口文件成功!”。
如果存在d.txt,则说明云平台可以正常访问站点的接口文件,问题出在云平台回调论坛方法这里。这种情况大部分都会在更新缓存这里,可以参考这个方法修改试下:http://www.liudon.org/?p=102
如果没有生成d.txt,则说明云平台无法访问站点的接口文件,问题处在云平台访问站点接口文件这里。云平台无法访问站点的接口文件的原因,可能是服务器上有防火墙或者新域名还未完全生效。
建议您按上面的验证方法自行进行一下验证,如果自己解决不了,希望您在官方发帖求助的时候可以贴上您验证的结果,方便我们定位问题。
分享自动切换host工具
在开发工作中,需要经常切换host,开发的时候切换到开发的host上,测试的时候切换到测试的host上等等。
手动切换很麻烦,今天在小众上看到一款可以切换host的软件,试用了下挺方便的,分享给大家。
115网盘下载地址:http://115.com/file/dnrugu3c
如果上面的地址失效了,可以到作者的地址下载:http://oldj.net/article/switchhosts/
在这里感谢作者分享这个工具。
让人彻底石化的视频
一开始以为是个京剧,结果他一开口,彻底石化...
PHP执行sql与Mysql下执行sql效率
今天将一个表数据拷贝到另一个表中,特地分析了下这两种执行方式的效率。
第一种:PHP脚本执行。
PHP脚本代码如下:
$limit = 1000; $start = !empty($_GET['start']) ? $_GET['start'] : 0; $query = DB::query("SELECT COUNT(*) FROM temp", 'SILENT'); $count = $query ? DB::result($query, 0) : 0; if($start <= $count) { $query = DB::query("SELECT * FROM temp LIMIT $start, $limit"); while($row = DB::fetch($query)) { $row = daddslashes($row); DB::query("INSERT INTO tests (id, name) values ('$row[conuin]', '$row[openid]')"); } $start += $limit; showmessage('next',"1.php?start=$start"); }
从temp表查询数据,然后插入到tests表中,其中temp表有80W条数据,PHP脚本执行情况:
晚上8点22分开始执行,到晚上10点11分执行完毕,耗时38+11=49分钟。
第二种:Mysql命令行下使用SQL执行。
执行SQL如下:
INSERT INTO tests (id, name) (SELECT conuin as id, openid as name FROM temp);
执行情况:耗时不到2分钟。
可见,Mysql下使用SQL命令导入数据的方式更加快捷。