佳音的博客

2007/05/29

转载:水木社区VIM版版友推荐插件列表(06年12月)

Filed under: Uncategorized — 佳音 @ 5:12 下午

转载:水木社区VIM版版友推荐插件列表(06年12月)
http://www.newsmth.net/bbscon.php?bid=731&id=24898&ftype=11
———————————————————————–
BufExplorer

2007/05/18

:: vs -> self vs $this

Filed under: Uncategorized — 佳音 @ 11:10 上午

:: vs ->

2007/05/17

The Model-View-Controller Pattern —— MVC 模式[转]

Filed under: Uncategorized — 佳音 @ 7:17 下午

web 应用程序变化很大,而且,这种变化会引起大量的混乱,对于架构一个特定的应用程序,哪个或哪些模式是最好的。虽说如此,那么有没有一种“最好的”web 应用程序架构呢?

问题

你能不能部署一个单一 web 站点结构体系以适应每个常见的 web 应用程序,包括常见的表现元素、身份验证、表单验证,等等?

解决方案

Model-View-Controller(模型-视图-控制器,MVC) 模式将你的软件组织并分解成三个截然不同的角色:

  • Model 封装了你的应用数据、应用流程和业务逻辑。

  • View 从 Model 获取数据并格式化数据以进行显示。

  • Controller 控制程序流程,接收输入,并把它们传递给 Model 和 View。

MVC 的起源

Model-View-Controller 模式是由 Trygve Reenskaug 于七十年代后期在施乐公司的 Palo Alto 研究中心(Xerox’s Palo Alto Research Center,PARC)最初设计的。最初的参考实现是用 Smalltalk-80 写的,其最初的目的是设计来解决应用程序中的 GUI 交互问题。

只要你与 MVC 模式打过交道,你就会对它的实用性心存感激,尤其对于图形用户界面(Graphical User Interface,GUI)应用程序。此外,MVC 对 web 应用程序也很有用,虽然通过一连串无状态 web 连接访问一个服务器应用程序的不连续性会存在一些独特的挑战(也可以说是一种机会)。

如果你翻阅本章,寻找“一种真正的方法”来为 web 应用程序实现 MVC,我希望你不会对这里的答案太失望。根本就不存在什么完美的解决方案,但是有很多“最优实践”以及相关模式,它们的确可以帮助你有效地实现 MVC。希望这里介绍的观点可以为你的代码视为一个跳板,并引导你进行更多的研究。

The Model-View-Controller(模型-视图-控制器)

与其它设计模式不同,MVC 模式并没有直接反映一个你能够编写或配置的类结构。相反,MVC 更像一个概念上的指导原则或范型。

概念上的 MVC 模式被描述为三个对象 —— Model、View 和 Controller —— 之间的关系。由于 View 和 Controller 都可以从 Model 请求数据,所以 Controller 和 View 都依赖 Model。任何输入都通过 Controller 进入你的系统,然后 Controller 选择一个 View 来发出结果。对你,一个 PHP 开发人员,更具体的来说,Controller 处理每个进入的 HTTP 请求,而 View 则生成 HTTP 响应。

下面是一个概念上的 MVC 模式的图形描述:

在这个理想的 MVC 环境中,通信是单向的,如这个序列图所示:

当然,具体到细节上就有些麻烦了。当在一个 web 应用程序中实现 MVC 时,Modle、View 和 Controller 从来不会在单一的类中出现,而是被实现为紧密相关的对象群体,在那里,每一组执行一个特定的 MVC 任务。Controller 可能由几个类组成,它们被组合到一起,用于分析 HTTP 响应并确定应用程序所需的动作。Model 几乎可以确定由多个类组成。而 View 在 web 应用程序中通常是某种模板系统,而且也很可能由几个对象组成。

在接下来的几节,我们稍微深入“MVC 三元组”的每个部分,了解每个部分都包含哪些模式,或哪些设计模式可以帮助实现每个部分,以及这些模式是如何帮助你组织你的代码的。

模型

Model 包含了你的应用逻辑和数据,在你的应用程序中,它很可能是主要的值驱动器。Model 没有任何与表现层相关的特性,而且也和 HTTP 请求处理职责中完全无关。(作为一个经验方法,PHP Model 中决不要出现 HTML 标签或 $_GET 超全局变量)

