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

又拍云的Yii组件

这个只是基于又拍云上面的一个小小的扩展,也是作了一个封装。
因为又拍云每次操作bucket都需要为它设置用户名和密码。如果我在一个controller里多次操作不同的bucket,有点麻烦 ,于是就做了一个小封装。
使用起来很简单,在配置文件main.php的components中加入一小段:

XML/HTML代码
  1. 'components'=>array(  
  2.     'upyun'=>'ext.upyun.EasyUpyun',  
  3. ),  

当然,如果有需要额外定制的变量,也可以参考其他组件的设置方法。

附件在这里,我就不多说了,贴上组件的注释:

PHP代码
  1. /** 
  2.  * EasyUpyun.php 
  3.  * @example: 
  4.  *  Yii::app()->upyun->upload($domain,$savedname,$datas,$autoCreateDir=true); 
  5.  *  这个是一个demo,推荐仍然使用upyun提供的API,这样就可以几乎不用改代码 
  6.  *  UpyunBase的用法是$upyun->setApiDomain('abc'); 
  7.  *  组件用法:Yii::app()->upyun->setApiDomain('bucket的别名','abc'); 
  8.  * 
  9.  * @category upyun 
  10.  * @package  upyun 
  11.  * @author   gouki <gouki.xiao@gmail.com> 
  12.  * @version  $Id$ 
  13.  * @created  12-7-6 PM11:07 
  14.  */  

再贴上变量的注释

PHP代码
  1. /** 
  2.  * 别名 
  3.  * 因为又拍云的bucket的名字比较长,在开发的时候,如果用很长的bucket会很痛苦,因此就做了一个别名功能用来代替bucket 
  4.  * @var array 
  5.  */  
  6. public $alias = array(  
  7.     'static' => 'test-public'  
  8. );  
  9. /** 
  10.  * 又拍云的bucket 
  11.  * key 为 bucket 
  12.  * value 为 bucket对应的用户名和密码,格式为“用户名:密码” 
  13.  * @var array 
  14.  */  
  15. public $bucket = array(  
  16.     'test-public' => 'admin:123456'  
  17. );  
  18. /** 
  19.  * 又拍云API实例 
  20.  * @var UpYun 
  21.  */  
  22. public $upyun;  
  23. /** 
  24.  * 是否采用upyun的debug功能,该功能为全局打开,一旦开启,所有bucket涉及的debug都开启 
  25.  * @var bool 
  26.  */  
  27. public $debug = FALSE;  

Over,有想试用的,可以直接尝试下载附件。

附件: upyun.zip (5.59 K, 下载次数:1992)

Tags: yii, 又拍云, 组件

苦逼的程序员要做的事情

作為一名苦逼的程序員,他要做什麼?(這張圖來自互聯網:http://www.kuqin.com/upimg/allimg/120127/2003294U9-1.png)

大小: 139.06 K
尺寸: 441 x 376
浏览: 1727 次
点击打开新窗口浏览全图

正因為程序員十分苦逼,所以最近就在研究一些關於薪資的事情,發現果然很多人都是這麼理解的。
看看人家:http://www.iheima.com/html/2012/cyjy_0412/554.html
192萬就實現了N多目標,羨慕嫉妒恨啊。

Tags: 程序员

一周回顾

因為本次一周回顧與PHP相關較多,所以就扔在PHP分類裏了

1、yii DB cache,我這個Cache是指在查詢的時候,指定一個Dependceny,可以提高查詢效率,當沒有更新的數據時,就不會查詢數據庫了。在數據量低於10W的庫時,效率很高。但是數據庫的數據超過100萬時,再加上查詢的條件又是帶了id IN (xxx,xxx,xxx)。結果效率並不是特別高。
    準備換個方法做緩存

2、本周將以前的API進行了處理。原來為了趕速度,只要是接口就按照ifelse往下寫了。現在發現效率不高,所以又準備重新寫。但為了防止以前的接口不兼容。於是乎這次重寫除了提高效率,還得兼容舊數據。苦。。。所幸都解決了。
    正是以前想的,如果你代碼都沒有寫出來,你根本 就沒有機會去優化它,不是嗎?你想的再多,再精妙,如果寫不出。你拿什麼來優化?

其他沒有什麼大事。不過就一些小事。紀錄一下而已

hprose使用中的一個問題

什麼是hprose?這個我不想多說了,只想說它之前的版本叫phprpc,這是它的更新版,功能更強大。
官方地址是http://www.hprose.com。
以前用用都還行,結果就昨天在使用的時候發現,調用同樣的接口時,服務器返回502錯誤。但有時候確實是正常的。
仔細查看了一下,好象是返回的數據過大,於是我使用serialize將數組序列化後,用strlen查看了一下長度,發現長度在99999左右(這個數字當然是不對的,但大小差不多),最多也就99K嘍。但正因為這樣會出錯。於是我一點一點試
我在遠程的函數裏str_repeat("0",1111),一直嘗試,發現當數字在7000多時,就返回502了。因為是采用了php-fpm方式,所以我在本地的apache服務器上做了個測試,發現大約是在9000多字節。鬱悶。
問了一下andot,他說可能是服務器的設置也問題,也可能正好是一個BUG。但短時間內沒有時間測試了。

鬱悶

 

-----

时隔多日,这个BUG已经在一年前就解决了。只是我没有更新。andot居然来回复了一下,我想,我还是更新掉本文吧。

Tags: hprose, phprpc, serialize

yiiredis不足之处

Yiiredis是Yii的一个插件。用来方便我们对redis进行操作。封装了一些常用的list,hash之类的操作,对于Cache也做了一个封装,但在方便之余,问题也还是不少。比如说,我们要对数据sort,取出平均值,取出最大值之类的。默认的方法就不能用了。虽然yiiredis的类用了Array的interface,但利用php的操作,总归不如redis自身的操作。

一些参考资料上就写的比较详细:

典型的比如那些在线游戏的排行榜,比如一个Facebook的游戏,根据得分你通常想要:

-列出前100名高分选手

-列出某用户当前的全球排名

这些操作对于Redis来说小菜一碟,即使你有几百万个用户,每分钟都会有几百万个新的得分。

模式是这样的,每次获得新得分时,我们用这样的代码

  1. ZADD leaderboard <score> <username> 

你可能用userID来取代username,这取决于你是怎么设计的。

得到前100名高分用户很简单:ZREVRANGE leaderboard 0 99。

用户的全球排名也相似,只需要:ZRANK leaderboard <username>。

看上去也比较方便,不过我没有仔细看究竟是因为phpredis的实现有问题还是yiiredis的问题。等晚上睡不着的时候看看伦家的源码先

 

Tags: yiiredis