我学习Kohana的方法

Kohana 是一个PHP的开放框架,所以在学习之前需要深入了解PHP。另外Kohana也是一个遵循MVC模式的开发框架,同样在学习之前还需要深入了解什么是MVC,最好动手写过MVC模式的页面,一个练习也行。

接下来我们从那里开始呢?

在动手练习之前,需要阅读文档。先哲说:闲时读手册,忙时问Google。刚开始我们有充裕的时间,那么开始阅读文档吧。

作为入门,属于Getting Started的文档需要优先阅读。通过阅读What is Kohana?,来了解下Kohana都有哪些东西。而 Model View Controller则告诉你Kohana使用了一种改良型的MVC模式。接下来 Cascading Filesystem 告诉你这个改良型的MVC模式是怎么工作的。最后通过阅读Request Flow来了解从浏览器发出请求后Kohana在服务器端是怎么处理的。okay,通过阅读以上的文档就入门了。

阳明先生说,知是行之始,行是知之果,知行功夫不可离。意思是光看文档并不代表你知道,需要动手操练一番才算真知道。

Kohana安装还是很容易的,将整个工程放到web服务器上就可以工作了。如果遇到问题跑不起来怎么办?Fix it! 安迪教授也说了,当你在工作过程中没有得到想要的东西时你就获得了经验。

程序员动手的第一招是”Hello World”,Kohana已经提供了这一招,所以通过阅读源码来学习这一招是如何发出的,因为Kohana是改良的MVC(也就是HMVC),那么需要多注意项目的目录结构,看看这些源文件是以什么样的方式组织的。在观摩Kohana提供的入门招数后,让我们来破解这个招式。尝试着修改文件名,类名,以及改变文件目录位置等来验证这一招在什么情况下会失效,这对你加深理解有帮助。

入门招数,学了也拆了,开始模拟演练吧。

新手入门第一课,留言板。很多前辈都推荐新手来实现一个留言板用以学习新的开发环境。动手之前,我们要有个蓝图,不用大,将期望了解的知识点囊括进去即可。web开发的知识点通常有,Session,Cookie的管理,数据库的操作,URL的管理,Ajax,表单验证,异常处理等。限定已经有了,那么就开始来实现留言板吧。

演练开始我们就忙了起来,这时Google就发挥作用了,遇到疑难杂症问Google。作为修炼内力,阅读API加深理解各个类是如何工作。

最后,先哲也说了,尽信书不如无书。文档也有bug,当实际操作和文档描述的行为不相符的时候,那么我们就要玩外科手术了。这就是开源的好处,有bug直接解剖,肚皮划开后一目了然!


如何识别手机浏览器信息

想作一个网站,根据不同的访问者提供不同的显示模板,如适合手机的模板,适合PC浏览器的模板。

从哪里识别访问者的信息,以及如何识别呢?

依据 HTTP 协议,客户端浏览网页的时候会提供一些信息给服务器端。下面是PC浏览器访问时的 $_SERVER 的 dump 信息。

(array) Array
(
    [ALL_HTTP] => HTTP_CACHE_CONTROL:max-age=0
HTTP_CONNECTION:keep-alive
HTTP_CONTENT_LENGTH:0
HTTP_ACCEPT:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
HTTP_ACCEPT_CHARSET:ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP_ACCEPT_ENCODING:gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE:en-US,en;q=0.8
HTTP_COOKIE:__utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
HTTP_HOST:www.51xna.com
HTTP_USER_AGENT:Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
 
    [HTTPS] => off
    [SCRIPT_NAME] => /private/Kohana/index.php
    [HTTP_COOKIE] => __utmz=259664206.1262318873.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=51xna; __utma=259664206.724256099.1262318873.1262318873.1262318873.1
    [AUTH_PASSWORD] => 
    [AUTH_TYPE] => 
    [AUTH_USER] => 
    [CONTENT_LENGTH] => 0
    [CONTENT_TYPE] => 
    [PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\mobile\index
    [QUERY_STRING] => 
    [REMOTE_ADDR] => 221.227.130.23
    [REMOTE_HOST] => 221.227.130.23
    [REMOTE_USER] => 
    [REQUEST_METHOD] => GET
    [SERVER_NAME] => www.51xna.com
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SOFTWARE] => Microsoft-IIS/6.0
    [APPL_MD_PATH] => /LM/w3svc/798/ROOT
    [APPL_PHYSICAL_PATH] => g:\wwwroot\51xna.com\wwwroot\
    [INSTANCE_ID] => 798
    [INSTANCE_META_PATH] => /LM/W3SVC/798
    [LOGON_USER] => 
    [REQUEST_URI] => /private/Kohana/index.php/mobile/index
    [URL] => /private/Kohana/index.php/mobile/index
    [SCRIPT_FILENAME] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php
    [ORIG_PATH_INFO] => /private/Kohana/index.php/mobile/index
    [PATH_INFO] => /mobile/index
    [ORIG_PATH_TRANSLATED] => g:\wwwroot\51xna.com\wwwroot\private\Kohana\index.php\mobile\index
    [DOCUMENT_ROOT] => g:\wwwroot\51xna.com\wwwroot
    [PHP_SELF] => /private/Kohana/index.php
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_CONNECTION] => keep-alive
    [HTTP_CONTENT_LENGTH] => 0
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_HOST] => www.51xna.com
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.9 Safari/533.2
    [REQUEST_TIME] => 1271408243
    [argv] => Array
        (
        )
 
    [argc] => 0
)