领域模型

Domain Model 是一个对象层,是对现实世界逻辑、数据和你应用程序所处理的问题的抽象。Domain Model 可分为两大类:Simple Domain Model 和 Rich Domain Model。

Simple Domain Model 往往是业务对象和数据库表之间一对一的通信。你已经见过的几种模式 —— Active Record、Table Data Gateway,以及 Data Mapper,所有这些与数据库相关的设计模式 —— 可以帮助你把与数据库相关的逻辑组织成一个 Domain Model(为了使本书例子合理、简单、易懂,所选素材都没有超出简单 Domain Model 的一对一的通信 —— 同构映射)。

Rich Domain Model 包含复杂的,使用继承机制紧密联系在一起的对象网络,在本书和 GoF 一书中介绍的众多模式起着杠杆作用。Rich Domain Models 往往是柔性的,精心测试过的,不断重构的,而且与它们所表达的领域所需的业务逻辑紧密耦合。

采用哪种 Domain Model 类型取决于你的应用环境。如果你正在建立的是一个非常简单的表单处理 web 应用,没必要建立 Rich Domain Model。然而,如果你正在编写一个价值数百万的企业内联网架构的核心库,那么努力开发一个 Rich Domain Model 就是值得的,它可以为你提供一个准确表达业务过程的平台,并可以让你快速传输数据。

Martin Fowler 在 PoEAA 中同时简要介绍了两种 Domain Model。而 Eric Evans 的 Domain Driven Design 一书,则完全专注于 Rich Domain Model 的实践应用和开发过程。

视图

View 用于处理所有表现层方面的问题。View 从 Model 获取数据,并可以把它格式化成用于 web 页的 HTML,用于 web 服务的 XML,或用于 email 的文本。

鉴别你是否已经把你的代码成功地分离成了明确定义的角色的一个好方法就是,试着去取代(至少从概念上)另一个产生完全不同输出的 View。举例来说,如果你有一个 web 应用程序,要让程序使用 PHP CLI 在命令行方式下运行,你将必须做何更改?

尽管 View 有权访问 Model,但是让 View 调用 Model 的方法来改变它的状态是一种很不好的方式 —— 更新只应该由 Controller 来执行。View 调用的 Model 方法应该是没有副作用的只读数据检索方法。

有两种设计模式经常在 Views 中使用:Template View 和 Transform View。

Template View

Template View 是在 web 应用程序的 View 中使用的主要模式。这个模式使用一个包含特殊标记的模板文件(通常是 HTML),当 Template View 被执行的时候,这些标记会被 Model 中的数据所替换。

