存档

文章标签 ‘PHP’

IIS6.0下PHP FastCGI环境搭建

2009年12月9日 没有评论

phpFastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。

今天介绍一下IIS6.0下PHP FastCGI环境搭建,一些资料称IIS下FastCGI的运行效率是ISPAI的两倍之多。不管到底怎么样,如果您还停留在ISAPI的运行环境下的话,一定要先测试再使用。免得造成不必要的麻烦。

第一步:下载安装FastCGI Extension for IIS

下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&displaylang=en

fastcgi

安装后确认IIS中,Web 服务扩展 – FastCGI Handler处于打开状态;

第二步:注册PHP到FastCGI

打开 C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件:

在文件最下方 [Types] 下添加以下配置:
[Types]
php=PHP

[PHP]
ExePath=C:\PHP\php-cgi.exe

注:ExePath这个路径为存放PHP文件夹的路径;

第三步:配置php.ini

主要是以下两项,其它的按个人需要进行配置:

extension_dir = “C:\PHP\ext”
fastcgi.impersonate = 1

第四步:配置IIS支持

右键网站 -> 属性 -> 主目录 -> 配置 -> 添加,如下图配置:

iis-fastcgi
可执行文件路径:C:\WINDOWS\system32\inetsrv\fcgiext.dll

最后:重启IIS;

cmd–iisreset;

phpinfo();

Server API  CGI/FastCGI

OK!

分类: 网站架构 标签: , ,

门户网站架构Nginx+Apache+MySQL+PHP+Memcached+Squid

2009年12月4日 没有评论

服务器的大用户量的承载方案

一、前言
二、编译安装
三、 安装MySQL、memcache
四、 安装Apache、PHP、eAccelerator、php-memcache
五、 安装Squid
六、后记

一、前言,准备工作

当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。
我们采用的架构图如下:
引用——– ———- ————- ——— ————
| 客户端 | ===> |负载均衡器| ===> |反向代理/缓存| ===> |WEB服务器| ===> |数据库服务器|
——– ———- ————- ——— ————
Nginx Squid Apache,PHP MySQL
eAccelerator/memcache准备工作:
引用服务器: Intel(R) Xeon(TM) CPU 3.00GHz * 2, 2GB mem, SCISC 硬盘
操作系统:CentOs4.4,内核版本2.6.9-22.ELsmp,gcc版本3.4.4
软件:
Apache 2.2.3(能使用MPM模式)
PHP 5.2.0(选用该版本是因为5.2.0的引擎相对更高效)
eAccelerator 0.9.5(加速PHP引擎,同时也可以加密PHP源程序)
memcache 1.2.0(用于高速缓存常用数据)
libevent 1.2a(memcache工作机制所需)
MySQL 5.0.27(选用二进制版本,省去编译工作)
Nginx 0.5.4(用做负载均衡器)
squid-2.6.STABLE6(做反向代理的同时提供专业缓存功能)

二、编译安装

 安装Nginx

1.) 安装
Nginx发音为[engine x],是由俄罗斯人Igor Sysoev建立的项目,基于BSD许可。据说他当初是F5的成员之一,英文主页:http://nginx.net。俄罗斯的一些大网站已经使用它超过两年多了,一直表现不凡。
Nginx的编译参数如下:
[root@localhost]#./configure –prefix=/usr/local/server/nginx –with-openssl=/usr/include \
–with-pcre=/usr/include/pcre/ –with-http_stub_status_module –without-http_memcached_module \
–without-http_fastcgi_module –without-http_rewrite_module –without-http_map_module \
–without-http_geo_module –without-http_autoindex_module
在这里,需要说明一下,由于Nginx的配置文件中我想用到正则,所以需要 pcre 模块的支持。我已经安装了 pcre 及 pcre-devel 的rpm包,但是 Ngxin 并不能正确找到 .h/.so/.a/.la 文件,因此我稍微变通了一下:
[root@localhost]#mkdir /usr/include/pcre/.libs/
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.a
[root@localhost]#cp /usr/lib/libpcre.a /usr/include/pcre/.libs/libpcre.la
然后,修改 objs/Makefile 大概在908行的位置上,注释掉以下内容:
./configure –disable-shared
接下来,就可以正常执行 make 及 make install 了。
2.) 修改配置文件 /usr/local/server/nginx/conf/nginx.conf
以下是我的 nginx.conf 内容,仅供参考:
#运行用户
user nobody nobody;
#启动进程
worker_processes 2;
#全局错误日志及PID文件
error_log logs/error.log notice;
pid logs/nginx.pid;
#工作模式及连接数上限
events {
use epoll;
worker_connections 1024;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型
include conf/mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$gzip_ratio”‘;
log_format download ‘$remote_addr – $remote_user [$time_local] ‘
‘”$request” $status $bytes_sent ‘
‘”$http_referer” “$http_user_agent” ‘
‘”$http_range” “$sent_http_content_range”‘;
#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
#开启gzip模块
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
#设定access log
access_log logs/access.log main;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
#本机上的Squid开启3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
#设定虚拟主机
server {
listen 80;
server_name 192.168.8.1 www.enew.com.cn;
charset gb2312;
#设定本虚拟主机的访问日志
access_log logs/www.enew.com.cn.access.log main;
#如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid
#如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好
location ~ ^/(img|js|css)/ {
root /data3/Html;
expires 24h;
}
#对 “/” 启用负载均衡
location / {
proxy_pass http://mysvr;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#设定查看Nginx状态的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic “NginxStatus”;
auth_basic_user_file conf/htpasswd;
}
}
}
备注:conf/htpasswd 文件的内容用 apache 提供的 htpasswd 工具来产生即可,内容大致如下:
3.) 查看 Nginx 运行状态
输入地址 http://192.168.8.1/NginxStatus/,输入验证帐号密码,即可看到类似如下内容:
Active connections: 328
server accepts handled requests
9309 8982 28890
Reading: 1 Writing: 3 Waiting: 324
第一行表示目前活跃的连接数
第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。
第四行是Nginx的队列状态

