Welcome to Bo-Blog.

thinkphp学习阶段

2008/4/10 12:00 admin
     接触了thinkphp一段时间,以前没有学过框架,对mvc的编程不是很熟悉。刚接触thinkphp的时候觉得很抽象,但是你真正的入门了就很爽,越来越会喜欢上它。特别是内面的那种思想,太值得去细细的去回味。
我们先回顾一些基本的概念。

  一,PHP脚本与动态页面。

  PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合,也可以类,函数封装等形式,以模板的方式对用户请求进行处理。无论以何种方式,它的基本原理是这样的。由客户端提出请求,请求某一页面 -----> WEB服务器引入指定相应脚本进行处理 -----> 脚本被载入服务器 -----> 由服务器指定的PHP解析器对脚本进行解析形成HTML语言形式 ----> 将解析后的HTML语句以包的方式传回给浏览器。由此不难看出,在页面发送到浏览器后,PHP就不存在了,已被转化解析为HTML语句。客户请求为一动态文件,事实上并没有真正的文件存在在那里,是PHP解析而成相对应的页面,然后发送回浏览器。这种页面处理方式被称为“动态页面”。

  二,静态页面。

  静态页面是指在服务器端确实存在的仅含HTML以及JS,CSS等客户端运行脚本的页面。它的处理方式是。由客户端提出请求,请求某一页面 ----> WEB服务器确认并载入某一页面 ----> WEB服务器将该页面以包的形式传递回浏览器。由这一过程,我们对比一下动态页面,即可方现。动态页面需由WEB服务器的PHP解析器进行解析,而且通常还需连接数据库,进行数据库存取操作,然后才能形成HTML语言信息包;而静态页面,无须解析,无须连接数据库,直接发送,可大大减轻服务器压力,提高服务器负载能力,大幅提供页面打开速度和网站整体打开速度。但其缺点是,不能动态地对请求进行处理,服务器上必须确实存在该文件。

  三,模板及模板解析。

  模板即尚未填充内容html文件。例如:



 temp.html


 Code: [Copy to clipboard]  

 { title }
 
    this is a { file } file's templets
 




PHP处理:

 templetest.php


 Code: [Copy to clipboard]  
 $title = "拓迈国际测试模板";
 $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";

 $fp          = fopen ("temp.html","r");
 $content  = fread ($fp,filesize ("temp.html"));
 $content .= str_replace ("{ file }",$file,$content);
 $content .= str_replace ("{ title }",$title,$content);

 echo $content;
?>




  模板解析处理,即将经PHP脚本解析处理后得出的结果填充(content)进模板的处理过程。通常借助于模板类。目前较流行的模板解析类有phplib,smarty,fastsmarty等等。模板解析处理的原理通常为替换。也有些程序员习惯将判断,循环等处理放进模板文件中,用解析类处理,典型应用为block概念,简单来说即为一个循环处理。由PHP脚本指定循环次数,如何循环代入等,再由模板解析类具体实施这些操作。


  好了,对比过静态页面与动态页面各自的优劣,现在我们就来说说,如何用PHP生成静态文件。


  PHP生成静态页面并不是指PHP的动态解析,输出HTML页面,而是指用PHP创建HTML页面。同时因为HTML的不可写性,我们创建的HTML若有修改,则需删掉重新生成即可。(当然你也可以选择用正则进行修改,但个人认为那样做倒不如删掉重新生成来得快捷,有些得不偿失。)

  言归正传。用过PHP文件操作函数的PHP FANS知道,PHP中有一个文件操作函数fopen,即打开文件。若文件不存在,则尝试创建。这即是PHP可以用来创建HTML文件的理论基础。只要用来存放HTML文件的文件夹有写权限(即权限定义0777),即可创建文件。(针对UNIX系统而言,Win系统无须考虑。)仍以上例为例,若我们修改最后一句,并指定在test目录下生成一个名为test.html的静态文件:


 Code: [Copy to clipboard]  
 $title = "拓迈国际测试模板";
 $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";

 $fp          = fopen ("temp.html","r");
 $content  = fread ($fp,filesize ("temp.html"));
 $content .= str_replace ("{ file }",$file,$content);
 $content .= str_replace ("{ title }",$title,$content);

 // echo $content;
 
 $filename = "test/test.html";
 $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
 /*
 检查文件是否被创建且可写
 */
 if (!is_writable ($filename)){
    die ("文件:".$filename."不可写,请检查其属性后重试!");
 }
 if (!fwrite ($handle,$content)){  //将信息写入文件
    die ("生成文件".$filename."失败!");
 }
 fclose ($handle); //关闭指针
 
 die ("创建文件".$filename."成功!");
