Zend_Auth部分代码示例

protected $_auth;
    protected $_userId;
    protected $_userName;

    public function init()
    {
        $this->_auth = Zend_Auth::getInstance()
             ->setStorage(new Zend_Auth_Storage_Session(‘authNameSpace’);
    }

    public function indexAction()
    {
        if ($this->_auth->hasIdentity()) {
                $this->_userId = this->_auth->getStorage()->read()->USER_ID;
                $this->_userName = $this->_auth->getStorage()->read()->USER_NAME;
            echo ‘登陆成功’;
        } else {
            $this->_forward(‘login’);
        }
    }

    protected function _logout()
    {
        $this->_auth->clearIdentity();
        Zend_Session::forgetMe();
    }

    public function loginAction()
    {
        if ($this->isPost()) {
            $f = new Zend_Filter_StripTags();
            $username = $f->filter($this->getPost(‘username’));
            $password = $f->filter($this->getPost(‘password’));

            //建立认证适配器 (DB适配器名/表名/用户名字段/密码字段)
            $authAdapter = new Zend_Auth_Adapter_DbTable($this->_db);
            $authAdapter->setTableName(‘USER’)
                        ->setIdentityColumn(‘USER_NAME’)
                        ->setCredentialColumn(‘USER_PASSWORD’)
                        ->setIdentity($username)
                        ->setCredential(md5($password));
            $result = $this->_auth->authenticate($authAdapter);

            //建立持久连接
            if ($result && $result->isValid()) {
                if ($this->getPost(‘rememberMe’)) { //记住密码
                    Zend_Session::rememberMe(‘315360000′);
                } else {
                    Zend_Session::forgetMe();
                }
                $this->_auth->getStorage()->write($authAdapter->getResultRowObject(array(‘USER_ID’, ‘USER_NAME’)));
                $this->_forward(‘index’);
            } else {
                echo ‘登陆失败’;
            }
        }
    }

继续FB,070610广州PEA烧烤聚会

恰好这一天是星星的生日,中午和阿标、macoo、frank几个人小聚祝星星生日快乐,然后一帮人去超市买些东西为下午的烧烤做准备。

老天爷很争气,下了好多天雨的广州突然不下雨了。

只可惜最近身边的朋友似乎都不怎么走运,一住深圳布吉的同事家里被盗,损失了近2万多元,最惨的是几年积累下来的代码全都丢失,这个损失是无法估计的。在从深圳去广州的路上,同事macoo居然把钱包弄丢了,损失了500多元还有许多的证件和银行卡,包括身份证… 我只能同情一下了,各位出门在外的朋友也要小心一下。

点击这里查看更多聚会照片…

6月3日大鹏湾游玩

6月3日,公司全体开发人员+股东及家属一起到大鹏湾游玩,天气非常晴朗,非常清爽,海水也非常蓝,上午9点半出发,在一个滨海的小村庄里吃了午饭后就径直前往海滩边上。

由于这里是个半岛,海水也变得非常咸,大家在游泳的时候都被呛到不行。其实大家都拍了不少照片,但是我的由于蓝牙坏了,无法导出手机中的照片,因此照片的数量也比较有限,不过也已经够了。

要查看更多的照片可以点击这里,查看到我的相册


9点半出发,一小时后看到了大海,但这里不是我们的目的地


远远的看到,大海很蓝很蓝,天空很晴朗,这是一个好天气


12点左右终于到达目的地,这里人不是很多。这里相对比较偏僻,人也比较少,查看地图后知道这里是个半岛,比较靠近海中心,因此海水也相对咸很多,大家也都有点不太适应,我也被呛得可以,喝了好多海水

转换WordPress程序,闲谈我的BLOG史

  被BS了一段时间,终于换WordPress了,作为一个PHP程序员一直在使用ASP的博客,大家都有话说,其实是大家不清楚我为什么一直在使用PJBLOG

  我的程序生涯应该可以说是从PJBLOG开始的,那时我还只是网络管理员,每天沉迷在路由、交换、ISA、服务器中。虽然之前也学过一些ASP和PHP,但都是很入门的级别。

  刚开始使用的第一个BLOG程序是L-Blog,使用一段时间发现PJBLOG,感觉是一个很不错的BLOG程序,于是开始研究PJBLOG,并且加入了很久以前的PJBLOG开发团队,很多的朋友都不知道有这样一个团队。于是整天漫迹于PJBLOG的论坛、QQ群,认识了诸如虫虫、老鼠、鲸鱼叔叔等等的好朋友,也制作一些BLOG风格、插件,写了些教程,给我的博客也带来了不少的人气,最高的时候曾达到了日IP 1600多,PV达到6000多。最让我感激的则应该是舜子,在这些过程中,他一直是无私奉献的,同时也教会了我不少的东西,在这里对舜子说声“谢谢了”。

  后来由于工作的关系,玩BLOG的时间也少了,经常一个月才2~3篇日志,加我QQ向我请教问题的网友被我大量拒绝,BLOG上的留言回复越来越少,我的BLOG于是变成了一个荒芜之地。去年11份不知为什么Baidu拒绝了对我的BLOG的收录,从那时候开始,人气开始急剧下降,尽管后来重新被Baidu收录,而且网站PR也升到了5,但最高也只达到了日PV3000左右。加上在先前的公司工作太忙,经常加班到晚上2~3点,甚至周未也被工作所霸占,更没有时间更新BLOG,人气越来越低,自己也没有了继续更新BLOG的习惯和兴趣。

  但是对自己的BLOG已经产生了很浓厚的感情,因为通过BLOG,我认识了不少的朋友,放弃BLOG的同时,也将让我放弃不少的好朋友,这是我所不愿意的。只不过这里将来只会成为一个主要以记录个人生活、学习经验为主的BLOG。

  下面记录一些历史:
  2005年3月XX日,开始在博客中国写个人日志
  2005年6月24日,开始由博客中国改为L-Blog,使用 57dtc.com 的域名和空间(这个空间和域名都是朋友的)
  2005年8月19日,升级BLOG程序为PJBLOG,开始了PJBLOG之旅
  2005年8月23日,收到同学心跳的提前生日礼物,tblog.com.cn的域名及空间,开始使用新域名
  2005年9月7日,发布个人第一个BLOG皮肤,之后陆续发布了不少的皮肤
  2005年10月21日,发布PJBLOG皮肤视频教程,虽然现在看来很烂,但是受到了广大网友的支持,BLOG流量开始提高,同时Baidu搜索关键字BLOG排到了第一页
  2005年12月底,辞掉轻松的网络管理员职务,回家闭关修炼ASP、PHP、.Net
  2006年2月12日,开始修改发布第一个PJBLOG的相关程序
  2006年3月18日,开始写第一篇教程,于是带来了空前的人气
  2006年4月15日,闭关结束,前往广州工作,BLOG更新开始减少,但人气不减
  2006年6月底,因为工作太轻松而且受北京读秀网络邀请而辞职,但后又因为一些原因放弃了去北京工作,同时进入广州多迪网络工作,BLOG更新越来越少
  2006年8月,担任多迪网络技术部经理,个人时间越来越少,同时辞去PJBLOG论坛版主,BLOG更新接近停止状态
  2006年10月,加入广州PEA,终于找到了组织并经常参加活动
  2006年11月,Baidu拒绝收录本站,网站流量开始下降
  2007年4月,由于与公司领导发生意见冲突,我连同多个部门经理同时辞职,结束了半年多的加班生活,同时开始成为一个自由职业者,并少量更新BLOG日志
  2007年5月18日,与现任同事Macoo接触后决定前往深圳发展,开始新的职业新的生活,结束自由职业者
  2007年6月,也就是现在了,更换BLOG程序了为WordPress

  我现在的环境还算不错,不用再每天熬夜加班,并且有一大帮有着相同爱好的同事一起工作,一起探讨技术。祝自己工作顺利,我将继续更新BLOG,但我不再把更新BLOG做为自己的责任。

更换开发框架 - - Zend Framework

终于,星星过来带领我们的团队了,心里那个高兴~

前些天,对FleaPHP做了许多的测试,结果在与Oracle的搭配上非常糟糕,刚使用CRUD建立数据库连接时就发现了一个重大的错误,让我对FleaPHP失去了很大的信心。

FleaPHP借鉴了大量的ROR的思想,因此也使得框架本身太过于依赖数据库,但对于Oracle的支持偏偏又太弱。加上FleaPHP本身开发团队人员有限,相信在Oracle的驱动上并没有做过太多的测试,让大家都不太敢信任。

目前FleaPHP的版本为1.0.7.0版,虽然说支持国货,但大家谁也不敢拿公司的项目来开玩笑。如果不是Oracle的原因,FleaPHP的CRUD还是很好用的,希望将来的版本能够把对Oracle的支持处理得更好。

之前放弃Zend Framework换成FleaPHP的主要两个原因:

  • ZF版本没有正式版,不过前些天刚发布了1.0.0 RC1,似乎1.0.0 RC2又快要发布了;
  • ZF版本升级的文件改变太大,今天看RC2版的时候似乎又去掉了几个包,其中就有Zend_Config,不过也惊喜的发现也添加了Zend_Db_Adapter_Oracle,不知道是不是那么回事,全是E英,也没看太明白,感觉改动太大了,网址在这里:http://framework.zend.com/issues/browse/ZF
  • ZF的ACL模块让大家感觉上手似乎很麻烦,而且有太多的文档没有被翻译,大家的英文能力也都有限,不过这次星星过来,这个问题也就解决了,呵~~
  • 还有很多,小问题就不说了…
  • 换ZF也是没有选择的选择了,希望接下来的项目中不会给我们带来太多的麻烦,写到这里,继续看ZF的文档去了

    项目开发环境已确定

    非常高兴的是,星星今天已经从德国归来并第一时间赶到深圳。呵呵,他说德国的农村很不错,我等也只有干瞧着羡慕的份了,听他说异国的风情确实是一件高兴的事情。

    到新的公司,已经快两周了,这些时间一直在做些项目分析和开发环境的确定。

    加上今天星星大神给我们的分析,已经基本上决定抛弃了使用ZF框架和项目模块并行的做法,三个月一个六人的团队完成一个门户网确实是一项极具挑战性的工作。

    可以肯定的一点,在这之前团队中可能没有任何敢打保票完成任务,但今天星星的归来无疑给我们带来了更多的希望。

    他给我们分析的PHP和Oracle的组合,加上目前许多开发框架对Oracle的支持物质,以及可能出现的各种问题,让我突然觉得自己的项目知识还太浅薄了,一番提醒,让整个团队的人都发现了事态的严重性。

    虽然公司股东们决定让我作为项目经理来带动团队,但我始终觉得自己只适合组织文档和项目进度规划这些工作。非常希望星星这次能确定下来,带领我们的团队,这样我们的团队就有希望了,哈哈。

    目前开发环境如下:
    服务器环境:PHP 5.2.2 / Apache 2.5.8 / Windows 2003 (暂定为Windows,因为没有专业的Linux维护人员)
    数据库版本:Oracle 10g
    PHP开发框架:FleaPHP

    之前团队讨论过太多框架的对比,但始终没找到最合适的,FleaPHP算是比较接近需要的一个吧,可惜对Oracle的支持太弱了,需要重新编写扩展。

    团队中包括星星对Oracle的了解也都严重不足,看来大家都得恶补一下Oracle了,幸好有个专业的DBA。

    开发团队也介绍一下吧,哈哈,如果星星加入我们的团队就NB了:
    星星 - - 不用多说了,我目前在广州所过见的PHPer技术最牛的,技术和项目经验都比较全面
    小路 - - 全国PEA组织的首个发起者,技术也是没得说的
    小潘 - - JAVA程序员,非常优秀的DBA
    macoo - - 一个既敬业又内向的PHP程序员,同时也是ROR的狂热爱好者
    aaxron — jQuery中国社区版主,负责前台页面及JS部分,前台页面及WEB标准我们就不用担心了

    最后就是我番茄了,呵呵,最菜菜的一个,加入这样的团队是我的荣幸。

    星星,等你六一的归来,六一快乐~

    淘宝和易趣~

    今天同时收到两封邮件,哈~~淘宝和易趣发过来的内容居然是如此的相同,不知道是谁学谁的。

    [js] 轻便的XMLHttpRequest应用函数:downloadUrl()

    前段时间在用google map api的函数库的时候,发现里面的downloadUrl函数非常好用,所以自己写了一个。用腻了那些什么框架什么池,到头来发现越简单的东西越是适合我这种懒人。

    downloadUrl(url, callback, data);

    参数说明:
    url不用说了;
    callback是回调函数,函数调用的时候会有两个参数:data, responseCode,data就是responseText,responseCode就是status;
    data是要post的数据,get方式时此参数可省略。

    用法一:直接把回调函输写在参数中
    downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, function (data, responseCode) {
    alert(data); // 这里处理返回的数据
    });

    用法二:先定义回调函数,然后传入
    function test(data, responseCode) {
    alert(data); // 这里处理返回的数据
    }

    downloadUrl(’http://www.ugia.cn/wp-data/test.htm’, test);

    源代码:

    /**
     * download url lite
     *
     * @author: legend(
    legendsky@hotmail.com)
     * @link:
    http://www.ugia.cn/?p=122
     * @version: 1.0
     *
     * @param string   url
     * @param string   callback  回调函数
     * @param string  data      post数据
     *
     * @return void
     */

    function downloadUrl(url, callback, data)
    {
        
    // init
        
    url += url.indexOf("?") >= 0 ? "&" : "?";
        
    url += "random_download_url=" + Math.random();
        
    if (typeof data == 'undefined')
        
    {
            
    var data = null;
        
    }
        
    method = data ? 'POST' : 'GET';
        
    // create XMLHttpRequest object
        
    if (window.XMLHttpRequest) {
            
    var objXMLHttpRequest = new XMLHttpRequest();
        
    } else {
            
    var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
            
    for(var n = 0; n < MSXML.length; n ++) {
                
    try {
                    
    var objXMLHttpRequest = new ActiveXObject(MSXML[n]);
                    
    break;
                
    } catch(e) {}
            
    }
        
    }
        
    // send request
        
    with(objXMLHttpRequest) {
            
    //setTimeouts(30*1000,30*1000,30*1000,30*60*1000);
            
    try {
                
    open(method, url, true);
                
    if (method == 'POST')
                    
    setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
                
    send(data);
            
    } catch(e) { alert(e);}
            
    // on ready
            
    onreadystatechange = function() {
                
    if (objXMLHttpRequest.readyState == 4) {
                    
    callback(objXMLHttpRequest.responseText, objXMLHttpRequest.status);
                    
    delete(objXMLHttpRequest);
                
    }
            
    }
        
    }
    }

    新的起点,新的开始~

    今天中午12点半,终于安全到达深圳~

    一路上把我累死了,因为我是从广州一直站到深圳的。从来没有带过这么多行李,虽然上车钱已经处理掉一半的东西,可还是有一大箱,包括电脑、低音炮(比电脑还重)、液显…想不到我居然这么历害,能带这么多东西上路。为了不影响其他乘客,我选择了自己一直站到深圳~~

    还好新同事Macoo到火车站来接我,免了很多麻烦~

    花了几个小时安顿好,下午和公司老板见了个面,一起吃了个饭。想不到老板居然也是如此牛的人,于是对这个项目也信心十足,虽然项目时间很紧,用我自己的话说就是 — 非常有挑战性。

    顺便在自己的BLOG里帮公司招聘一下PHP开发人员,有意者请联系QQ:532136411。

    这里环境很不错,是我喜欢的类型,大家在一栋公寓里,随时工作随时休息。

    今天一过来就认识了jQuery中国社区的版主,真是幸会,我相信自己会在这里过得更好~~

    武鑫生意兴隆,深圳我来了~~

    今天是好友兼同居室友武鑫公司开张的第一天,在这里祝武鑫生意兴隆~~顺便说声对不起了,我不能留下来帮你~~

    今天也是决定前往深圳发展的日子,跟深圳那边已经谈妥,18号就要动身过去深圳工作了。这次过去深圳主要原因有几点:
    一、二哥也被深圳一家公司看中,兄弟俩还是在一起的好,于是我也过去吧;
    二、这次的项目比较有挑战性,完成后应该会比较有成就感;
    三、因为也想去看看那里的一些朋友、同学,和他们一起工作生活是一件快乐的事情。

    大家祝我工作顺利吧~~

    广州多迪,再见了,一个让奋斗也让我伤心的地方,也祝你一路走好~~

    再见了广州的朋友们,我会再回来看你们的,我爱你们~~

    Theme Brought to you by Directory Journal and Elegant Directory