PHP 本身就是一个特殊的 Template View 的例子,叫做服务器页面。Savant 就是一个基于使用 PHP 作为模板本身的模板系统(http://www.phpsavant.com/)。

下面是一个使用 Savant 的例子:

// PHP4
require_once 'Savant2.php';

$tpl =& new Savant2();
$tpl->assign('title', 'Colors of the Rainbow');
$tpl->assign('colors', array('red',

PHP 5.2 自带的 Filter[转]

Filed under: Uncategorized — 佳音 @ 7:12 下午

今天看了 PHPWomen 的一篇 BLOG --Filter and PHP 5.2 才知道 PHP 已经自带有 Filter 了,之前是需要自己手动安装扩展,现在是默认就提供了。手册中也已经提供了 Filter 函数库的相关函数说明。Zend Developer Zone 上也已经有了一篇相关的教程--PHP Built in Input filtering

用法其实很简单,只需要知道一些常量就可以了,例如:


$age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT);
if (
is_null($age)) {

Mysql的error while loading shared libraries解决方法

Filed under: Uncategorized — 佳音 @ 4:09 下午
找不到mysql的动态链接库,解决方法更新动态链接库文件如下
编辑/etc/profile
加入export MYSQL_PATH=/usr/local/mysql
在shell下执行

  1.  
  2. echo ‘$MYSQL_PATH/lib/mysql’ >> /etc/ld.so.conf
  3. ldconfig
  4.  

在Linux下使用mysql[转]

Filed under: Uncategorized — 佳音 @ 3:54 下午

迅雷下载原理 [转]http://blog.zhku.com/read.php?1109

Filed under: Uncategorized — 佳音 @ 2:01 下午

1迅雷是什么?
迅雷是基于P2SP的一款下载软件,能够大大增强下载速度,可谓迅雷不及掩耳盗铃之势
如破竹。
P2SP的道理不复杂,就是指:如果多个服务器上有某个相同的文件,当某个用户下载其
中一个服务器上的这一文件时,迅雷会自动查找到另外的几个服务器,同时下载这一文
件,达到提速的目的。
迅雷比较流氓,在用户没有得到任何提示毫不知情的情况下,偷偷上传用户的本地文件
,在所有网络流量的统计中排到了第7位。(注:CERNET上似乎可以进三强)
迅雷比较小气,不说源代码不是公开的,连原理也不公开。
迅雷比较聪明,她的架构让人佩服啊佩服,佩服啊佩服,佩服啊佩服……
2下载原理
还记得百度的mp3搜索么?你到mp3.baidu.com上搜索一个mp3,百度会给你列出她知道的
所有服务器列表(这些服务器都是别人的),你可以在百度上点击该连接下载mp3,而不
用登陆真正的服务器。
迅雷就是把这个过程自动化了,并且增加了判断文件唯一性的功能,画个图简单说明一
下:
1.用户点击1.2.3.4上的QQ_1.exe文件的连接
2.用户客户机上的迅雷得到该文件的唯一的校验值。
3.迅雷自动向自己的资源服务器上搜索,查找到存放同一文件的其他的服务器列表
4.得到文件在该服务器上的目录和文件名(红色部分,有可能和原始连接中的文件名不
相同),ftp://1.2.3.5/QQ_2.exehttp://1.2.3.6/QQ_3.exe,以及公网用户1.2.3.7
有QQ.exe
5.迅雷自动向1.2.3.5和1.2.3.6上下载该文件的不同文件块,以达到加速下载的目的(
紫色部分)。
6.用户向公网用户1.2.3.7发送一个UDP资源请求
7.1.2.3.7回应一个资源请求说:偶这儿有你要的文件
8.用户向公网用户1.2.3.7的3077端口发起请求,并传输数据。
9.下载完毕后,如果迅雷资源服务器上,该文件的服务器列表中没有目前用户点击下载
的服务器1.2.3.4,则将这个新的服务器地址加入到该文件的服务器列表(蓝色部分)。

注:
1.上述过程中的6、7、8步骤中隐含了一个过程:判断用户是否是公网用户。
如果是公网用户,则该用户的IP地址和提供下载服务的端口也将记录在迅雷的资源服务
器中,后续用户可以从该用户处下载;第三节有这个过程的说明。
2.迅雷如何区分不同的文件?很多文件名字不同但是内容相同,很多文件名字相同但是
内容不同。搜索迅雷的相关信息只是得到了几句无关痛痒的废话:迅雷还使用了独创的
文件校验机制,保证了用户下载文件的正确性和完整。至于什么方法不得而知
3.我们如何查看迅雷搜索到的资源列表?
在迅雷搜索到一系列的资源列表并且任务没有完成时,会在相同下载目录下建立一个临
时文件,里面有搜索到的资源信息,其中peer就是搜索到的包含要下载文件的公网用户

3协议解析
分析第二节原理图中的下载过程,第1、2、5步和正常的下载是一模一样的,我们无法根
本无法区分。那好,我们就在3、4、6上做文章。
除了上述用户下载一个具体文件的过程的各个报文外,还有交换资源信息报文,用户和
用户之间的文件块传输报文、判断用户是否是公网用户的报文等。
1.资源请求报文
每次迅雷都会向219.134.132.47的tcp端口3076发出资源请求,该地址是写死在迅雷软件
中的,并非依靠DNS请求得到。
如果该地址不可用,则会切换到另外两个可替换的地址219.134.132.42、219.134.132.
86。
Web迅雷则使用219.134.132.46。
过滤掉这个报文,那么迅雷客户端就无法完成资源请求,无法从多点下载。用TP过滤掉
报文后迅雷只能从原始连接下载,如下图:
协议报文特征如下:
2.资源搜索回应报文
过滤掉这个报文,那么迅雷客户端就无法得到资源列表,无法从多点下载。
协议报文特征如下:
3.用户之间的文件传输(握手报文)
用户之间是可以传送文件块的,下面的报文就是传送文件块开始之前的握手报文,
3077端口为客户端的监听端口,用来把本地的文件传输给别人。(如果3077不能用,会
转到其他端口).
4.用户之间资源信息交换报文
5.提交新的资源信息报文
6.连接NAT测试服务器报文
迅雷每过几分钟就会向statnat1.sandai.net发送NAT测试报文,也就是告诉迅雷的资源

务器,自己是否是公网IP.
该报文由于无返回报文,所以猜想采用的办法是采用STUN的方法:
将本机的IP地址放在UDP的payload里,如果迅雷的服务器收到报文发现IP层的源地址
和payload里的IP地址一致,那么就是公网地址,否则就是处于防火墙后面或者需要经
NAT才能上公网。
协议报文如下:
注:
sandai.net是xunlei旗下的一个网站,很少单独抛头露面,多出现在迅雷软件检索关联

信息、显示广告的DNS请求报文中。
4TP过滤
如果TP武断的对迅雷进行过滤,只需要设定一个traffic management,把目的地址为21
9.134.132.0/24网段,目的端口为3076的报文全部过滤就可以防止迅雷下载,但是有可
能会误报。下面的规则更详细一点,可以减少误报。
1.针对用户向服务器资源请求报文和资源回应报文的过滤
由于迅雷的服务器IP地址比较容易更换,所以建议过滤的DV:
协议:tcp
源端口/目的端口:3076
开始的四个字节:0×29000000
2.针对用户之间的资源信息交互报文的过滤
协议UDP
端口3076
前四个字节0×32000000
3.针对用户之间的文件传输(握手报文)的过滤
协议tcp
源端口或者目的端口可以为3077、3078
前四个字节为0×29000000
4.提交新的资源信息的报文的过滤
协议TCP
目的端口3076
前四个字节0×29000000
5.针对连接NAT测试服务器的报文的过滤
协议UDP
目的端口3076
前四个字节0×00000101

]]>

Symfony简介[转]

Filed under: Uncategorized — 佳音 @ 10:17 上午

Overview

概要

Symfony is an object-oriented PHP5 framework based on the MVC model. Symfony allows for the separation of business rules, server logic and presentation views of a web application. It also contains numerous tools and classes aimed at shortening the development time of a complex web application.

Symfony是一个基于MVC模型的面向对象的PHP5框架(framework)。Symfony可以帮助你将web应用程序的业务逻辑、服务器端逻辑和页面显示分开。它也包含了许多的工具和类,这些工具和类可以帮助你缩短开发复杂web应用程序的时间。

What is a framework?

什么是框架(framework)?

A framework adds new mechanisms on top of a programming language, and these mechanisms automate many of the development patterns used for a given purpose. A framework also adds structure to the code, and pushes the developer to write better, more readable and maintainable code. A framework also makes programming easier, since it packages complex operations into simple statements.

框架在编程语言之上替我们添加一些机制,这些机制可以帮助我们自动应用各种开发模式以更好的实现某些给定的开发目标。框架也会很好的架构我们的代码,推动开发者写出更好的、更易读的并且可维护的代码。由于框架将一些复杂操作封装在了一些简单的语句里,所以它可以使我们的开发更加简单。

A framework is usually developed with the same language that it extends. A PHP5 framework is a set of files written in PHP5.

由于框架的目的一般都是对所基于的编程语言进行一定扩展,所以它一般采用原编程语言,并且扩展之。一个PHP5的框架就是一批用PHP5写成的文件。

A framework will add layering to an application. In general, they divide applications in three layers:

框架一般都会将应用程序分层。一般来讲,它一般会将应用程序分为如下三层:

  • The presentation logic handles the interactions between the user and the software
  • 表现层逻辑处理用户和应用程序之间的交互。
  • The data source logic carries the access to a database or other data providers
  • 数据源逻辑处理所有与数据库或者其他数据提供者的交互。
  • The domain logic, or business logic, is the remaining piece. It involves calculation made on inputs, manipulation of data from the presentation, and dispatching of data source logic according to the commands received from the presentation.
  • 领域逻辑,或者叫业务逻辑,这是留下来让你填写的地方。它包括计算用户输入,处理表现层的数据,根据表现层命令执行相应的数据源逻辑等。

Web application frameworks intend to facilitate the development of… web applications (websites, Intranets, etc.). Building a basic dynamic website can be easily achieved with existing programming languages, and PHP is known for its simplicity and broadly adopted for that purpose. With PHP alone, you can already query a database, manage session cookies, access files in the server, etc. But when it comes to building a more complex website, where business logic increases the volume of code to maintain, the need of a web application framework arises.

Web应用程序框架的目的就是想要简化各种Web应用程序的开发(包括网站,内网应用程序等)。用现存的编程语言当然可以比较轻松的建造基本的动态网站,比如PHP就是因其的简单性和广泛采用性而被大家所熟知。仅用PHP,你就可以查询数据库,管理session cookies,访问服务器上的文件,等等。但是,当你需要开发一个比较复杂的网站时,当由于业务代码的激增而导致有大量代码需要维护时,web应用程序框架的重要性就体现出来。

What is symfony?

什么是symfony

Symfony is a complete framework designed to help and speedup the development of web applications.

Symfony完全是为了帮助和加速web应用程序的开发而设计的。

It is based on the following concepts:

它基于如下的概念:

  • compatible with as many environments as possible
  • 尽可能的兼容所有的应用环境
  • easy to install and configure
  • 简单安装和配置
  • simple to learn
  • 易于学习
  • enterprise ready
  • 支持企业开发
  • convention rather than configuration, supporting fallback calls
  • 依靠惯例而不是配置,支持回滚调用[i1]
  • simple in most cases, but still flexible enough to adapt to complex cases
  • 尽量使多数情况简单,但是当需要复杂时,依然能够支持
  • most common web features included
  • 包括大多数通用的web特性
  • compliant with most of the web “best practices” and web “design patterns”
  • 遵从大多数的web最佳实践和web设计模式
  • very readable code with easy maintenance
  • 非常易读的代码,非常高的可维护性
  • open source
  • 开源

The main concept underlying the symfony framework is that the most common tasks are done automatically so that the developer can focus entirely on the specifics of an application. There is no need to reinvent the wheel every time a new web application is built.

隐藏在symfony框架背后的最重要的思想就是越多的普通的工作由计算机来自动完成,开发者就可以更加完全的投入自己的精力于应用程序中那些更需要投入精力的特殊的地方。每次打造一个新的Web应用时,你都不需要重新发明轮子了。

To fulfill these requirements, symfony was written entirely in PHP5. It has been thoroughly tested in various real world projects, and is actually in use for high demand e-business websites. It is compatible with most of the available databases, among which:

为了完成这样的需求,symfony全部是用PHP5编写的。他已经被各式各样的真实地项目所完全测试,并且已经在一些高要求的电子商务网站中应用。它可以兼容几乎所有已知的数据库,比如:

  • MySQL
  • PostgreSQL
  • Oracle
  • MSSQL
  • and any other database if a Creole driver exists for it
  • 任何其他的数据库,只要它具备Creole驱动

The symfony object model relies on three distinct layers:

Symfony的对象模型依赖于如下三个独特的层次:

  • a database abstraction
  • 一个数据库抽象层
  • an object-relational mapping
  • 一个对象-关系映射层
  • a Model-View-Controller model for the front and back-office
  • 一个Model-View-Controller模型用来支持前端和后端的应用

Common features of web projects are made easy since Symfony natively automates them:

由于Symfony替你自动化了许多操作,所以一些通用的Web项目的特性将非常容易的被支持

  • internationalization
  • 国际化
  • templating with helpers
  • templating with helpers[i2]
  • form validation
  • 表单验证
  • cache management
  • 缓存管理
  • shopping cart management
  • 购物车管理
  • smart URLs
  • 智能URLs
  • Scaffolding
  • Scaffolding[i3]
  • email sending
  • 邮件发送
  • Pagination
  • 分页支持
  • AJAX interactions
  • Ajax式交互

In addition, to fulfill the requirements of enterprises having their own coding guidelines and project management rules, symfony can be entirely reconfigured using YAML configuration files. It provides by default, several development environments, and is bundled with tools to easily achieve the following operations:

另外,由于企业开发有其自身的代码规范和项目管理规则,为了满足该需求,symfony可以用YAML配置文件来完全重新配置。一般的,它提供许多开发环境,并且绑定了一批工具来完成如下的操作:

  • prototyping
  • prototyping[i4]
  • content management
  • 内容管理
  • live configuration changes
  • 在线配置变更
  • deployment
  • 部署
  • unit testing
  • 单元测试
  • applicative testing
  • 可用性测试
  • logging
  • logging[i5]
  • debugging
  • 调试

Symfony uses some code fragments of other open source projects:

Symfony采用了一些其他的开源项目的代码片断;

  • Creole, for the database abstraction layer
  • Creole,为数据抽象层
  • Propel, for the object-relational mapping layer
  • Propel,为对象-关系映射层
  • Mojavi, for the Model-View-Controller model layer
  • Mojavi,为Model-View-Controller模型层

Is symfony made for me?

Symfony适合我吗?

Whether you are a PHP5 expert or a beginner in web application programming doesn’t matter. The main factor that should direct your decision is the size of your project.

无论你是一个PHP5的高手或者是一个Web应用程序开发的初学者,都不要紧。决定Symfony是否适合你的关键因素是你需要开发的项目的大小。

If you want to develop a simple website with five to ten pages, having limited access to a database and no obligation for performance, availability or documentation, then you should stick with PHP alone. You wouldn’t take much advantage of the features of a web application framework, and using object orientation or a MVC model would only slow down your development. Symfony is not optimized to run efficiently on a shared server with only CGI support.

如果你只是希望开发一个简单的只有5页或者10页的网站,仅仅需要简单的访问一下数据库,也不需要关注性能、可用性和文档化,那么你用PHP就可以了。这种情况即使你使用web应用程序框架也不会给你带来多大的好处。相反,面向对象的特性和MVC模型还有可能减慢你的开发。Symfony并不是为那些运行在共享服务器上,仅支持CGI的简单、高效应用而设计的。[i6]

On the other hand, if you develop bigger web applications, with a heavy business logic, PHP alone is not enough. If you plan to maintain or extend your application in the future, you will need your code to be lightweight, readable and performant. If you want to use the latest advances in user interaction (like AJAX) in an intuitive way, you can’t just write hundreds of lines of Javascript. If you want to have fun and develop fast, then PHP alone will probably be disappointing. For all these cases, symfony is made for you.

反之,如果你正要开发一个较大型的项目,由大量的业务逻辑需要处理,那么仅仅有PHP就不够了。如果你打算在未来维护或者扩展你的应用程序,那么你需要让你的代码保持轻量级,可读并且高性能。如果你想用一种比较直接的方式采用一些最新技术在用户交互方面的优势,如Ajax,而不用编写成千上万行的Javascript代码。如果你想让开发高效并且充满乐趣,那么仅采用PHP进行开发将会令你失望。如果你碰到了上述所有情况的一种,那么,symfony就是为你而生的!

And of course, if you are a profesional web developer, you already know all the benefits of web application frameworks, and you need one which is mature, well documented, and with a large community. Search no more, for symfony is your solution.

当然,如果你是一个专业的web开发者,你当然已经知道了web应用程序框架的优势,你所需要的是一个成熟的,有良好文档支持的,有一个大型交互社区的框架。不用再寻找了,symfony就是合适你的解决方案!

Translated by coofucoo

4/19/2006

]]>

Zend Platform案例应用

Filed under: Uncategorized — 佳音 @ 10:15 上午

发布时间: 2006-11-15 15:51  作者: PHPchina   信息来源: PHPchina

Platform 是企业级PHP应用平台环境

2007/05/16

教训

Filed under: Uncategorized — 佳音 @ 5:26 下午

今天突然遇到一个问题,用javascript 提交表单的时候怎么提交也提交不上去 结果在网上一查原来提交按钮[buuton]的名字不能为submit()

Older Posts »

Powered by 00RZ