通常我们可以在HTTP_USER_AGENT中找到识别信息,其中PC浏览器的HTTP_USER_AGENT信息最全,很容易根据关键字来识别如’Chrome’, ‘Firefox’ 等,部分手机浏览器也可以可以通过 ‘Windows Mobile’, ‘Windows Phone’, ‘SymbianOS’, ‘Nokia’, ‘Opera Mobi’, ‘Android’等关键字识别,这里有一个手机HTTP_USER_AGENT识别列表http://www.zytrax.com/tech/web/mobile_ids.html。但是有些手机上的浏览器并不提供HTTP_USER_AGENT信息。

如今的智能手机大多都支持 XHTML 格式浏览,我们可以通过 HTTP_ACCEPT 来识别手机是否支持 XHTML 格式浏览。这里识别的关键字主要是 ‘application/xhtml+xml’。

另外还有一种识别方式,通过查找用户的上网方式,通常手机用户走的是 GPRS 路线,但是这中识别方式并不可靠,可以作为一种辅助识别手段。

对于只支持 WML 的手机目前我还没有解决,一些非智能手机在访问网站时会提示”不支持所访问的网站”。开始我以为是返回信息的问题,当我把返回信息严格按照WML格式输出时问题依然存在。不知道这种手机是通过什么方式访问互联网的。

为所有用户提供不同的定制服务是一件不可能的完成任务,支持大多数就好。完美主义总是很浪费时间。

最后感谢各位提供手机访问信息的童鞋们,让你们忍受在手机上输入如此之长的URL,实在辛苦!


IIS & FastCGI

Blog 自从搬家到 PHP5ISAPI +  IIS + Windows 平台上以来,竟然让服务器宕机多次。查看event log 也没有发现到什么可疑信息。在PHP manual提到以下信息:
If you experience 100% CPU usage after some time, turn off the IIS setting Cache ISAPI Application.

关于这个选项,反复设置可还是出现宕机的情况。看来ISAPI不是那么的可靠。但在IIS上,用什么方式才是PHP的最佳?

FastCGI,Microsoft说这个可以提升PHP在Windows的性能xx倍!稳定性也好!东家这么使劲的鼓吹这玩意,总有一定的道理。实践出真知,先用上再说!

果然,一天下来没再见到Windows宕机。验证的时间是短了点,但是总还是给我带来了欣喜。

参考资料:

配置FastCGI

http://www.pcvc.net/archive/2008/8/26/90.html 中文,简易配置版

http://learn.iis.net/page.aspx/248/configuring-fastcgi-extension-for-iis60/ 官方英文 IIS 6

http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/ 官方英文 IIS 7


FleaPHP 学习笔记 (-)

FleaPHP 上手还算是很容易的,毕竟都是中文的文档。(阅读没有什么限制)
FleaPHP 官方网站对如何安装使用做了大量的工作,只是有些细节问题需要注意一下。下面记录下自己运行第一个controller

下载&安装
我现在的是最新稳定版本 1.0.70.1078
FleaPHP 的安装是很容易的,可以放到web site的任意地方,建议采用官方自带的检测工具来测试当前工作环境。

目录结构 (简述)
FleaPHP 的安装倒是很容易,但是开始写东西的时候就要注意了,目录结构是严格的,并且区分大小写

demo
/App/Controller/Default.php
<?php
class Controller_Default //extends FLEA_Controller_Action 这里好像不需要显式继承
{
function actionIndex() {
echo “controller index”;
}

function actionSayHello() {
echo “say hello fleaPHP”;
}
}
?>

/index.php

<?php
require(‘FLEA/FLEA.php’);
FLEA::import(dirname(__FILE__) . ‘/App’); //这是我们程序的所在地
FLEA::runMVC();
?

/FLEA
FLEA 存放目录

在这里,index.php作为一个控制中心,负责寻找和调用Controller, 如我们调用actionSayHello 那么可以通过URL 这样做
http://localhost/?action=SayHello