?>  



  实际应用中常见问题解决方案参考:

  一,文章列表问题:
  
  在数据库中创建字段,记录文件名,每生成一个文件,将自动生成的文件名存入数据库,对于推荐文章,只需指向存放静态文件的指定文件夹中的该页面即可。利用PHP操作处理文章列表,存为字符串,生成页面时替换此字符串即可。如,在页面中放置文章列表的表格加入标记{ articletable },而在PHP处理文件中:


 Code: [Copy to clipboard]  
 $title = "拓迈国际测试模板";
 $file   = "TwoMax Inter test templet,
author:Matrix@Two_Max";

 $fp          = fopen ("temp.html","r");
 $content  = fread ($fp,filesize ("temp.html"));
 $content .= str_replace ("{ file }",$file,$content);
 $content .= str_replace ("{ title }",$title,$content);
 
 //  生成列表开始
 $list = '';
 $sql = "select id,title,filename from article";
 $query = mysql_query ($sql);
 while ($result = mysql_fetch_array ($query)){
    $list .= ''.$result['title'].'
';
 }
 $content .= str_replace ("{ articletable }",$list,$content);
 
 //生成列表结束
 // echo $content;
 
 $filename = "test/test.html";
 $handle    = fopen ($filename,"w"); //打开文件指针,创建文件
 /*
 检查文件是否被创建且可写
 */
 if (!is_writable ($filename)){
    die ("文件:".$filename."不可写,请检查其属性后重试!");
 }
 if (!fwrite ($handle,$content)){  //将信息写入文件
    die ("生成文件".$filename."失败!");
 }
 fclose ($handle); //关闭指针
 
 die ("创建文件".$filename."成功!");