安装MySQL、memcache

1.) 安装MySQL,步骤如下:
[root@localhost]#tar zxf mysql-standard-5.0.27-linux-i686.tar.gz -C /usr/local/server
[root@localhost]#mv /usr/local/server/mysql-standard-5.0.27-linux-i686 /usr/local/server/mysql
[root@localhost]#cd /usr/local/server/mysql
[root@localhost]#./scripts/mysql_install_db –basedir=/usr/local/server/mysql \
–datadir=/usr/local/server/mysql/data –user=nobody
[root@localhost]#cp /usr/local/server/mysql/support-files/my-large.cnf \
/usr/local/server/mysql/data/my.cnf
2.) 修改 MySQL 配置,增加部分优化参数,如下:
[root@localhost]#vi /usr/local/server/mysql/data/my.cnf
主要内容如下:
[mysqld]
basedir = /usr/local/server/mysql
datadir = /usr/local/server/mysql/data
user = nobody
port = 3306
socket = /tmp/mysql.sock
wait_timeout = 30
long_query_time=1
#log-queries-not-using-indexes = TRUE
log-slow-queries=/usr/local/server/mysql/slow.log
log-error = /usr/local/server/mysql/error.log
external-locking = FALSE
key_buffer_size = 512M
back_log = 400
table_cache = 512
sort_buffer_size = 2M
join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 32
query_cache_limit = 2M
query_cache_size = 64M
thread_concurrency = 4
thread_stack = 128K
tmp_table_size = 64M
binlog_cache_size = 2M
max_binlog_size = 128M
max_binlog_cache_size = 512M
max_relay_log_size = 128M
bulk_insert_buffer_size = 8M
myisam_repair_threads = 1
skip-bdb
#如果不需要使用innodb就关闭该选项
#skip-innodb
innodb_data_home_dir = /usr/local/server/mysql/data/
innodb_data_file_path = ibdata1:256M;ibdata2:256M:autoextend
innodb_log_group_home_dir = /usr/local/server/mysql/data/
innodb_log_arch_dir = /usr/local/server/mysql/data/
innodb_buffer_pool_size = 512M
innodb_additional_mem_pool_size = 8M
innodb_log_file_size = 128M
innodb_log_buffer_size = 8M
innodb_lock_wait_timeout = 50
innodb_flush_log_at_trx_commit = 2
innodb_file_io_threads = 4
innodb_thread_concurrency = 16
innodb_log_files_in_group = 3
以上配置参数请根据具体的需要稍作修改。运行以下命令即可启动 MySQL 服务器:
/usr/local/server/mysql/bin/mysqld_safe \
–defaults-file=/usr/local/server/mysql/data/my.cnf &
由于 MySQL 不是安装在标准目录下,因此必须要修改 mysqld_safe 中的 my_print_defaults 文件所在位置,才能通过
mysqld_safe 来启动 MySQL 服务器。
3.) memcache + libevent 安装编译安装:
[root@localhost]#cd libevent-1.2a
[root@localhost]#./configure –prefix=/usr/ && make && make install
[root@localhost]#cd ../memcached-1.2.0
[root@localhost]#./configure –prefix=/usr/local/server/memcached –with-libevent=/usr/
[root@localhost]#make && make install
备注:如果 libevent 不是安装在 /usr 目录下,那么需要把 libevent-1.2a.so.1 拷贝/链接到 /usr/lib 中,否则
memcached 无法正常加载。运行以下命令来启动 memcached:
[root@localhost]#/usr/local/server/memcached/bin/memcached \
-l 192.168.8.1 -d -p 10000 -u nobody -m 128
表示用 daemon 的方式启动 memcached,监听在 192.168.8.1 的 10000 端口上,运行用户为 nobody,为其分配
128MB 的内存。

安装Apache、PHP、eAccelerator、php-memcache

