用curl 代替file_get_contents 解决自动获取微博、QQ头像超时的问题
前段时间有人反映说新用户用QQ或微博登录后,在点设置名字后就不动的现象。原因是获取第三方头像时延时或超时,当时只让用户测试 file_get_contents 能否取到头像,没给出解决办法,个人主要在SAE 或BAE 上使用,没遇到这个问题,最近尝试在vps 上使用,也遇到了这个问题,特别是国外的vps。
用curl 代替file_get_contents 的原因是curl 性能比较好,但可能要额外安装(如果你的服务器没有这个模块)。
在phpinfo() 上看有没有curl 的信息,若没有则先安装,ubuntu 下可使用下面命令安装。
sudo apt-get install php5-curl
参考 http://php.net/manual/en/curl.installation.php
参考 http://stackoverflow.com/questions/8540800/php-how-can-use-curl-instead-file-get-contents
稍完善一下得到下面的函数:
function curl_file_get_contents($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
把上面的函数放到/common.php 里,再修改/qqsetname.php 和 /wbsetname.php
屏蔽这一句
//$context = stream_context_create($opts);
把
//$avatardata = file_get_contents($imgurl, false, $context);
改为
$avatardata = curl_file_get_contents($imgurl);
0
See Also
- 新浪云商店自动安装的是什么版本,怎么没有qq和微博登陆功能?
- 同步文章至qq空间和新浪微博
- go 版本 sitemap以及qq微博登录。
- 新浪微博登录可以 QQ登录qqsetname出现403
- 如果我的用户没有qq账号或者微博账号,就不能登录了是吗?
Nearby
- 上一篇 › 想在内容页上加个分享
- 下一篇 › 无意中发现一个和youbbs差不多的但是看起来很牛逼的网站
别人做过的关于curl和file_get_contents的测试:
file_get_contents抓取google.com需用秒数:
@ego008
bae可以直接改代码使用么?
1.6版本
@天晨 最好的办法是先备份,修改后试一下。
@admin
在bae用1.6版,用QQ登陆,然后就会出现设置名称页面,但是页面是空白,什么都没有?怎么回事?
@天晨 这个不知道问题出在哪里,你测试一下,看代码可实行到哪里。
@admin
这个怎么看代码实行到哪了啊?
@admin @ego008
就执行到设置名字那里,就空白了
@天晨
用
exit("here n");
来跟踪。
@admin
执行qqsetname文件?
@admin
执行qqsetname到最下边,都能执行
@天晨 那可能是/templates/default/qqsetname.php 的问题,看看这个文件能实行到哪里。
@admin
直接打开的话http://www.xxx.com/templates/default/qqsetname.php 出现404页面
直接用手机登陆主页点击QQ登陆,把exit("here n");放到templates/default/qqsetname.php,没反应
@天晨 看 qqsetname.php 最后几行
$pagefile = ROOT . '/templates/default/'.$tpl.'setname.php';
是 templates/default/setname.php
不是 templates/default/qqsetname.php
别搞错了
@jat001
1.6版本电脑版登陆正常,就是手机版不能登陆,刚在你的博客请教,你回复说没有手机QQ登陆模板,能告诉我怎么添加么?
@天晨 看我第二个回复,有模板,名字错了。把 templates/default/ios_qqsetname.php 改成 ios_setname.php 就行。
太谢谢了。@jat001
搞了两天了。。。终于搞好了。
@jat001 @admin
http://t3.qpic.cn/mblogpic/493aaec33c015133a292/2000
这个怎么解决?
@jat001 @admin @ego008
如何实现让本论坛系统支持在APP内置浏览器访问,传图功能?
@天晨 目前使用的是http post form 来上传图片,有些设备不支持也没法了,如苹果。
若支持的要上传图片就切换到桌面版。要么是自己添加那个上传代码。
@admin代码我已经添加,但是,除了苹果 ,安卓的部分机型也不可以。。。