月影同学最近给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

是不是很喜欢这种写法呢?若感兴趣,月影的博客上有更多的介绍