手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:htaccess

关于oauth的几篇文章

本文只是一个收集的链接,关于oauth,可以去看一下wiki百科,对于PHP的oauth支持,可以看一下手册
国内很早就有不少网站支持oauth,只是更多的网站都没有做出此类开放的功能。不过,疯狂的时候来的总是那么突然(这让我想起在单位的年夜饭上,刚吃了一小时,突然副总说了一句,快乐的时光总是短暂的)。国内对Oauth的支持也就突然间的多了起来,可能,最让人记的清楚的还是新浪。但当时关于oauth的文章还不是特别多,只是在QQ开放oauth后,突然间文章就多了很多,理由是,QQ所支持的oauth协议居然是非标的。。。。

好吧,让我们看看其他人是怎么说的:

1、使用QOAuth来进行新浪/腾讯微博验证(一)

2、老王的:基于PECL OAuth打造微博应用

3、android下的:android开发我的新浪微博客户端-OAuth篇(2.1)

4、腾讯微博开放平台的PECL的OAuth封装

5、腾讯微博开放平台练手:微博擂台

6、使用 PECL 的 OAuth 库访问 QQ 微博 API

其中4、5、6都是mikespook写的,他说,QQ 微博的API里有点重要的事情,并列出来了。看例子:

PHP代码
  1. <?php  
  2. include('define.php');  
  3. try {  
  4.     $oauth = new OAuth(OAUTH_KEY, OAUTH_SECRET, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);  
  5.     $oauth->enableDebug();  
  6.     // 很重要!!!在 OAuth 标准里是没有规定 nonce 的长度的,但是 QQ 对 nonce 的长度做了要求——32 字节长。如果不设置一下,会返回 400 错误。我为此纠结了一天。  
  7.     $oauth->setNonce(md5(rand()));  
  8.     // CALLBACK 一定要设置,OAuth 扩展的文档上是没设置的,但是 QQ 这里不设会报错  
  9.     $requestTokenInfo = $oauth->getRequestToken(REQUEST_TOKEN, CALLBACK);  
  10.     $_SESSION['oauth_token_secret'] = $requestTokenInfo['oauth_token_secret'];  
  11.     // header("Location: ……") 亦可  
  12.     echo "<p><a href='" . AUTHORIZE . "?oauth_token=" . $requestTokenInfo['oauth_token'] . "'>authorize</a></p>";  
  13. } catch (OAuthException $e) {  
  14.     var_dump($e);  
  15. }  
  16.   
  17. callback.php  
  18.   
  19. <?php  
  20. include('define.php');  
  21. try {  
  22.     $oauth = new OAuth(OAUTH_KEY, OAUTH_SECRET, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI);  
  23.     $oauth->enableDebug();  
  24.     // 很重要!!!如果不设置一下,会返回 401 错误。  
  25.     $oauth->setNonce(md5(rand()));  
  26.     $oauth->setToken($_GET['oauth_token'], $_SESSION['oauth_token_secret']);  
  27.     $accessTokenInfo = $oauth->getAccessToken(ACCESS_TOKEN, null, $_GET['oauth_verifier']);  
  28.     $_SESSION['access_token'] = $accessTokenInfo['oauth_token'];  
  29.     $_SESSION['access_secret'] = $accessTokenInfo['oauth_token_secret'];  
  30.     header('Location: room.php');  
  31. } catch (OAuthException $e) {  
  32.     var_dump($e);  
  33. }  
7、这是针对新浪微博的OAuth协议分析一

 

8、对新浪微博的OAUTH开发,居然还有一个总结:新浪微博OAuth认证总结

9、又是老王发的牢骚:OAuth那些事儿

好吧,就先列出这么多,真要查出oauth之类的东西,google随便一下就有很多,我贴出来的地址,都是我订阅的一些RSS的地址,也算是做一个集中罢了。

 

Tags: php, qq, sina, oauth, pecl

typecho 文章附件的小BUG

说实话,我不知道这是BUG还是新功能。【最后鉴定是浏览器的一个小BUG,不是typecho的BUG,但对于附件,我还是提出了我个人想法】
在0.8版本中,如果你选择新建一篇文章,同时选择添加一个附件。然后提交表单新增文章,重新打开后,你会发现文章并没有附件。打开数据库,发现文件已经上传,而且ID还在文件ID前面,只是parent_id就是0了。
然后再选择新建一篇文章,这个没有归档的附件就显示在新文章的附件列表里。不管是是否选择插入,反正这个附件已是属于这篇 新文章了。
 
在此,我猜测这应该算是一个BUG,程序开发人员考虑到了附件上传的不可靠性,所以选择了先上传图片,但是其实对于博客来说,文章应该是更重要的。所以,完全是可以等文章写完再上图片。而不是直接就把图片插入数据库,然后在更新的时候无法插入(wordpress对于未归档的图片,都可以通过插入媒体来进行重插入,而typecho没有插入媒体这个选项,因此,图片就处于永远无法插入的情况了)。
 
当然,这只是纯理论研究(通过查看数据库ID的顺序得知),真相需要查看代码方可了解。

------鉴定----
说明:上述过程在Firefox下产生(开启flash block情况,将本地路径加入whitelist后一切恢复正常),IE下一切正常。搜狗浏览器选择高速模式无法登录(兼容模式方可登录,不过兼容模式就是IE核心,因此未做测试)
 
因此最终结论为:程序插入附件的流程操作一切正常,只是偶尔在一些插件启用时造成未知错误而已。出现我这种情况,应该是flash的关系,是它没有返回正确值,导致表单在提交时,调用$this->attach($cid)方法时没有获取到附件情况。而新建文章的时候,对于parent为0的附件,好象程序会强制插入新文章,这一点不敢芶同。
在file_upload.php中就是这样写的:
PHP代码
  1. if ($cid) {  
  2.     Typecho_Widget::widget('Widget_Contents_Attachment_Related''parentId=' . $cid)->to($attachment);  
  3. else {  
  4.     Typecho_Widget::widget('Widget_Contents_Attachment_Unattached')->to($attachment);  
  5. }  
我还是觉得这种事情应该交由用户处理,而不是在新建文章的时候被强制插入。这种情况如果出现在多人协作的时候就会让人受不了了吧?因为他在执行Unattached的execute方法时,where条件中并没有userid。所以A上传的图片,极有可能会被B强制使用。(虽然机率不大,但,难保会出现这种情况。)

Tags: typecho, bug, 文章, attachment

Got error 28 from storage engine 解决方法

今天一大早,把我的数据都tar了一遍,结果。。。mysql数据库就出现了“Got error 28 from storage engine”错误,去google搜索了一下,发现问题这样解决;
1、

XML/HTML代码
  1. 磁盘临时空间不够导致。  
  2. 解决办法:  
  3. 清空/tmp目录,或者修改my.cnf中的tmpdir参数,指向具有足够空间目录  

2、

XML/HTML代码
  1. mysql报以下错的解决方法  
  2. ERROR 1030 (HY000): Got error 28 from storage engine  
  3.   
  4. 出现此问题的原因:临时空间不够,无法执行此SQL语句  
  5. 解决方法:将tmpdir指向一个硬盘空间很大的目录即可  

当然两个说法都是一样。所以基本肯定是空间没有了。去其他磁盘看了一下,果然。。
郁闷了一下,把备份文件先删除了就正常了。
两个技巧来自:http://www.aslibra.com/blog/read.php/794.htm,感谢这个google搜索的头条帮我解决了这个问题