介绍两个强大的kohana插件
月影同学最近给kohana写了两个强大的插件,:jkit(JKit 是基于 Kohana 3.2 版本基础上开发的框架级插件)和kohana-python(可直接在php中无缝使用python中滴Class)。给感兴趣的同学演示下使用。
示例是一个上传图片到upyun的脚本
file:controller/a.php(用来接收和返回的客户端接口)
class Controller_A extends Controller {
function before(){
parent::before();
$this->img = new Model_Logic_Imgs;
}
/*更新图片*/
public function action_edit_img(){
try {
$upedFile = $this->img->edit_img($this->request->param());
} catch(Exception $e){
$this->err(null, $e->getMessage());
return;
}
$this->ok($upedFile);
}
}
file:logic/imgs.php(用来处理图片logic)
class Model_Logic_Imgs extends Logic{
/*更新图片信息*/
public function edit_img($data){
if (!$data['pid']){
throw new Exception('没有指定图片id');
return;
}
$upedFile = $this->up_img($data['sourceurl']);
if(!$upedFile){
throw new Exception('图片上传到upyun未成功');
}
/*其他图片信息数据库信息更新等*/
JKit::$log->info($objDb->last_query, $arrRes);
return $upedFile['url'];
}
/**
*更无缝的调用python Class,
*这样在controller或logic如有需要用到python中的Class只需要new一个Logic Class
**/
function __call($func, $args){
$img_py_logic = new Model_Pylogic_Imgs;
return call_user_func_array(array($img_py_logic, $func), $args);
}
}
file:pylogic/imgs.py(需要用到的图片处理相关python)
import sys, os, MySQLdb, time, urllib, re, Image
import md5 as imd5
from upyun import UpYun
TMPFILE_DIR = '/tmp/weizoo-img-tmp/'
UPCONFIG = {
'bucket' : 'some-img',
'username' : 'ivershuo',
'password' : '******'
}
def md5(src):
m1 = imd5.new()
m1.update(src)
dest1 = m1.hexdigest()
return dest1
class Model_Pylogic_Imgs:
def __init__(self) :
self.conn = MySQLdb.connect(DBCONGIF['host'], DBCONGIF['user'], DBCONGIF['passwd'], DBCONGIF['dbname'])
def up_img(self, sourceurl) :
u = UpYun(UPCONFIG['bucket'], UPCONFIG['username'], UPCONFIG['password'])
#按星期建立目录
_dir = time.strftime('%y%U', time.localtime(time.time()))
#获取文件后缀
_r = re.compile('\.\w+$')
filetype = _r.search(sourceurl).group()
#下载到本地文件
localfile = TMPFILE_DIR + str(int(time.time())) + filetype
if not u.mkDir(_dir) :
return False
#img_file = urllib.urlopen(sourceurl, 'rb')
os.popen('wget "' + sourceurl + '" -q -O ' + localfile)
img_file = open(localfile, 'rb')
bfile = img_file.read()
#源文件md5之后取前16位作为文件名
filename = md5(bfile)[0:16]
#上传到upyun文件
upfile = _dir + '/' + filename + filetype
if not u.writeFile(upfile, bfile) :
return False
#获取图片平均色,by:@jerryqu
rgb = self.rbg_img(localfile)
ret_data = {'url':upfile,'rgb':rgb}
os.remove(localfile)
return ret_data
是不是很喜欢这种写法呢?若感兴趣,月影的博客上有更多的介绍