四、) 安装Apache、PHP、eAccelerator、php-memcache由于Apache
2下的php静态方式编译十分麻烦,因此在这里采用动态模块(DSO)方式。1.) 安装Apache 2.2.3
[root@localhost]#./configure –prefix=/usr/local/server/apache –disable-userdir –disable-actions \
–disable-negotiation –disable-autoindex –disable-filter –disable-include –disable-status \
–disable-asis –disable-auth –disable-authn-default –disable-authn-file –disable-authz-groupfile \
–disable-authz-host –disable-authz-default –disable-authz-user –disable-userdir \
–enable-expires –enable-module=so
备注:在这里,取消了一些不必要的模块,如果你需要用到这些模块,那么请去掉部分参数。
2.) 安装PHP 5.2.0
[root@localhost]#./configure –prefix=/usr/local/server/php –with-mysql \
–with-apxs2=/usr/local/server/apache/bin/apxs –with-freetype-dir=/usr/ –with-png-dir=/usr/ \
–with-gd=/usr/ –with-jpeg-dir=/usr/ –with-zlib –enable-magic-quotes –with-iconv \
–without-sqlite –without-pdo-sqlite –with-pdo-mysql –disable-dom –disable-simplexml \
–enable-roxen-zts
[root@localhost]#make && make install
备注:如果不需要gd或者pdo等模块,请自行去掉。
3.) 安装eAccelerator-0.9.5
[root@localhost]#cd eAccelerator-0.9.5
[root@localhost]#export PHP_PREFIX=/usr/local/server/php
[root@localhost]#$PHP_PREFIX/bin/phpize
[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config
[root@localhost]#make && make install
4.) 安装memcache模块
[root@localhost]#cd memcache-2.1.0
[root@localhost]#export PHP_PREFIX=/usr/local/server/php
[root@localhost]#$PHP_PREFIX/bin/phpize
[root@localhost]#./configure –enable-eaccelerator=shared –with-php-config=$PHP_PREFIX/bin/php-config
[root@localhost]#make && make install
5.) 修改 php.ini 配置然后修改 php.ini,修改/加入类似以下内容:
extension_dir = “/usr/local/server/php/lib/”
extension=”eaccelerator.so”
eaccelerator.shm_size=”32″ ;设定eaccelerator的共享内存为32MB
eaccelerator.cache_dir=”/usr/local/server/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=”*.php”
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”3600″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″
eaccelerator.log_file = “/usr/local/server/apache/logs/eaccelerator_log”
eaccelerator.allowed_admin_path = “/usr/local/server/apache/htdocs/ea_admin”
extension=”memcache.so”
在这里,最好是在apache的配置中增加默认文件类型的cache机制,即利用apache的expires模块,新增类似如下几行:
ExpiresActive On
ExpiresByType text/html “access plus 10 minutes”
ExpiresByType text/css “access plus 1 day”
ExpiresByType image/jpg “access 1 month”
ExpiresByType image/gif “access 1 month”
ExpiresByType image/jpg “access 1 month”
ExpiresByType application/x-shockwave-flash “access plus 3 day”
这么设置是由于我的这些静态文件通常很少更新,因此我选择的是”access”规则,如果更新相对比较频繁,可以改用”modification”规则;或者也可以用”access”规则,但是在文件更新的时候,执行一下”touch”命令,把文件的时间刷新一下即可。

 安装Squid

五、) 安装Squid
[root@localhost]#./configure –prefix=/usr/local/server/squid –enable-async-io=100 –disable-delay-pools –disable-mem-gen-trace –disable-useragent-log –enable-kill-parent-hack –disable-arp-acl –enable-epoll –disable-ident-lookups –enable-snmp –enable-large-cache-files –with-large-files
[root@localhost]#make && make install
或使用如下安装方法:
[root@localhost]#yum install squid
如果是2.6的内核,才能支持epoll的IO模式,旧版本的内核则只能选择poll或其他模式了;另外,记得带上支持大文件的选项,否则在access
log等文件达到2G的时候就会报错。设定 squid 的配置大概如下内容:
#设定缓存目录为 /var/cache1 和 /var/lib/squid,每次处理缓存大小为128MB,当缓存空间使用达到95%时
#新的内容将取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动
#/var/cache1 最大1024MB,/var/lib/squid 最大 5000MB,都是 16*256 级子目录
cache_dir aufs /var/cache1 1024 16 256
cache_dir aufs /var/lib/squid 5000 16 256
cache_mem 128 MB
cache_swap_low 90
cache_swap_high 95
#设置存储策略等
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 80 KB
ipcache_size 1024
ipcache_low 90
ipcache_high 95
cache_replacement_policy lru
memory_replacement_policy lru
#设置超时策略
forward_timeout 20 seconds
connect_timeout 15 seconds
read_timeout 3 minutes
request_timeout 1 minutes
persistent_request_timeout 15 seconds
client_lifetime 15 minutes
shutdown_lifetime 5 seconds
negative_ttl 10 seconds
#限制一个ip最大只能有16个连接
acl OverConnLimit maxconn 16
http_access deny OverConnLimit
#限制baidu spider访问
#acl AntiBaidu req_header User-Agent Baiduspider
#http_access deny AntiBaidu
#常规设置
visible_hostname cache.enew.com
cache_mgr webmaster@enew.com
client_persistent_connections off
server_persistent_connections on
cache_effective_user nobody
cache_effective_group nobody
tcp_recv_bufsize 65535 bytes
half_closed_clients off
#设定不缓存的规则
hierarchy_stoplist cgi-bin
acl QUERY urlpath_regex cgi-bin
cache deny QUERY
#不要相信ETag 因为有gzip
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
#设置access log,并且令其格式和apache的格式一样,方便awstats分析
emulate_httpd_log on
logformat apache %>a %ui %un [%tl] “%rm %ru HTTP/%rv” %Hs %
初始化和启动squid
[root@localhost]#/usr/local/server/squid/sbin/squid -z
[root@localhost]#/usr/local/server/squid/sbin/squid
第一条命令是先初始化squid缓存哈希子目录,只需执行一次即可。

六、后记

