2010年4月9日星期五

Nutch索引合并

     近日,用到Nutch的索引合并,把几个单独建好的索引合到一起来。通过命令行就可以解决这个问题。
    比如,你有两个索引文件,mydir1和mydir2,他们分别由Nutch单独构建,它们的目录结构是:
   crawldb
   index
   indexes
   linkdb
   segments
   现在需要对这两个索引文件mydir1和mydir2进行合并为一个mydir,可使用命令:
   1.合并linkdb
  
bin/nutch mergelinkdb mydir/linkdb mydir1/linkdb/ mydir2/linkdb/

  2.合并crawldbs
  
bin/nutch mergedb mydir/crawldb mydir1/crawldb/ mydir2/crawldb/

  3.合并segments
  
bin/nutch mergesegs mydir/segments mydir1/segments/* mydir2/segments/*

   在数GB的数据量的情况下不能成功,我使用了5台机器,合并100G的数据,到百分之0.04时几乎不动了,我认为Nutch不大赞同大数量的 segments合并,segments在检索中起到的作用仅仅是快照作用,因此可以考虑,不要合并segments,自己搞定大数据的快照服务就行。
   4.Invertlinks
  
bin/nutch invertlinks mergeaall/linkdb/ mergeaall/segments/*

   5.create nutch index
  
bin/nutch index mydir/indexes mydir/linkdb/ mydir/crawldb/ mydir/segments/*

   6.通过直接meger index 可以快速把索引合并的问题搞定,综合3解决Nutch的索引合并。
   merge index
  
nutch merge mydir/index mydir1/indexes mydir2/indexes

nutch1.0各种命令(转)

摘自:http://jlife.javaeye.com/blog/470691

nutch.job 文件的使用:

hadoop jar nutch-1.0.job org.apache.nutch.crawl.Crawl urls -dir crawl -depth 1

 

局域网抓取

bin/nutch crawl urls -dir 20090519 -depth 1 -topN 50 -threads 2 >& nutch.log

互联网抓取命令(注:1.0版本的命令和以前版本有许多不一样)

1. 读取urls目录下的站点添加到crawldb里
bin/nutch inject 20090519/crawldb urls
2. 创建一个segments,存放到20090519目录下
bin/nutch generate 20090519/crawldb 20090519/segments
3.根据文件夹20090519102635下生成的下载列表获取页面内容
bin/nutch fetch 20090519/segments/20090519102635/
4.从已下载的的段数据列表里获取URL链接,更新 crawldb内容
bin/nutch updatedb 20090519/crawldb 20090519/segments/20090519102635
5.分析链接关系,生成反向链接
bin/nutch invertlinks 20090519/linkdb -dir 20090519/segments
6.创建页面内容索引
bin/nutch index 20090519/indexes 20090519/crawldb 20090519/linkdb 20090519/segments/20090519102635
7.删除重复数据
bin/nutch dedup 20090519/indexes
8.合并索引文件
bin/nutch merge 20090519/index 20090519/indexes

读取命令
1.查看crawldb数据库:bin/nutch readdb 20090519/crawldb/ -stats 这个命令可以查看url地址总数和它的状态及评分。

   导出权重和相关的url信息:bin/nutch readdb 20090519/crawldb/ -topN 20 urldb(out_dir)

   查看每个url地址的详细内容,导出数据:bin/nutch readdb 20090519/crawldb/ -dump crawldb(out_dir)

   查看具体的url,以163为例:bin/nutch readdb 20090519/crawldb/ -url http://www.163.com/

2.查看linkdb数据库的链接情 况:bin/nutch readlinkdb 20090519/linkdb/ -url http://www.163.com/

   导出linkdb数据库文件:bin/nutch readlinkdb 20090519/linkdb/ -dump linkdb(out_dir)

3.查看segments:bin/nutch readseg -list -dir 20090519/segments/ 可以看到每一个segments的名称,产生的页面数,抓取的开始时间和结束时间,抓取数和解析数。

导 出segments:bin/nutch readseg -dump 20090519/segments/20090309103156 segdb(out_dir)

其他相关命令,可输入bin/nutch查看 各自具体用法自行参考

2010年4月8日星期四

如何配置JDK和TOMCAT(JSP)

经常看到许多人问如何配置JDK和JSP,现在我把方法总结下,希望对大家有所帮助。
第一步:下载jdk和tomcat
第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可。
1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的jdk安装在c:\jdk1.6):
JAVA_HOME=c:\jdk1.6
classpath=. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径)
path=%JAVA_HOME%\bin
接着可以写一个简单的java程序来测试JDK是否已安装成功:
public class Test{
public static void main(String args[]){
System.out.println("This is a test program.");
}
}
将上面的这段程序保存为文件名为Test.java的文件。
然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令
javac Test.java
java Test
此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。

2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c: \Tomcat):
CATALINA_HOME: C: \Tomcat
CATALINA_BASE: C: \Tomcat
TOMCAT_HOME: C:\Tomcat
然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下:
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar;
接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。
第三步:建立自己的jsp app目录
1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录;
2.在webapps目录下新建一个目录,起名叫myapp;
3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的;
4.WEB-INF下新建一个文件web.xml,内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
</web-app>
5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下:
<html><body><center>
Now time is: <%=new java.util.Date()%>
</center></body></html>
6.重启Tomcat
7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。
第四步:建立自己的Servlet:
写入你的第一个Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)th
rows ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("This is my first Servlet");
out.println("</title></head><body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body></html>");

}
}
然后照样用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servl
et.*
那么就是应该把C:\Tomcat\common\lib里面的servlet.jar文件拷贝到C:JDKjrelibe
xt中,再次编译,就没有问题了!
然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构:
ROOT\index.html
ROOT\welcom.jsp
ROOT\WEB-INF\lib\MyServlet.jar(如果你的servlet的.class打成了.jar文件,则放在
lib下面)
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个
里面)
然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found
怎么回事呢?
Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册,
用EP打开这个web.xml文件,

把下面这段程序
servlet>
.....
</servlet>

<servlet-mapping>
......
</servlet-mapping>
替换成
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>
如果没有的话,就直接加那段代码

为什么呢?
因为 这样的结构
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
表示指定包含的servlet类.
而以下的结构
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/servlet/HelloWorld</url-pattern>
</servlet-mapping>
表示指定HelloServlet应当映射到哪一种URL模式。
在修改web.xml完毕过后,重新启动Server,然后再输入http://localhost:8080/servlet/HelloWorld,那么偌大一个Hello,World!等
着你呢,恭喜你
摆平了:)
在JSP文件开头加入下面这条语句可以实现中文名称显示

<%@ page language="java" contentType="text/html; charset=gb2312" %>

修改tomcat目录下conf\server.xml为

port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>

注意黑体部分是修改的地方,修改之后就可以让TOMCAT支持中文链接了。
上面是完整的配置方法,还可以上tomcat支持中文,其实我空间里都有。

2010年3月13日星期六

nutch安装,使用,二次开发入门(转)

摘自:http://java-007.javaeye.com/blog/429663

关键字: cygwin nutch 安装 1.1 Nutch安装
    参考资料:http://www.blogjava.net/dev2dev/archive/2006/02/01/29415.aspx Nutch在Windows中安装之细解

由于运行Nutch自带的脚本命令需要Linux的环境,所以必须首先安装Cygwin来模拟这种环境。

1)安装cygwin

2) 下载nutch-0.9.tar.gz, 用winrar解压后,例如放在g:/nutch-0.9

3) 安装nutch,打开cgwin,运行命令:

   cd /cygdrive/g/nutch-0.9  (也就是进入nutch解压的目录)

   bin/nutch                  (执行nutch脚本安装)

4) OK !

1.2 Nutch使用入门
资料:http://blog.csdn.net/zjzcl/archive/2006/02/06/593138.aspx

Nutch 使用之锋芒初试  (包括下载及检索两部分)

注意:请使用JDK1.5,用JDK1。4会报错误:unsupported major.minor version 49.0 n

设置环境变量:NUTCH_JAVA_HOME = c:/jdk1.5

1.2.1 抓取少量网站
1) 在nutch的安装目录新建一个文件url.txt,指明要抓取网站的顶级网址,写入:

   http://www.aerostrong.com.cn

2) 编辑conf/crawl-urlfilter.txt,修改MY.DOMAIN.NAME部分

   # accept hosts in MY.DOMAIN.NAME

#+^http://([a-z0-9]*.)*MY.DOMAIN.NAME/

+^http://www.aerostrong.com.cn

    3) 运行脚本命令抓取,脚本命令全是linux下的shell命令,在window下运行它需要cgwin,打开cgwin,运行命令:

   cd /cygdrive/g/nutch-0.9  (也就是进入nutch解压的目录)

   bin/nutch crawl url.txt -dir crawled -depth 3 -threads 4 >& crawl.log

   参数解释:

      -dir dir names the directory to put the crawl in.

-depth depth indicates the link depth from the root page that should be crawled.

-delay delay determines the number of seconds between accesses to each host.

-threads threads determines the number of threads that will fetch in parallel.

1.2.2 抓取整个因特网
http://hedong.3322.org/archives/000247.html 试用nutch

1、概念解释:

   1) web database: nutch所知道的page,以及在这些page里头的links (由injector通过DMOZ往里添加page,Dmoz(The Open Directory Project/ODP)是一个人工编辑管理的目录集合,为 搜索引擎提供结果或数据。)

   2)  segments.:是指page的一个集合,对它进行抓取与索引都作为同一个单元对待。它包含以下类型:

       Fetchlist 这些page的名称的集合

       Fetcher output: 这些page文件的集合

       Index:  lucene格式的索引输出

2、 建立web database与segments

  

初始准备
 
 


mkdir db
建立目录存放web database


mkdir segments
 


bin/nutch admin db -create
建一个新的空的数据库(这步出错了)

第一轮抓取
 
 


bin/nutch inject db -dmozfile content.rdf.u8 -subset 3000
从DMOZ列表中取得URL并加入数据库


bin/nutch generate db segments
根据数据库内容,生成一个抓取列表(fetchlist)


s1=`ls -d segments/2* | tail -1`
刚才生成的抓取列表放在最后一个目录中,取其名


bin/nutch fetch $s1
利用机器人抓页面


bin/nutch updatedb db $s1
利用抓取结果更新数据库

第二轮抓取
 
 


bin/nutch analyze db 5
迭代5次分析页面的链接


bin/nutch generate db segments -topN 1000
将排行前1000个URL生成新的抓取列表


s2=`ls -d segments/2* | tail -1`
执行抓取、更新、并迭代2次分析链接


bin/nutch fetch $s2
 


bin/nutch updatedb db $s2
 

第三轮抓取
 
 


bin/nutch analyze db 2
 


bin/nutch generate db segments -topN 1000
 


s3=`ls -d segments/2* | tail -1`
 


bin/nutch fetch $s3
 


bin/nutch updatedb db $s3
 


bin/nutch analyze db 2
(为下一次做准备?)

索引并去重
 
 


bin/nutch index $s1
 


bin/nutch index $s2
 


bin/nutch index $s3
 


bin/nutch dedup segments dedup.tmp
 


1.2.3 检索
   1) 将nutch-0.9.war包丢到tomcat发布目录

   2) 修改配置文件指定索引库.( WEB-INFclasses下的nutch-site.xml):

     <?xml version="1.0"?>
  <?xml-stylesheet type="text/xsl" href="nutch-conf.xsl"?>

   <nutch-conf>
   <property>
    <name>searcher.dir</name>
    <value>G:/nutch-0.9/crawled</value>
   </property>
   </nutch-conf>

注意,当复制上述配置文件时,如果出现下列错误,是因为复制文件时带有空格或编码格式,重敲一遍即可: java.io.UTFDataFormatException: Invalid byte 1 of 1-byte UTF-8 sequence

3) 测试http://172.17.1.122:8081

  注意,若查询字符串输出中文时出现编码问题,这个问题和nutch关系不大,主要是tomcat有关系,修改tomcat的server.xml,在Connector元素中增加属性:

  URIEncoding="UTF-8" useBodyEncodingForURI="true"

1.3 nutch的二次开发
  参考:

http://www.mysoo.com.cn/news/2007/200721679.shtml Google式的搜索引擎实现

http://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-1.html Introduction to Nutch, Part 1: Crawling

http://today.java.net/pub/a/today/2006/02/16/introduction-to-nutch-2.html Introduction to Nutch, Part 2: Searching



资料
Nutch相关资料收集整理 http://www.gispark.com/html/spatial/2006/1008/294.html 

搜索引擎Nutch 0.7.2 试用笔记(转)

摘自:http://blog.csdn.net/danny_xcz/archive/2006/05/12/725937.aspx

  在Google里面搜索了一些Nutch的资料,还真不多。今天画了两个小时搞了一通,把一些心得纪录下来。

我的jdk 是1.5.x ,Tomcat是5.0.x

1 下载0.7.2 版本的包:里面已经包含了war文件,所以不需要Ant编译了

2 安装Cygwin,这个没什么好说的。

3 把Nutch借压缩到D:/nutch

4 在D:/nutch下面建立一个文件 urls (没有后缀)

http://www.xxx.edu.cn/

5 在D:\nutch\conf\crawl-urlfilter.txt里面,加入

+^http://www.xxx.edu.cn/

6 环境变量加入

NUTCH_JAVA_HOME = D:\jdk1.5.0_06

7 打开cygwin窗口,

cd D:\nutch

在D:\nutch下面执行

bin/nutch crawl urls -dir crawled -depth 3 >& crawl.log
这个命令会在当前目录下建立一个crawled的文件夹,然后对刚才的www.xxx.edu.cn的网站开始检索。
层数是3层,一般最好10层。然后结果输出在crawl.log里面
8 将nutch-0.7.2.war拷贝到tomcat/webapps下面,改名nutch
9 在D:\tomcat\conf\Catalina\localhost\ 建立nutch.xml
<Context path="" debug="5" privileged="true" docBase="nutch"/>
10 启动tomcat,等war解开以后,打开
D:\tomcat\webapps\nutch\WEB-INF\classes\nutch-site.xml
修改如下
<nutch-conf>
<property>
    <name>searcher.dir</name>
    <value>D:\nutch\crawled\</value>
</property>
</nutch-conf>
11 D:\tomcat\webapps\nutch\zh\include 下面新建header.jsp,内容就是复制header.html,但是
前面加上
<%@ page 
  contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"
%>
在D:\tomcat\webapps\nutch\search.jsp里面,找到并修改为
<jsp:include page="<%= language + "/include/header.jsp"%>"/>
顺便把下面js注释掉
function queryfocus() { 
//search.query.focus();
  }
12 D:\tomcat\conf\server.xml 找到以下段,并修改
    <Connector port="8080"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               debug="0" connectionTimeout="20000"
               disableUploadTimeout="true"
               URIEncoding="UTF-8" useBodyEncodingForURI="true" />
好了,到此,重启tomcat,访问 http://localhost:8080 就可以看到搜索主页了,而且搜索支持中文
和分词,虽然分得不是很好。
13 接下来一个重要的功能就是增量更新索引。
在D:\nutch下建立recrawl.sh 。内容为
#!/bin/bash
# A simple script to run a Nutch re-crawl
if [ -n "$1" ]
then
  crawl_dir=$1
else
  echo "Usage: recrawl crawl_dir [depth] [adddays]"
  exit 1
fi
if [ -n "$2" ]
then
  depth=$2
else
  depth=5
fi
if [ -n "$3" ]
then
  adddays=$3
else
  adddays=0
fi
webdb_dir=$crawl_dir/db
segments_dir=$crawl_dir/segments
index_dir=$crawl_dir/index
# The generate/fetch/update cycle
for ((i=1; i <= depth ; i++))
do
  bin/nutch generate $webdb_dir $segments_dir -adddays $adddays
  segment=`ls -d $segments_dir/* | tail -1`
  bin/nutch fetch $segment
  bin/nutch updatedb $webdb_dir $segment
done
# Update segments
mkdir tmp
bin/nutch updatesegs $webdb_dir $segments_dir tmp
rm -R tmp
# Index segments
for segment in `ls -d $segments_dir/* | tail -$depth`
do
  bin/nutch index $segment
done
# De-duplicate indexes
# "bogus" argument is ignored but needed due to
# a bug in the number of args expected
bin/nutch dedup $segments_dir bogus
# Merge indexes
ls -d $segments_dir/* | xargs bin/nutch merge $index_dir
在cygwin里面,执行
./recrawl crawled 8
意思是更新索引,目录是crawled,层数8 。还可以把天数跟在后面。执行完毕后要重启Tomcat,因为
Nutch.war里面对查询有缓存。
 
最后可以把这个脚本放到crontab里面,每天夜里2点执行,执行完毕后重新启动Tomcat。
 

2010年3月10日星期三

FirePHP:像Firebug那样调试你的PHP代码(转)

摘自:http://developer.51cto.com/art/201003/185725.htm

如果你经常使用Firebug调试HTML、CSS、JavaScript和Ajax代码,一定会对Firebug爱不释手,它 方便快速且直观。但你是否想过用Firebug调试PHP程序?Firefox还有一个扩展叫FirePHP,一个可以像Firebug一样方便的调试 PHP程序。

FirePHP 

这个在Firebug之上运行的扩展,结合一个服务器端的库,就可以让你的PHP代码向浏览 器发送调试信息,该信息以HTTP响应头(HTTP headers)的方式编码。经过设置,你可以像在Firebug控制台调试JavaScript代码一样得到PHP脚本的警告和错误提示。下面我们来看 看具体步骤。

首先,我们需要从Mozilla的Firefox扩展组件页面下载FirePHP插件; 在此之前,要确保我们已经安装了Firebug。完成FirePHP插件的安装后,再次打开Firebug面板,我们可以看到除Firebug按钮之外, 还有一个蓝色的按钮,那就是我们的FirePHP了。点击这个按钮,会出现一个菜单,提示您启用或禁用FirePHP。如图:

FirePHP的Firebug控制台界面 
FirePHP的Firebug控制台界面

这样我们基本完成了FirePHP的安装,但我们还需要一个FirePHP的服务器端的库,点击这里下载。这是一个使用PEAR的版本,可以手动下载安装。

之后,我们需要将这个库include到我们的代码中。FirePHP还有一些版本是针对框 架和CMS设计的,比如WP-FirePHP是为WordPress定制的,JFirePHP是专为Joomla定制的。为了足够通用,这篇文章里我们将 把重点放在一些通用的功能上。

当我们的服务器上有了FirePHP library,我们需要使用下面一条简单的语句将它包含进来。

  1. require_once('FirePHPCore/fb.php'); 

因为FirePHP使用HTTP headers的形式发送数据,我们需要缓冲一下脚本的输出,这样可以确保响应请求可以包含生成的脚本。在PHP中,通过在代码顶部调用ob_start方法来实现。

  1. ob_start(); 

完成了上面的步骤,我们就可以开始使用FirePHP。所要做的只剩下调用fb函数,无论是一个单独的标记还是一个定义的常量,都会生成一个标准的记录,无论是警告、错误还是其他信息。如下图:

这段代码将会在Firebug控制台产生如下输出:

我们还可以使用FirePHP来跟踪程序的执行过程:通过FirePHP::TRACE常量,你可以看到行号、类名、函数名等。示例代码如下:

将会产生如下输出;

使用这个跟踪功能,可以愉快的调试代码,因为他让你知道真正的问题出现在那里。当然,我们还需要记住在代码交付之前删除这些FirePHP调试语句。

FirePHP所能做的要比上面介绍的多得多,51CTO.com在这里只是简单的展示FirePHP的一般功能。FirePHP还有一些附件功能和面向对象的API值得我们去发现和探索。更多介绍可以通过FirePHP官网来了解。

原文:Debug PHP with Firebug and FirePHP

链接:http://www.sitepoint.com/blogs/2010/02/09/debug-php-firebug-firephp/

国外十大最流行PHP框架排名(转)

摘自:http://developer.51cto.com/art/200904/118754.htm

本文来自国外的一个PHP技术人员网站,总结了国外的十个目前最流行的PHP MVC框架。具体排名顺序未必准确,还有些知名框架,如Kohana等也没有提及。不过仍可以做为一篇不错的参考。

以下为十个目前最流行的基于MVC设计模式的PHP框架。

1. Yii

Yii是一个基于组件的高性能的PHP的框架,用于开发大规模Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主体化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。而且这个框架的价格也并不太高。事实上,Yii是最有效率的PHP框架之一。

2. CodeIgniter

CodeIgniter是一个应用开发框架――一个为建立PHP网站的人们所设计的工具包。其目标在于快速的开发项目:它提供了丰富的库组以完成常 见的任务,以及简单的界面,富有条理性的架构来访问这些库。使用CodeIgniter开发可以往项目中注入更多的创造力,因为它节省了大量编码的时间。

3. CakePHP

CakePHP是一个快速开发PHP的框架,其中使用了一些常见的设计模式如ActiveRecord,Association Data Mapping,Front Controller以及MVC。其主要目标在于提供一个令任意水平的PHP开发人员都能够快速开发web应用的框架,而且这个快速的实现并没有牺牲项目 的弹性。

4. PHPDevShell

PHPDevShell是一个开源(GNU/LGPL)的快速应用开发框架,用于开发不含Javascript的纯PHP。它有一个完整的GUI管 理员后台界面。其主要目标在于开发插件一类的基于管理的应用,其中速度、安全、稳定性及弹性是最优先考虑的重点。其设计形成了一个简单的学习曲线,PHP 开发者无需学习复杂的新术语。PHPDevShell的到来满足了开发者们对于一个轻量级但是功能完善,可以无限制的进行配置的GUI的需求。

5. Akelos

Akelos PHP框架是一个基于MVC设计模式的web应用开发平台。基于良好的使用习惯,使用它可以完成如下任务:

◆方便的使用Ajax编写views

◆通过控制器管理请求(request)及响应(response)

◆管理国际化的应用

◆使用简单的协议与模型及数据库通信

你的Akelos应用可以在大多数共享主机服务供应方上运行,因为Akelos对服务器唯一的要求就是支持PHP。因此,Akelos PHP框架是理想的用于发布单独web应用的框架,因为它不需要非标准PHP配置便能运行。

6. Symfony

Symfony是一个用于开发PHP5项目的web应用框架。

这个框架的目的在于加速web应用的开发以及维护,减少重复的编码工作。

Symfony的系统需求不高,可以被轻易的安装在任意设置上:你只需一个Unix或Windows,搭配一个安装了PHP5的网络服务器即可。它与差不多所有的数据库兼容。Symfony的价位不高,相比主机上的花销要低得多。

对于PHP开发者而言,使用Symfony是一件很自然的事,其学习曲线只有短短一天。干净的设计以及代码可读性将缩短开发时间。开发者可以将敏捷 开发的原理(如DRY,KISS或XP等)应用在其中,将重点放在应用逻辑层面上,而不用花费大量时间在编写没完没了的XML配置文件上。

Symfony旨在建立企业级的完善应用程序。也就是说,你拥有整个设置的控制权:从路径结构到外部库,几乎一切都可以自定义。为了符合企业的开发条例,Symfony还绑定了一些额外的工具,以便于项目的测试,调试以及归档。

7. Prado

PRADO团队由一些PRADO狂热者组成,这些成员开发并推动PRADO框架以及相关项目的进行。

PRADO的灵感起源于Apache Tapestry。从04年开始,PRADO成为SourceForge上的开源项目之一。这个项目目前进展到了3.x版本。

8. Zend

作为PHP艺术及精神的延伸,Zend框架的基础在于简单,面向对象的最佳方法,方便企业的许可协议,以及经过反复测试的快速代码库。Zend框架 旨在建造更安全,更可靠的Web 2.0应用及web服务,并不断从前沿厂商(如Google,Amazon,Yahoo,Flickr,StrikeIron和 ProgrammableWeb等)的API那里吸收精华。

9. ZooP

Zoop PHP框架,意为Zoop面向对象的PHP框架。

这是个稳定,可伸缩并可移植的框架。从诞生到现在的5年间,已经在不少产品开发中被使用。Zoop是一个快速,有效并干净的框架。它的伸缩性很好,你可以只安装你需要的功能。

对代码并不很熟悉的开发者也可以通过Zoop快速的开发安全的web应用。熟练的开发者则可以更加将Zoop的弹性利用到极致。

Zoop建议将display,logic以及数据层(MVC)分开使用。

Zoop由很多组件和项目集合而成,其中包括smarty和prototype AJAX框架,PEAR模块等。高效的核心组件提供了很多你原本需要自己编码来实现的功能。Zoop内置的纠错功能可以通过配置实现生产环境下的错误日志 生成,这个错误日志提供了很多信息,可读性很高,可以更轻易的寻找并排除错误。

Zoop的一个特别之处在于其GuiControls,在PHP中是一个相当革新的想法。它提供了很多form widgets与验证完整的集合到一起,并形成了一个可以轻松打造个性化GuiControls的框架。

10. QPHP

QPHP,意为快速PHP,它是一个与ASP.NET类似的MVC框架。基本上它是这样一个情况:

◆整合了Java和C#的美感

◆除去了在其他PHP框架中使用的Perl形式的意义含糊的语言

◆大量基于OOP的概念

原文:Top 10 PHP Frameworks by VictorDavtyan

论坛相关讨论帖地址:http://bbs.51cto.com/thread-575067-1.html