?>




  二,分页问题。

  如我们指定分页时,每页20篇。某子频道列表内文章经数据库查询为45条,则,首先我们通过查询得到如下参数:1,总页数;2,每页篇数。第二步,for ($i = 0; $i < allpages; $i++),页面元素获取,分析,文章生成,都在此循环中执行。不同的是,die ("创建文件".$filename."成功!";这句去掉,放到循环后的显示,因为该语句将中止程序执行。例:


 Code: [Copy to clipboard]  
 $fp          = fopen ("temp.html","r");
 $content  = fread ($fp,filesize ("temp.html"));
 $onepage  = '20';
 $sql          = "select id from article where channel='$channelid'";
 $query      = mysql_query ($sql);
 $num        = mysql_num_rows ($query);
 $allpages   = ceil ($num / $onepage);

 for ($i = 0;$i<$allpages; $i++){
    if ($i == 0){
       $indexpath = "index.html";
     } else {
       $indexpath = "index_".$i."html";
     }
    $start = $i * $onepage;
    $list    = '';
    $sql_for_page = "select name,filename,title from article where channel='$channelid' limit $start,$onepage";
    $query_for_page = mysql_query ($sql_for_page);
    while ($result = $query_for_page){
       $list .= ''.$title.'
';
     }
   
    $content = str_replace ("{ articletable }",$list,$content);

    if (is_file ($indexpath)){
       @unlink ($indexpath); //若文件已存在,则删除
     }

    $handle    = fopen ($indexpath,"w"); //打开文件指针,创建文件
    /*
    检查文件是否被创建且可写
    */
    if (!is_writable ($indexpath)){
       echo "文件:".$indexpath."不可写,请检查其属性后重试!"; //修改为echo
     }
    if (!fwrite ($handle,$content)){  //将信息写入文件
       echo "生成文件".$indexpath."失败!"; //修改为echo
     }
    fclose ($handle); //关闭指针
 }

 fclose ($fp);
 die ("生成分页文件完成,如生成不完全,请检查文件权限系统后重新生成!");

?>  



  大致思路如此,其中如其它数据生成,数据输入输出检查,分页内容指向等可酌情在页面中加入。

  在实际文章系统处理过程当中,还有许多问题有待考虑,与动态页面不同之处,需注意的地方还有很多。但大致思路即是如此,其它方面可举一反三而得。
   离开北京都快一个月了。。。在这个月里也休息的差不多了。也很少学习了 ,,觉得自己又在退步。
我也快要调整状态了。不能在堕落了。不能就要被社会淘汰了。。我现在要开始努力找工作了。

身心很累

2007/12/10 02:06 admin
 在北京一眨眼的时间就过了4个来月。。PHP学习的还真不错。主要是老大和当爱在靠近的指导。
主要是因为这段时间工作太疲惫,想休息一段时间。其实一些热血青年在一起做一起自己想做的事是
一件和快乐的事。但是人总会有疲惫的时候。真的很想休息一段时间。
我个人照片
点击在新窗口中浏览此图片
我的同事:
点击在新窗口中浏览此图片
星模公司香山集体
点击在新窗口中浏览此图片

php技术谁主沉浮

2007/12/4 01:03 admin
      网络对我们80后来说谁都不陌生,但是又有谁真正的了解过网络。还记得2000年的时候第1次接触到网络。那时候什么都不懂,例如QQ,Internet,这些新鲜词语对我来说是那么的陌生。也就是因为那个时候就爱上了它。当你打开那些设计独特,风格各异的网站的时候。你会不会想这个是用什么WEB语言编写。怎样实现各种功能的。对一个热爱于网络的青年他就会有所深思。
     当今WEB开发主要由这几种语言来编写。ASP,JSP,.NET,PHP这4种语言就是主要的WEB语言。但是在这几种语言中,我唯独钟爱于PHP。首先要给大家介绍什么是PHP,PHP是一种服务器端、跨平台、HTML嵌入式的脚本语言。其实,它和大家所熟知的ASP一样,是一门常用于Web编程的语言。PHP酝酿于1994年,1995年发布其第一个公开版本,截止目前已发布的最新版本为PHP5.2。 PHP是一种免费软件,它能运行在包括Windows、Linux等在内的绝大多数操作系统环境中,常与免费Web服务软件Apache和免费数据库Mysql配合使用于Linux平台上,具有最高的性能价格比,号称“黄金组合”(LAMP)。  也许PHP最强大和最重要的特征是它的数据库支持,目前其支持范围覆盖了包括Oracle、Sybase、MySQL、ODBC等在内的大多数常见数据库。使用它编写一个含有数据库功能的网页程序变得十分简单。
     PHP的特点,PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页比CGI、Perl和ASP更快,这是它的第一个突出的特点。具有很好的开放性和可扩展性:PHP属于自由软件,其源代码完全公开,任何程序员为PHP扩展附加功能非常容易。数据库支持:PHP支持多种主流与非主流的数据库,如:、Adabas D、DBA、dBase、dbm、filePro、Informix、InterBase、mSQL、MySQL、Microsoft SQL Server、Solid、Sybase、ODBC、oracle、oracle 8、PostgreSQL等。其中,PH P与MySQL是现在绝佳的组合,它们的组合可以跨平台运行。面向对象编程:PHP提供了类和对象。为了实现面向对象编程,PHP4及更高版本提供了新的功能和特性,包括对象重载、引用技术等。版本更新速度快:与数年才更新一次的ASP相比,PHP的更新速度就要快得多,因为PHP每几周就更新一次。具有丰富的功能:从对象式的设计、结构化的特性、数据库的处理、网络接口应用、安全编码机制等,PHP几乎涵盖了所有网站的一切功能。可伸缩性:传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。
通过以上的介绍,你应该对PHP有一定的了解了吧。PHP不在是那样陌生了吧。现在我就来谈谈我对PHP的了解和认识。我就谈谈PHP的框架设计思想。大多数框架都是采用MVC的设计模式,什么是MVC呢?MVC模式要求对系统的总体结构在逻辑上分成三部分,那么团队的开发者中也存在着针对各个部分的开发者。开发者角色相关系统逻辑职责,网页设计人员 View视图/界面 设计所有用户界面的网页模板。控制流程开发人员 Controller控制/流程 编写系统流程中的所有PHP页面。 商业逻辑开发人员 Model模型/逻辑 开发系统设计中规定的各个类(其中的方法)。例如国内比较流行的框架ThinkPHP(FCS),它是一个开源的快速、兼容而且简单的面向对象的轻量级PHP开发框架,全称是Fast,Compatible & Simple OOP PHP Framework。FCS框架是从Java的Struts结构移植过来的中文PHP开发框架,是为了简化企业级应用开发而诞生的,使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,借鉴了国外一些不错的思想,尤其是Java框架方面,因此熟悉Java的开发人员相对比较容易上手。在借鉴国外优秀思想的同时,FCS也更多地考虑了国内的应用开发需要。PHP4兼容、完全支持UTF-8,以及PATHINFO支持等,更加有利于国内的主机环境和开发需要。FCS的宗旨是简化开发、提高效率和易于扩展。使用ThinkPHP,你可以更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何PHP应用开发都可以从ThinkPHP的简单、兼容和快速的特性中受益。简洁、快速和实用是ThinkPHP发展秉承的宗旨,为此ThinkPHP会不断吸收和融入更好的技术以保证其新鲜和活力,提供WEB应用开发的最佳实践!
     作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。
     反观目前的PHP框架,有多少是遵循了软件设计和对象式编程的精髓呢?很遗憾,没有。ThinkPHP?不客气地说,它连幼儿都算不上,还只是个婴儿,而且不是一个很成熟的产品,跟软件艺术相差几万光年。我个人认为要是PHP框架要都体现和遵循软件设计和对象式编程的精髓。也就是PHP框架的成熟时期,也就是PHP技术的巅峰时期。
分页: 1/9 第一页 1 2 3 4 5 6 7 8 9 下页 最后页 [ 显示模式: 摘要 | 列表 ]