六、后记一、)想要启用squid所需的改变想要更好的利用squid的cache功能,不是把它启用了就可以的,我们需要做以下几个调整:
1、启用apache的 mod_expires 模块,修改 httpd.conf,加入以下内容:
#expiresdefault “modification plus 2 weeks”expiresactive
onexpiresbytype text/html “access plus 10 minutes”expiresbytype
image/gif “modification plus 1 month”expiresbytype image/jpeg “modification
plus 1 month”expiresbytype image/png “modification plus 1
month”expiresbytype text/css “access plus 1 day”expiresbytype
application/x-shockwave-flash “access plus 3 day”
以上配置的作用是规定各种类型文件的cache规则,对那些图片/flash等静态文件总是cache起来,可根据各自的需要做适当调整。
2、修改 php.ini 配置,如下:
session.cache_limiter = nocache
以上配置的作用是默认取消php中的cache功能,避免不正常的cache产生。
3、修改应用程序例如,有一个php程序页面static.php,它存放着某些查询数据库后的结果,并且数据更新并不频繁,于是,我们就可以考虑对其cache。只需在static.php中加入类似如下代码:
header(‘Cache-Control: max-age=86400
,must-revalidate’);header(‘Pragma:’);header(‘Last-Modified: ‘ .
gmdate(‘D, d M Y H:i:s’) . ‘ GMT’ );header(“Expires: ” .gmdate (‘D, d M Y
H:i:s’, time() + ’86400′ ). ‘ GMT’);
以上代码的意思是,输出一个http头部信息,让squid知道本页面默认缓存时长为一天。
二、)squidclient简要介绍
*取得squid运行状态信息: squidclient -p 80 mgr:info
*取得squid内存使用情况: squidclient -p 80 mgr:mem
*取得squid已经缓存的列表: squidclient -p 80 mgr:objects. use it carefully,it may crash
*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
*强制更新某个url:squidclient -p 80 -m PURGE http://www.enew.com.cn/static.php
*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:

原文地址:http://blog.csdn.net/rushcc2006/archive/2009/11/11/4796892.aspx

主流WEB开发语言简单对比

2009年9月15日 没有评论

随着时间的飞逝,随着岁月的流失。从世界上第一台计算机ENIAC诞生至今,已经有将近半个世纪了。经过这半个世纪的语言发展,我们所接触的语言基本上都是高级语言了。这篇文章主要对现在比较主流的WEB开发语言,做一个简单的对比。

JAVA

JAVA

  • 简介:

Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。

  • IDE:

Eclipse、Myeclipse、Jbuilder2008、Jdeveloper、Netbeans等,很多!

  • 版本历史:

1995年5月23日,Java语言诞生
1996年1月,第一个JDK-JDK1.0诞生
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
1996年9月,约8.3万个网页应用了JAVA技术来制作
1997年2月18日,JDK1.1发布
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
1997年9月,JavaDeveloperConnection社区成员超过十万
1998年2月,JDK1.1被下载超过2,000,000次
1998年12月8日,JAVA2企业平台J2EE发布
1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
2000年5月8日,JDK1.3发布
2000年5月29日,JDK1.4发布
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
2001年9月24日,J2EE1.3发布
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
2006年12月,SUN公司发布JRE6.0
目前JDK7.0已经在研发中,已经有测试版在 https://jdk7.dev.java.net/ 可以下载使用

  • 应用方面:

可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作。

PHP

PHP

  • 简介

PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。

  • IDE

Eclipse、Komodo、PHP 设计器、PhpED、PHPEdit、Zend Studio等。

  • 版本历史

在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月释出了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在1998年6月正式释出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 释出后开始改写 PHP 的核心,这个在1999年释出的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。

在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式释出,2004年7月13日则释出了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。

2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。

  • 应用方面

PHP常见的模板引擎

Smarty
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。
Heyes Template Class
一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。
FastTemplate
一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。
ShellPage
一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。
STP Simple Template Parser
一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。
OO Template Class
一个你可以用在自己程序中的面向兑现的模板类。
SimpleTemplate
一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。
bTemplate
短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。
Savant
一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。
ETS – easy template system
可以使用完全相同数据重组模板的模板系统。
EasyTemplatePHP
适用于你的站点的一个简单但是强大的模板系统。
vlibTemplate
一个快速、全能的模板系统,它包含一个缓存和调试类。
AvanTemplate
多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。
Grafx Software’s Fast Template
一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。
TemplatePower
一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。
TagTemplate
这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。
htmltmpl: templating engine
一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。
PHP Class for Parsing Dreamweaver templates
一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。
MiniTemplator (Template Engine)
针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。
Layout Solution
简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。
Cached Fast Template
它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。
TinyButStrong
一个支持MySQL, Odbc, Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。
Brian Lozier’s php based template engine
只有2K大小,非常快并且是面向对象设计。
WACT
一个从设计中分离代码的模板引擎。
PHPTAL
一个PHP下面的XML/XHTML模板库。

ASP.NET

ASP.NET

  • 简介

ASP.net构架是可以用Microsoft(R)公司最新的产品 Visual Studio.net开发环境进行开发,WYSIWYG(What You See Is What You Get所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。

  • IDE

Visual Studio

  • 应用

WEB、应用程序

LAMP网站架构方案分析

2009年8月28日 没有评论

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架, 该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是 国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软 的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。

对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能 的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。

操作系统

Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性 和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。

CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。

LAMP网站架构图

LAMP网站架构图

Web服务器、缓存和PHP加速

Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web 服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。

Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服 务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持Windows,只能在包括Linux等环境下安 装,也不支持PHP和CGI等,但支持负载均衡和容错,可和Apache配合使用,是轻量级的HTTP服务器的首选。

Web服务器的缓 存也有多种方案,Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。 Squid Cache是一个Web缓存服务器,支持高效的缓存,可以作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,把Squid放在 Apache的前端来缓存Web服务器生成的动态内容,而Web应用程序只需要适当地设置页面实效时间即可。如访问量巨大则可考虑使用memcache作 为分布式缓存。

PHP的加速使用eAccelerator加速器,eAccelerator是一个自由开放源码PHP加速器,优化和动 态内容缓存,提高了性能PHP脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。 使PHP程序代码执效率能提高1-10倍。

具体的解决方案有以下几种:

1、squid + Apache + PHP + eAccelerator

使用Apache负载PHP,使用squid进行缓存,html或图片的请求可以直接由squid返回给用户。很多大型网站都采用这种架构。

2、nginx/Apache + PHP(fastcgi) + eAccelerator

使用nginx或Apache负载PHP,PHP使用fastcgi方式运行,效率较高。

3、nginx + Apache + PHP + eAccelerator

此方案综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,Apache端口不对外开放。

数据库

开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问 量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。

当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。

总的来说,LAMP架构的网站性能会远远优于Windows IIS + ASP + Access(例如月光博客)这样的网站,可以负载的访问量也非常大,国内的大量个人网站如果想要支撑大访问量,采用LAMP架构是一个不错的方案。

综上所述,基于LAMP架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是Web网络应用和环境的优秀组合。

原创文章如转载,请注明:转载自月光博客 [ http://www.williamlong.info/ ]

本文链接地址:http://www.williamlong.info/archives/1908.html

分类: 网站架构 标签: , , ,

Facebook 的 PHP 性能与扩展性

2009年4月30日 没有评论

炙手可热的 Facebook 是用 PHP 开发的。随着一些技术交流,逐渐能看到 Facebook 技术人员分享的经验。近期这个 geekSessions 站点上看到 Facebook 的 Lucas Nealan 分享的文档比较有参考价值。
Cache 为 王

任何一个成功的站点都有一套最合适自己的 Cache 策略。

facebook cache level

Note:这个层次图画的稍微有点问题,不是严格从上到下的。

The Alternative PHP Cache , APC

Facebook 平均每个用户每天要访问超过 50 个页面,PHP的页面载入时间的优化就比较重要了。在 PHP Cache 层,Facebook 采用了 APC关于facebook APC 介绍的PDF.

Lucas Nealan 的 PPT 举了一个例子,一个页面显示的时间从 4000 多毫秒降到了 100 多 毫秒。在 apc.stat 关闭的模式下,性能还要更好一些。不过需要重启动或用apc_cache_clear() 来通知更新。

php-apc
Memcached 层

APC Cache 的是非用户相关的信息,而用户相关的数据 Cache 当然是在 Memcached 中。

Facebook 部署了超过 400 台 Memcached 服务器,超过 5TB 的数据在 Memcached 中。这是当前世界上最大的 Memcached 集群了。也给 Memcached 贡献了不少代码,包括 UDP 的支持和性能上的提升(性能提升超过 20%)。
程序 Profiling

Facebook 开发人员大量采用 Callgrind 、APD、 xdebug 、KCachegrind 等工具进行基准性能测试。任何一个 Web 项目,这也是不可或缺,也是比较容易忽略的一环。所有开发人员都应该具备熟练使用这些工具的能力才好。

补充一下:语言的选择

为什么 Facebook 选择 PHP 而不是其他语言? 用Flickr 的 Cal Henderson 这句话就能说明了: “Languages’s don’t Scale, Architecture Scale”。

从 80-20 的原则看,APC 和 Memcached 是最主要的。在这两个环节上下功夫,受益/开销比要大于另外几个环节。

(上面的图是从 Lucas Nealan 的文档截的,版权所有是他的)

作者: Fenng
网址: http://www.dbanotes.net/arch/facebook_php.html

PHP和MySQL Web开发(原书第3版)

2009年4月29日 2 条评论
PHP和MySQL Web开发(原书第3版)

PHP和MySQL Web开发(原书第3版)

《PHP和MySQL Web开发(原书第3版)》

又名: PHP and MySQL Web Development, Third Editio

作者: Luke Welling / Laura Thomson
译者: 武欣 / 邵煜
ISBN: 9787111154709
页数: 666
出版社: 机械工业出版社
定价: 78.0
装帧: 平装
出版年: 2005-6-1

简介   :
本书将PHP开发与MySQL应用相结合,分别对PHP和MySQL做了深入浅出的分析,不仅介绍PHP和MySQL的一般概念,而且对PHP和MySQL的Web应用做了较全面的阐述,并包括几个经典且实用的例子。
作者简介   :
Laura Thomson是澳大利亚墨尔本RMIT大学计算机科学信息技术学院的讲师。她也是Tangled Web Design公司的合伙人。Laura曾经在Telstra和波士顿顾问集团工作过。她获得了应用科学(计算机科学)的学士学位和工程学(计算机系统工程)学士学位,目前她正在攻读适应性Web站点的博士学位。

分类: 读书 标签: , , , ,

隐藏apache和php的版本信息

2009年4月24日 没有评论

隐藏apache和php的版本信息
web server避免一些不必要的麻烦,可以把apache和php的版本信息不显示

隐藏 Apache 版本信息
/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf

ServerTokens ProductOnly
ServerSignature Off

重启 apache
现在 http 头里面只看到:
Server: Apache

隐藏 PHP 版本
php.ini

expose_php On
改成
expose_php Off

重启apache后,php版本在http头中隐藏了。

详解 :

为了防止某些别有用心的家伙窥视我们的服务器,应该做些什么.
我们来看一下相关的2个参数,分别为ServerTokens和ServerSignature,通过控制这2个阀门应该就能起到一些作用,比如我们可以在配置文件中这么写:
ServerTokens Prod
ServerSignature Off

ServerTokens
用于控制服务器是否相应来自客户端的请求,向客户端输出服务器系统类型或内置模块等重要的系统信息。在主配置文件中提供全局控制默认阀值为”Full”(ServerTokens Full),所以,如果你的Linux发行版本没有更改过这个阀值的话,所有与你的系统有关的敏感信息都会向全世界公开。比如RHEL会将该阀值更改为”ServerTokens OS”,而Debian依然使用默认的”Full”阀值
以apache-2.0.55为例,阀值可以设定为以下某项(后面为相对应的Banner Header):
Prod >>> Server: Apache
Major >>> Server: Apache/2
Minor >>> Server: Apache/2.0
Minimal >>> Server: Apache/2.0.55
OS >>> Server: Apache/2.0.55 (Debian)
Full (or not specified) default >>> Server: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

ServerSignature
控制由系统生成的页面(错误信息,mod_proxy ftp directory listing等等)的页脚中如何显示信息。

可在全局设置文件中控制,或是通过.htaccess文件控制
默认为”off”(ServerSignature Off),有些Linux发行版本可能会打开这个阀门,比如Debian在默认的虚拟主机上默认将这个阀门设置为开放
全局阀门的阀值会被虚拟主机或目录单位的配置文件中的阀值所覆盖,所以,必须确保这样的事情不应该发生
可用的阀值为下面所示:
Off (default): 不输出任何页脚信息 (如同Apache1.2以及更旧版本,用于迷惑)
On:输出一行关于版本号以及处于运行中的虚拟主机的ServerName (2.0.44之后的版本,由ServerTokens负责是否输出版本号)
EMail: 创建一个发送给ServerAdmin的”mailto”

注意*上述关于如何设置2个阀门从而尽量减少敏感信息泄露的方法,并不会使你的服务器真的更安全,如果你现在使用的版本比较旧,请务必尽快将系统升级,降低被蠕虫攻击的风险。

分类: 网络安全 标签: , ,

PHP IDE 选择 – eclipse zend 等 哪种好?

2009年3月26日 没有评论

发掘集成开发环境(IDE)的所有用途,并比较 7 种流行的 IDE 的成本和优势。

编写关于 PHP 的系列文章让我更加深刻地了解了 PHP 开发人员的世界。我和许多 PHP 程序员交谈过,最令我惊奇的是只有很少的人使用 IDE。大多数程序员使用文本编辑器,比如 Microsoft® Windows® 上的记事本、Emacs 或者 Vim。

我提到的这些文本编辑器(以及我没提到)都是很不错的 —— 我不想讨论哪个编辑器更好。但是,我要强调的是不使用文本编辑器会使您对 PHP 代码有更深的见解。几乎所有人都将 PHP 项目视为只不过是文件目录而已(这种看法十分片面)。现在就让我带您进入 IDE 的世界,向您展示 IDE 能够 —— 或者应该 —— 给您带来什么,并向您介绍七个最流行的 IDE。

什么是 IDE?

简而言之,IDE 为编码工作提供了一站式服务。IDE 包括一个编辑器,在此编辑器内可以编辑代码、调试代码、在浏览器(通常是嵌入式的)中查看代码和签入和签出源码控制。为了支持这些功能,IDE 拥有一套在基本编辑器(比如记事本或者 Vim)中所找不到的特性。当然,您可以通过扩展编辑器来实现这些功能,但是 IDE 在一个精简软件包中囊括了所有这些功能 —— 并都已预配置:

项目
IDE 的一个关键特性是它把一个 PHP 应用程序看作是一个项目,而不仅仅是一组文件。这个概念 —— 项目 —— 维护额外的信息,比如源码控制的配置、用于调试的数据库设置,以及某一关键目录所在位置。
调试
另一个方便的特性是集成调试。使用这个功能,可以在编辑器中设置断点,当 PHP 解释程序执行到这个脚本时就会停止。从断点开始,就可以检查局部变量的值,在代码中诊断问题。在代码中可以使用 echo 语句来检查值或者也可以使用错误日志获得变量的值。
代码智能
PHP 是一种非常规则的编程语言,这意味着它遵循着简单的模式。这些模式不仅使代码易于编写,也使 IDE 在项目中检查代码变得很容易。此外,它们可以通过显示检查结果帮助您编写程序。例如,如果在项目中定义了一个名为 MyClass 的类,在键入关键词 new 时,IDE 会立即提供一个包括 MyClass 作为选项的弹出窗口。当使用那种类型的对象时,IDE 就会显示它的可用方法和实例变量。当开始键入一个函数命令时,IDE 就会显示它的可用参数。公正地说,这是应该使用 IDE 而不是文本编辑器的首要原因。这种代码智能可以有效减少敲错类名、方法名和参数。
类视图
IDE 中的代码智能引擎产生的另一个作用是 IDE 可以产生项目的 类视图。系统不是显示文件,而是显示已经定义的不同的类,而不管它们所在的文件。当单击类时,编辑器访问相应文件并显示相应类、方法或者实例变量。这在大项目中是一种非常好的导航方法。
多语言支持
这里提到的每种 IDE 不仅支持 PHP 而且支持相关语言集:JavaScript、Structured Query Language(SQL)、Hypertext Markup Language(HTML)和 Cascading Style Sheets(CSS)。因为 HTML 和 CSS 比较简单,所以 IDE 对它们的支持是最好的。对于 JavaScript 的支持经常会突出语法,但是支持比不支持要好。
源码控制
这里评价的所有 IDE 都支持一些与源码控制系统的连接,允许随着时间维护项目中的文件版本。可以标记文件的特别版本为发布版本,这样在需要撤销改动的时候就可以恢复。在团队环 境中使用源码控制系统是很关键的,即使对于个人使用也很重要。当磁盘瘫痪或者客户突然想要以前的版本而不是现在的版本的时候,一个好的源码控制系统就可以 发挥作用了。大多数的 IDE 都支持 Concurrent Version System (CVS) 和 Subversion,它们都是开源控制系统。其中一种 IDE 支持 Perforce —— 一款商业源码控制系统。
FTP/SFTP 集成
与源码控制相关的一种功能是在服务器中对于最新的代码使用 FTP 。这比使用 FTP 客户机或者自己打包文件并发送给服务器然后再解包要容易许多。
数据库导航
一个非基本但十分有用的特性是数据库导航。使用这个特性,可以浏览应用程序访问的数据库、找到表格和字段名并返回查询结果。一些系统甚至可以自动写入一些数据库访问代码。
集成 Web 浏览器
一些 IDE 支持集成 Web 浏览器,可以直接导航到正在使用指定的附加参数编辑的页面,这个浏览器可以宿主在 IDE 内,也可以外部调用。诚实地讲,我并不大喜欢集成浏览器,因为我不介意在编辑代码和查看结果这两个独立的应用程序之间切换。但是我知道它确实有一定的作 用,但您不必一定要使用它。
片段
在所有这些 IDE 中我发现的最后一个特性是对于整段和定制代码片段的支持。片段 是完成小任务(比如在一些输入中运行常规表达式、连接到数据库和查询数据库)的小部分代码。

以上总结了目前从购买的或者开源的 IDE 中可以预期的核心特性。接下来,将会介绍一些流行的 IDE,展示一些 IDE 图片,并将解释它们所支持的功能及其成本。

Eclipse

在 Eclipse 开发平台中有两个插件支持 PHP。第一个 PHP IDE 项目是 Eclipse Foundation 项目,这意味着它在 Eclipse 许可范围内发布,并使用 Eclipse Foundation 工具和方法开发。

另一个是 PHPEclipse,它是独立开发的。因为使用 Eclipse,所以这两个插件都可以在三大操作系统中运行:Windows、Linux® 和 Mac OS X。您可以只下载这两个插件(如果已经使用 Eclipse),或者下载包含所需要的全部内容的 pre-fab 版本。

这两个插件都支持核心 IDE 特性。特别是代码智能特性,它十分强大,可以在需要的时候弹出并显示所有需要的类、方法和参数信息。

图 1 显示了 Mac OS X 上运行的 PHPEclipse。左边是在项目中文件的项目视图。下面是类视图,显示所有已经定义的类。中间是代码。可以同时在多个选项卡中打开多个文件。右边是调试和浏览的面板。这是常用的 PHPEclipse 用户界面。
图 1. OS X 上的 PHPEclipse
OS X 上的 PHPEclipse
图 2 显示了来自 Eclipse Foundation 的 PHP IDE 项目插件。
图 2. OS X 上的 PHP IDE 项目
OS X 上的 PHP IDE 项目
如果您不能看出区别,没有关系。这两个插件看起来确实非常类似,因为它们都依靠 Eclipse 平台呈现代码浏览和智能特性。Eclipse 插件 GUI 能够保持连贯性是件很好的事情。

我没有发现哪一个插件可以把您锁定在某一个 Eclipse 项目中。您可以经常地将一个插件换成另一个插件。在我有限的测试中,我更喜欢 PHP IDE 项目插件,因为我感觉它集成得更好,而且代码智能特性的性能似乎更快捷。试试这两个插件,看看您更喜欢哪一个。

这两个插件的缺点是 UI 不是为 PHP 量身订做的,原因是 Eclipse 可以用于几乎所有的编程语言。结果是,Eclipse 的术语最初有些另类。如果您刚开始学习 Eclipse,那么这些插件的学习比其他 IDE 更难一些。但是,如果已经了解 Eclipse,那么您就能比较快地熟悉 PHPEclipse 或者 PHP IDE 项目。

Eclipse 和这些插件的最大优点是什么?它们是免费的,而且稳定、可靠。哦,我提到它们是免费的吗?

Komodo

下一个要介绍的是 ActiveState 的 Komodo IDE。这个 IDE 在 Windows、Mac OS X 和 Linux 上运行,并支持通用的开源语言 —— Perl、PHP 和 Ruby。代码智能引擎非常可靠。它扫描所有语言安装找到定制扩展,比如 PEAR 模块。在项目方面,它支持与 CVS、Subversion 和 Perforce 的集成,也允许直接向服务器 FTP 传递代码。

图 3 显示了在 Windows 上运行的 Komodo。左边是类视图,右边是项目视图。中间的主要部分是代码视图。下面是调试用的断点、命令输出等等。对于所有这些系统,都可以根据需要定制 UI 。
图 3. 在 Windows 上运行的 Komodo
在 Windows 上运行的 Komodo
Komodo 是一个商业产品。在我写作本文的时候,这款 IDE 有个人版(US$29.95)和专业版(US$299.95)两个版本可选。它的一个独特的特性是常规表达式调试器。不管您是常规表达式的新手还是已经开 始涉足高级常规表达式特性,这点购买的投入都是很值得的。

它的缺点是没有数据库集成(至少我没有找到),而且我还遇到了代码智能不总是在想要的时候弹出的小问题。但是,总的来说,Komodo 还堪称是一款健壮的、特色丰富的、可靠的 PHP IDE。

PHP 设计器

PHP 设计器与其他 IDE 不太相同。当然,它支持有限的代码智能。但是,它更集中于 PHP Web 应用程序的设计方面。这一点在其集成的浏览器上可见一斑,该浏览器特别地采用了像素标尺用于帮助在页面上定位元素。

图 4 显示了运行的 PHP 设计器。
图 4. 在 Windows 上的 PHP 设计器
在 Windows 上的 PHP 设计器
PHP 设计器中的 PHP 的代码智能和调试特性不是很显著,而对 HTML、CSS 和 JavaScript 的代码智能支持上要相对更强一些。PHP 设计器介于程序员使用的 IDE (主要侧重于代码)和 Adobe Dreamweaver (更侧重于设计)之间。如果您正在寻找这类中间产品,那么 PHP 设计器很值得考虑,因为 IDE 对于个人使用是免费的,而其专业版也只需 US$55。

PhpED

NuSphere 的只用于 Windows 的 PhpED 在所有这里介绍的 IDE 中特性是最丰富的。它有一个很好的内部调试器,并为了更容易地访问页面调试而把调试工具条放到了 Microsoft Internet Explorer®之内。

图 5 显示了在 Windows 中使用 PHPEd 开发 PHP 应用程序。在最左边是项目的文件视图。右边紧挨着的是类视图,最右边是代码视图。下面是输出状态。您可能已经注意到,所有这些 IDE 都遵循着相同的基本设计风格。
图 5. 在 Windows 中的 PhpED
在 Windows 中的 PhpED
PhpED 的突出特性包括一个很棒的调试器、优秀的数据库访问、较好的代码智能特性以及集成的 PHP 帮助。PhpED 的价格范围从基础版本的 US$119 到专业版本的 US$495。另外还有试用版本可用。

PHPEdit

来自 WaterProof Software 的 PHPEdit 感觉像是应用于 PHP 的 Microsoft msdev 环境 —— 这是个不错的事情。PHPEdit 是仅用于 Windows 的 IDE,很容易设置。它甚至还有 PHP 的版本。在 PHP、CSS 和 HTML 的代码智能方面它做得很好,但是却不提供对 JavaScript 的代码智能的支持。图 6 显示了运行的 PHPEdit。
图 6. 在 Windows 中的 PHPEdit
在 Windows 中的 PHPEdit
为了便于部署,PHPEdit 可以连接到 CVS 和 Subversion,以及 FTP 和它自己专有的 ezDeployment 系统。除了代码智能特性,为了加速开发,这款 IDE 有一个极好的代码示例整体模板库,您还可以向库里面添加内容。PHPEdit 的评估版本可以免费使用,要得到正式版本,需要 US$89。

Zend Studio

最后,我们谈谈 Zend Studio,它被最后列出只是因为它以 Z 开头。它可能应该是您第一个想到的。为什么?因为它来自 Zend —— PHP 幕后的精英团队。 而且它真的是很不错。它运行于三大系统:Windows、Mac OS X 和 Linux。而且绝对能够提供您所需要的一切:PHP V4、PHP V5 等等。它的下载需要花很长时间,但是非常值得。

作为 IDE,Zend Studio 是最好的。它提供所有想在内置库和定制代码中拥有的代码智能特性。它还有非常好的调试功能,而且极易设置。要把代码放到存储库(repository) 中,Zend Studio 会连接到 CVS 和 Subversion。要把代码放到服务器上,有集成 FTP 可以使用。Zend Studio 非常适合 Macintosh,如图 7 所示。
图 7. 在 Mac 上的 Zend Studio
在 Mac 上的 Zend Studio

在其他一些 IDE 中,代码片段是内置的以使代码编制更为容易。这款 IDE 也直接集成了数据库以给出可用的表格和字段。

Zend Studio 的标准版需要 US$99,专业版需要 US$299。我在这里提到的某些特性在标准版本中没有包含。Zend Studio 试用版本可以免费使用。

结束语

有许多极好的 IDE 可供选择 —— 其中一些甚至是免费的 —— 您尽可以选择一个试用一下,如果您是专业人员,就更应如此。您可能需要支付公司或者个人的顾问费用,也可能要花钱购买必需的商品。如果考虑使用 echo 调试代码对比使用集成的调试器所花费的时间,IDE 的购买价格绝对会物有所值。
参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • 对于 PHP 开发人员, PHP.net 是个很好的资源。
  • 要获得学习使用 PHP 编程的一系列 developerWorks 教程,请参阅 “学习 PHP” 系列。
  • 访问 IBM developerWorks 的 PHP 项目资源,了解 PHP 的更多信息。
  • 随时关注 developerWorks 技术事件和网络广播
  • 查阅最近将在全球举办的面向 IBM 开放源码开发人员的会议、展览、网络广播和其他 活动
  • 访问 developerWorks Open source 专区,获得广泛的 how-to 信息、工具和项目更新,帮助您使用开放源码技术进行开发,并将其与 IBM 的产品相结合。
  • 要收听针对软件开发人员的有趣访谈和讨论,一定要访问 developerWorks podcasts

获得产品和技术

讨论

关于作者

Jack Herrington 是一名有着 20 余年经验的工程师,现在是 Code Generation Network 的总编。他撰写了 Code Generation in Action 一书。可以通过 jack_d_herrington@codegeneration.net 与他联系。

分类: 网站运营 标签: , ,