php 优势 - php与asp.net的比较如今当提到 web 开发时,您有许多选择。这些方法中许多都涉及到预处理 — 即,利用特定的标记将代码嵌入到 html 页面中,这些标记告诉预处理器,它们包含代码,并且应对它们作出处理。与 cgi 非常相似,这些代码在服务器上运行,并返回一些内容,这些内容表现为发回给浏览器的结果 html 页面的部分外观。开放源代码脚本语言 php 和 microsoft 的 asp.net 框架中的语言都属于这种类型;javaserver pages (jsp) 和 perl/mason 也以这种方式运行。
在本文中,我将重点讲述 php — oracle 已选择合并到其产品中的技术 — 和 asp.net。我将概述两者的各种优势和弱点,并着重讨论那些将帮助您决定开发项目应选择哪种技术的因素。有很多因素需要考虑,不同的项目可能诉诸于不同的技术。总之,您将看到在价格、速度和效率、安全性、跨平台支持等方面的逐项比较,以及开放源代码解决方案的优势。
什么是 asp.net?asp 最新的版本 asp.net 并不完全与 asp 早期的版本后向兼容,因为该软件进行了完全重写。早期的 asp 技术实际上与 php 的共同之处比与 asp.net 的共同之处多得多,asp.net 是用于构建 web 应用程序的一个完整的框架。这个模型的主要特性之一是选择编程语言的灵活性。asp.net 可以使用脚本语言(如 vbscript、jscript、perlscript 和 python)以及编译语言(如 vb、c#、c、cobol、smalltalk 和 lisp)。新框架使用通用语言运行环境 (clr);先将您语言的源代码编译成 microsoft 中间语言代码,然后 clr 执行这些代码。
这个框架还提供真正的面向对象编程 (oop),并支持真正的继承、多态和封装。.net 类库根据特定的任务(例如,使用 xml 或图像处理)组织成可继承的类。
除了编程语言和方法之外,数据库访问也是要着重关心的一个因素。当您用 asp.net 编程时,可以用 odbc 来集成数据库;odbc 提供了一组一致的调用函数来访问您的目标数据库。
优势和弱点asp.net 的优势很明显在于它简洁的设计和实施。这是面向对象的编程人员的梦想:语言灵活,并支持复杂的面向对象特性。在这种意义下,它真正能够与编程人员现有的技能进行互操作。
asp.net 的另一个优势是其开发环境。例如,开发人员可以使用 webmatrix(一个社区支持的工具)、visual studio .net 或各种 borland 工具(如 delphi 和 c++ builder)。例如,visual studio 允许设置断点、跟踪代码段和查看调用堆栈。总而言之,它是一个复杂的调试环境。许多其他第三方的 asp.net ide 解决方案也将必然出现。
但您得到了强健性,就将以损失效率为代价。asp.net 在内存使用和执行时间方面耗费非常大,这大部分归因于较长的代码路径。对基于 web 的应用程序,这些局限可能是一个严重的问题,因为在 web 上,您的应用程序可能扩展为每秒成千上万的用户。内存使用率还可能成为 web 服务器上的一个问题。
什么是 php?php 是基于预处理 html 页面模型的一种脚本语言。当 web 服务器中的 php 预处理器发现像下面这样的 php 语言标记时,将调用 php 引擎来执行该代码:
任何使用过命令式编程语言的编程人员都会对 php 非常熟悉;您会发现它与 perl、c 和 java 在语法上的相似处。严格来讲,java 是一种命令式编程语言,但它也利用了面向对象的结构和概念。php 在适宜的时候借鉴了这种结构,但它不是一种纯粹的 oop 语言。
在上面对 asp.net 的讨论中,我提到了 odbc 驱动程序,以及在考虑数据库抽象的情况下如何构建应用程序。在 php 中,您也可以使用 odbc 与数据库对话,因此您已经有了一系列支持的数据库可供选择。也有 mysql、oracle 和 postgres 的原生驱动程序。此外,如果要使用 oracle,则有一个特殊的 oci8 库将提供对 oracle 更多访问功能,从而允许您使用诸如 lob、blob、clob 和 bfile 之类的特性。
这时您可能会问“为什么与数据库相关的资料库被称为 php 的特性?”数据库抽象或独立性是您在设法构建使用多种数据库或需要在数据库间移植(例如,从开发到投产时的移植)的应用程序时所要考虑的一个因素。而这些确实是应该关心和考虑的。
但正如 tom kyte 在他的新书 — effective oracle by design (oracle 出版社) — 中指出的那样,数据库相关性将成为您真正的目标,因为这将使您在该技术中的投资最大化。如果您对 oracle 进行一般的访问 — 无论通过 odbc 或 perl 的 dbi 库,那么您将无法使用其他数据库所不具有的特性。此外,优化查询在各个数据库中各不相同。
zend technologies 是一家商业软件公司,它对 php 作出了重大贡献。它创建了一个称为 zend studio 的商业开发环境,这个环境包含了一个复杂的调试器、一个监测器和其他特性。该公司还构建了免费的 zend optimizer,它与 zend encoder 结合使用来编译 php 代码,以提升性能。还有其他商业产品,如 zend performance suite,它可以缓存预编译的 php 页面,从而进一步显著提升总体性能。
优势和弱点到测试版 4 为止,php 5 仍然有一些缺点,包括缺少异常和基于事件的错误处理例程 — 它们能够中断正常的程序流,并将代码跳转到一个特殊的错误处理部分。java 也提供了用于错误处理的异常,而 c++ 通过 try、catch 和 throw 语法提供异常处理。当然,您仍然可以在 php 中管理错误,但其结构不是标准化的,因而使得编程人员必须使用自己的工具来决定执行错误处理的方式,这将导致更低的一致性并往往导致推倒重来。
另一个弱点是 php 的函数名是不区分大小写的。虽然这不是一个严重的缺点,但有些程序员可能会觉得这一特性很讨厌。
不过,我的确对 php 的对象模型心存疑虑。php 不是专门设计为一种面向对象的语言。这些特性中的一部分是后来添加的 — 尽管注意了保持与 php 3 的后向兼容性,因此两种模型的特性都留有一些。实际上,在 php 5 中这些弱点中的许多都得到了解决。请留心关注。
php 在一些领域中缺少什么,它就会在擅长的领域中迅速地弥补什么。价格合理,因此您不需要担心许可问题。它也是开放源代码的,因此整个社区将密切关注开发过程:发现错误并将其修复。如果有一个特性您不喜欢,那么您可以修改代码。此外,php 可与 apache 自然结合:它可以作为一个模块编译,或直接编译成 apache 二进制文件。
但在 apache 上运行意味着,利用 php,您能够利用您已经在任意服务器投资,这是因为 apache 能够运行在 windows、linux、solaris 和各种其他 unix 平台上。此外,使用拥有 apache 的跟踪记录的 web 服务器意味着安全性能够保持在最高的优先级上。最后,php 拥有更小的代码路径,这意味着更少的分析和执行 php 页面服务器端代码,这将带来更高效的内存和使用率以及更快的运行。
在 php 5 中新增了哪些特性?
php 5 的第 4 个测试版在 2003 年 12 月底推出,更改日志清楚地显示已发现许多错误并已将其消除。虽然它仍在进行测试,但它的所有新特性和进步都确实值得关注。
php 5 的主要新成就在于它的异常处理和一个新对象,这个新对象引入的特性赋予了 php 真正的 oop。异常处理无疑是 php 4 中最显著的缺憾之一,而 php 5 对异常处理的引入无疑是一个成熟的标志。异常处理意味着您在您的软件中拥有了根据语言定义的和标准化的错误处理方法。只需使用 try、catch 和 throw 方法,您的 php 代码就变得更加强健和简洁。
openfile ('/home/shull/file.txt');}
catch (exception $myexception) {echo $myexception->getmessage ();
# rest of exception handling code here}# rest of blue methods here?>
新的对象模型为用 php 编写的程序带来许多积极的影响。在 php 4 中,当把将一个对象传递给函数或方法时,是通过值来传递的 — 除非您另行显式告知 php。这个过程意味着必须复制对象的一个副本(内存中的所有数据结构)。这个步骤使用内存,使得访问变慢和拥塞。而在 php 5 中,通常通过引用传递对象。
php 5 中新的面向对象的特性(包括构造器和析构器)值得关注。与 c++ 和 java 相同,它们提供了一种标准方法,即通过一个构造器方法来创建对象、分配内存和执行任何必要的设置,并通过一个析构器方法来执行清理。
php 5 还引入了对类中方法和变量的更精细控制。在 php 4,一切都是公有的:您可以从类外或在继承类中访问您类中的变量。在 php 5 中,您仍然可以使变量或方法为公有,但您也可以使它们为私有,以使得只能在类本身中使用它们。还可以将它们保护起来,也就是说,可以在类内或在子类中查看方法和变量。
此外,php 5 引进了类型提示或更好的类型检查。当您将一个对象传递给一个例程时,php 能够检查它是否是正确的类型,并在检查失败时产生类型不匹配错误。
由于还有其他特性(如静态方法和变量以及抽象类),因此请务必查看文档,以获取详细信息。
安全性比较asp.net 官方要求您使用 iis。不幸的是,iis 易受攻击的历史由来已久,这使得许多管理员不愿意部署它来处理 web 站点。这些弱点是因为 microsoft 的缺陷或是因为 iis 是黑客们攻击的目标无关紧要:这些系统有被黑或被攻击的历史。php 也运行在 apache 上,apache 快速并且是开放源代码的,并拥有很好的安全性记录。此外,正如我提到过的,apache 可以在许多平台上运行。
如果您在考虑 asp.net,但您想用 apache 作为 internet 门户,那么很幸运您可以有一些选择。首先,您可以使用 apache 将请求转发给在另一台计算机上内部运行的 iis。然后 apache 处理静态内容,并将 aspx 内容传送给 iis 服务器(不暴露给 internet)。
不过,如果您想利用 apache 承载 asp.net,那么提供了一些选项,这些选项 microsoft 可能支持也可能不支持。作为最后一种选择,有 ximian 的 project mono,它致力于构建一个开放源代码模块。请浏览 www.go-mono.com,以获取更多信息。
数据库编码示例您在选用 php 或 asp.net 时首先要考虑因素之一就是与数据库的连接。不过,利用 asp.net 更复杂,因为您可以从许多备选语言中选择任意一种语言。当然,这些代码示例将必须嵌入到 html 页面、实例化的类等之中。不过,以下信息将使您对二者的编码风格有所了解。
php 5 与 oracle 连接下面是一个 php 5 类,它提供了一个 oracle 连接和断开例程,用以演示利用 php 5(也可以使用其他驱动程序(如 odbc 驱动程序)和通用的数据库接口)与 oracle 连接的一种方式:
class oracle_object {
protected $thedb;
protected $user;
protected $pass;
protected $db;
function __construct($u, $p, $d) {
$this->user = $u;
$this->pass = $p;
$this->db = $d;
}
function db_open () {
$thedb = @ocilogon($this->user, $this->pass, $this->db);
db_check_errors($php_errormsg);
}
function db_close() {
@ocilogoff($thedb);
db_check_errors($php_errormsg);
}
function __destruct () {
print (so long...);
}
}
asp.net 与 oracle 连接如果您希望利用 vb.net(visual basic 是 microsoft 的默认 .net 编程语言)与 oracle 连接,那么请看一下这个来自 msdn 的示例:
imports system
imports system.data
imports system.data.oracleclient
imports microsoft.visualbasic
class sample
public shared sub main()
dim oraconn as oracleconnection = new oracleconnection
(data source=myoracleserver;integrated security=yes;)
dim oracmd as oraclecommand = new oraclecommand
(select customer_id, name from demo.customer, oraconn)
oraconn.open()
dim myreader as oracledatareader = oracmd.executereader()
do while (myreader.read())
console.writeline(vbtab & {0} & vbtab & {1},
myreader.getint32(0), myreader.getstring(1))
loop
myreader.close()
oraconn.close()
end sub
end class
作出选择
假定您还没有决定选用 php,我可以断言 php 的优势远远超过它的弱点。(请参见表 1 中的概要。)这些优势归结为价格、速度和效率、安全性、跨平台适用性和开放源代码机遇。它惟一的弱点是缺少一种纯粹和完美的 oop 实现,不过,这是一个很小的缺点。虽然语言结构的确有帮助,但好的编码最终是由实践、执行、好的习惯和规范带来的。
php与asp.net的比较表 1
php 4
php5
asp.net
软件价格
免费
免费
免费
平台价格
免费
免费
$$
速度
强
强
弱
效率
强
强
弱
安全性
强
强
强
平台
强
强
弱(仅用于iis)
平台
任意
任意
win32(仅用于iis)
是否提供源代码
是
是
否
异常
否
是
是
oop
弱
强
强
价格在此,我们不应简单地考虑初始投资 — 对 php 而言,这很明显是免费的 — 还应考虑实施、维护和调试的成本。对 php 而言,您可能需要购买 zend 优化引擎。然而,使用 asp,您将从一开始就进行投资,而且您还要为附加的技术 — 例如,执行图形处理的库 — 支付费用。但从长远来看,php 将不会逼迫您升级并向您收取更多的许可费用。接触过复杂许可的每一个人都知道,很多公司花费大量的时间和金钱仅是为了确保其顺应性。此外,当在获得错误修复的时间上,您得到的反应也有所不同。这当然将转化成时间,时间又将转化成总体开发的成本。
速度和效率正如我先前提到的,asp.net 是一个允许您使用各种编程语言的框架。此外,它据称拥有一个极好的面向对象模型。尽管所有这些都是真的,但在考虑到速度时,它却是不利的。基于以上原因,在 asp.net 中运行 asp 页面与在 php 引擎中运行等效的 php 页面相比需要执行更多代码。php 是一种“快速粗糙”的解决方案,是为完成工作而设计的解决方案。虽然自 2.0 和 3.0 版本以来为其增强了许多强健性,但它仍然保留着核心的优化的高速方法。
速度不是惟一要考虑的因素。内存使用率也很重要。
安全性asp.net 运行在 iis 上,而 iis 已被攻击了无数次 — 正如每隔一周的 it 新闻报告所证实的。它已经成为这样一种负担,实际上,尽管其耗巨资进行销售宣传,但许多 it 专业人员仍然拒绝用 iis web 服务器来开放他们的网络。而 php 使用 apache。apache 拥有已被证明的速度、可靠性和稳固的安全性的记录。请浏览 www.securityfocus.com,以获取更多信息。
跨平台适用性asp.net 在 iis 上运行,并且开始在 apache 上运行(apache 能够在许多平台上运行)。php 从一开始就设计用于和 apache 一起工作,因此您拥有许多可供选择的已被证明和可靠的服务器平台。
开放源代码机遇开放源代码并不只靠一些异想天开的编程人员或想要节省一些许可费用的公司来开展。当您处理软件本身的错误时,开放源代码可能成为真正的天赐之物。
在使用 php 或 asp.net 的情况下,您都会有一个大的用户群,他们使用软件并且可能遇到错误。使用 asp.net,这些错误必须通过一个官方程序来通知、修复、测试,并在一个新的补丁或版本中消除。然而,php 补丁可以快速地得到修补并发布。目睹开放源代码发展的任何人都知道,新的版本和补丁通常在几天内而不是像商业软件一样在几个星期或几个月内推出。如果这不够快,那么您通常可以自己来修补问题(如果必要的话)。
php在web开发领域的优势
你当前的位置:嘟妖老 --> 技术文档全集 在多数web开发者眼中,asp和jsp都被认为是领跑者,而php却被认为是个弱小的“挣扎者”,或者说它是一门被贬低为业余者才使用的语言,不值得参与企业web开发的竞争。在我看来,php没有被当作竞争者的理由是评论者缺乏对它的了解,而且也不了解用于web开发的其他操作系统。和一些观点相反,windows不再占有web虚拟主机服务市场的最大份额,我猜想它在web开发这一领域里也在被摧城拔寨。
在企业开发里为什么没有php?
很显然,php被认为落后asp和jsp太多,以至于它是没有什么用的,但是这恰恰与事实不符。php本身就是一门强大的语言。它事实上在每个发行版的linux上都有,在mac os x上也有。获取开发和使用php代码的构件(building-block)工具和软件都是免费的。用于开发php应用程序的商业集成开发环境(commercial integrated development environments,ides)也可以找到这样的工具有komodo(它运行在linux和windows上)和zend studio(这个应用程序能够运行在任何带有java运行环境的操作系统上)。你几乎可以在每个web虚拟主机上运行由php建立的网站,而不要考虑服务器所运行的是什么操作系统,这一事实让php更加具有吸引力。
php能够提供什么?先把php周围有什么忘掉一会儿,而考虑一下php自身能够提供什么。它是一门强健的服务器端语言,能够提供相当多的功能,而且能够迅速地为页面提供服务。
容易使用
使用c或者perl或者具有类似风格和句法的另一种语言的任何用户都能够很快上手php。尽管它是设计用在web上的,但是它也能够作为命令行语言使用。你正在编写的web应用程序需要每个小时或者每天执行一次某些代码吗?使用cron或者类似的计划安排管理器,你可以计划安排php代码在你希望的时候执行,使用普通的命令解释脚本或者批处理文件就能够执行这样的代码。不需要自动调用浏览器就能够查看专门的网页,从而执行你的事件,也没有必要依赖来访者的点击来告诉你的系统:特定的代码需要在特定的时候被执行。php在这一领域可扩展性的事实是绝对具有吸引力的。
php的好处
我不是jsp或者asp的老手,在此我也不想贬低这些语言。相反,我会把注意力放在php的好处上。
本地化php让你能够为网站的访问者提供本地化的服务。当用户点击进入网站的时候,网站会根据他们浏览器的设置自动地以其母语向其提供页面。要实现这一点不需要使用用于语言翻译的烦杂文件,而是使用和本地化的c程序所具有的相同能力,通过一个叫做gettext的系统实现的。如果被请求的语言文件存在,那么用户所看到的文本就是其母语;如果语言文件不存在,那么文本就是缺省的英语或者其他任何你所指定的语言。许多本地化的unix应用程序都将gettext作为标准,它让第三方的翻译变得轻而易举。
轻易地使用命令行php支持在需要的地方设置和执行命令行程序。使用标准的unix diff工具,它能够生成错误最后一次修改同要使用电子邮件发送到错误的所有者的当前注释之间的不同。php代码对在系统上所编写的两个文件执行diff,将其输出作为输入,再生成一个要发送的电子邮件。这封电子邮件是通过php自己来发送的。
其他好处上面的只是我在自己程序里所用到的强大功能中的两个,而还其他的功能。例如,你可以:
即时创建简单的flash动画。
即时创建pdf文档。
使用高级数学功能,以及面向对象的编程技术。
读取和写入到本地和imap邮箱。
在php里就可以使用任何标准的internet协议。想要编写基于php的ftp、web或者新闻客户端?没有问题!只使用php你就完全能够编写出使用标准tcp/ip套接字的客户端和服务器,并以此创建自己的协议。
实现对加密的支持,以及对各种数据库服务器的支持。
缺乏远见的评论
我觉得,那些寻找顶级web开发语言而排除掉php的人是极其短见的。我使用php编写代码已经有很多年了,无论是像错误追踪系统这样的高级功能,还是简单地重复使用页眉和页脚这样的普通功能,我都使用php编写过。我用php编写过半静态的页面,也编写过全功能的多媒体演示。我不是唯一一个使用php的人。如果php不值得引起注意,如果它只是小儿科或者爱好者的语言,那它为什么会是在web开发上成长最快的语言呢?如果它没有asp或者jsp那么强大,那么它为什么会被用在流量巨大web网站上?例如yahoo,据说它就是由php建成的。
开发人员习惯用熟悉的产品
我敢肯定,asp 和jsp有它们各自的强项,但是我相信人们是用它们不是因为它们能够提供比php更加强大的功能,而是因为人们已经了解了它们,并希望以自己习惯的方法编写代码。排除php只能表示对这一语言的无知。
关于php的前途译者注:这是一篇德国人写的关于php的“长篇大论”,作者在文中把php吹的神乎其神,大有一统江湖的架势。且不去管它观点是否正确,这么一篇经典的“吹牛奇文”对我们这些诚惶诚恐的php程序员来说,到是非常值得一看的。还是闲话少说,让我们开始欣赏这骗奇文吧!
1.序言
定义:php是一种简单的,面向对象的,解释型的,健壮的,安全的,性能非常之高的,独立于架构的,可移植的,动态的脚本语言。php具有和java类似的class关键字。因为不需要虚拟机,以致速度比java快5倍。php正迅速变成一种标准的,多用途的,面向对象的脚本语言。php不仅可用来开发web应用程序,也可以开发普通应用程序。
php是一种功能强大的脚本语言。php将击败perl/python并取而代之。php是下一代的perl/python脚本。php可以胜任任何perl/python做的工作,并且做的更多,更好,更简洁!!
php是hypertext pre-processor(超文本预处理器)的缩写,它是一种服务器端的html脚本/编程语言。php语法上与c相似,可运行在apache, netscape/iplanet, 和 microsoft iis web 服务器上。php作为一种工具,可以让你创建动态的web页面。应用php的网页与常规的html页面并无二致,你可以用同样的方式来创建、编辑它们。php允许你直接在html文件里写入简单的脚本,这一点与javascript非常相似。而不同的是,php不依赖于浏览器,是服务器端的语言,而javascript却是一种客户端的嵌在html中的语言。概念上,php与netscape的livewire pro产品,microsoft的asp以及sunmicrosystem 的jsp相似。
php不仅可以用来创建web应用程序,也可以用来开发普通的单机应用程序。
php的强劲之处在于:
·php是一项最优秀的技术。其它技术,如perl,python, tcl, vb script, asp 相对来说,都是陈旧低劣的。即使是java/jsp,也在php之下。
·开放源码
·广泛的数据库连接
·大量的扩展库
·作为一种多用途的脚本语言,比perl,vb script, asp, jsp都要优秀。
为什么选择php?因为php是最好的,原因如下:
·perl“味道不好”,因为其程序不易阅读和维护,且不是面向对象的。把perl忘了,转向php吧。perl程序员将抛弃perl,因为他们爱上了php! php实际上就是“现代版的perl”,只是名称不同而已。
·java 是面向对象的,但速度很慢。java程序远行起来很慢,对它唯一的抱怨就是——“java,真是慢的糟糕”。而且十分复杂(具有许多层,如jvm,jit 等等)。这往往诱发问题。既然有了linux,为什么还要java呢?
·python“不错”,但没有c语言中的括号和大括号,而这在vi编辑器中对操控代码非常有用。如果不能利用vi/emacs编辑器搜索括号/大括号的命令迅速操控代码,那么就好象断了手一样。php在技术上比python更加先进。
·php是最好的,因为它面向对象,并且吸收了c/c++/java/perl的精华。php可以替代perl,python, java,c, c++, awk, unix shell 脚本,visual basic 和其它语言!!php直接运行,而且是由c写成的。
·每一个电脑程序员都知道php是最好的,不信问一下你旁边的程序员。
·只有php才能称雄于21世纪、22世纪以及更远的将来。
·为什么我们认为perl,python和java程序员会将归附php,这里有一个很重要的原因。
以前,世界上许多公司都把php当作是一个“高度机密,严格保密”的电脑程序语言,但是现在它已经变成最为著名的,在web, internet, e-commerce以及 b2b等诸多项目上应用最广泛的面向对象的脚本语言。即使是在今天,仍有许多竞争性(competing)公司把php当作是高度机密的东西,决不向外界(竞争对手)透露半点。
php将如同暴风雨一般席卷整个世界,it工业将为之震惊。php的力量在于它是跨平台的,可以运行在任何地方。如linux,windows 95/98/nt/2000/xp, solaris, hpux 以及各种unix。php只需写一次,就可以配置在任何地方。php可以运行在apache,microsoft iis等多种web服务器上。
php比java快5到20倍!!实际的比较测试显示,php的运行速度是java3.7倍左右。php太容易使用了,你可以用它在非常短的时间里,非常迅速的开发出非常复杂的web,e-commerce和一般的单机应用程序。(在将来,php将会模仿java大多数的功能,相信java程序员也会喜欢上它。php将包含java中的关键字,如class,extends,interface, implements, public,protected, private 等等等等。)
php具有面向对象特性,它吸收了java, c++, perl 和c的最优秀的部分。php可以说是所有脚本/编程语言中的宝石。不久,它就会成为全世界程序员的“麦加圣地”。php即可以运行在window95/nt/2000/xp上,也可以运行在各种unix上。
我们将大吃一惊——php极有可能成为21世纪的电脑编程语言。
可以使用zend optimizer对php进行编译和优化,从而使它运行的更快。php4.0中已经集成了zend optimizer。 首先,你在开发、测试、除错过程中,用php脚本语言编写你的应用程序。一旦项目完成,你便可以用zend编译器,将php文件编译成运行速度更快的可执行程序。
对于电子商务项目,你一般需要综合使用php(70%),html/dhtml/xml(25%)和5%的javascript(客户端验证)。
2.php可运行在microsoft windwos上!!php最初是运行在unix平台上的,但是它的移植性很好,也可运行在windows和iis web服务器之上。今天,已有了一大批基于windows 2000/nt/95/98的php用户,你可以找到大量运行于windows平台之上的php工具。
许多php程序员喜欢在windows上开发他们的程序,完成后再配置在大型的linux服务器上,如运行linux的ibm小型机、compaq dec alpha 以及 sun sparc。
php最大的优势在于,它也可以运行在unix/linux之上,unix上的开发者可以为ms windows下的php用户服务,而windows下开发的php代码也可以不经过任何改变,就用于unix/linux上。
php自身完全是由c语言写成的,因此可广泛运行于各种平台之上,如beos,unix, ms windows, apple macintosh,ibm os/2 以及其它更多的操作系统。
php 运行速度非常快,要比java快出许多。对于web开发而言,不如忘了java/jsp吧!php,php,到处都将是php! php也也将变成一种多用途的面向对象的脚本语言。
3.php下载
·php主站点:http://www.php.net
·php资源:http://ils.unc.edu/web-db/php/links.html
·php代码交换:http://px.sklar.com
·vex net:http://www.vex.net/php
在许多国家都有镜像站点,网址是www.countrycode.php.net,其中countrycode可以是us,fe,,sk等等。
· http://www.fe.de.php.net
· http://www.sk.php.net
· http://php.iquest.net/
·答疑邮件地址: rasmus@lerdorf.on.ca
3.1 php在microsoft windows 95/98/nt/2000上的安装
php在microsoft windows平台上极受欢迎,而且另人惊奇的是,它比microsoft自己的web脚本语言还要流行。原因在于php是面向对象的脚本语言,而asp却不是。php具有大量可重用的类(对象),在windows平台上,php要比asp快许多,而且比asp具有更多的功能和特色。php比asp更健壮,更可靠,更具威力。由于php可运行于ms windows,linux, mac os和所有的unix,所以它具有一个庞大的用户群。而其最大的优势在于,你可以在windows上开发程序,然后配置在unix/linux上,反之亦然。
windows98/nt/2000下的php用户比其它操作系统都要多,那是因为在windows98/nt/2000上安装php很简单。
php有可执行的安装程序,你只要双击exe文件,2分钟内就可以自动安装好。可从如下站下载可执行的php安装程序:
·windows下的php可执行安装程序:http://php.weblogs.com/easywindows
·windows平台下的php资料:http://php.weblogs.com
·php在windows下的安装与配置:http://www.php.net/manual/install-windows95-nt.php
·php triad可以在windows平台上安装完整的php服务环境:http://www.phpgeek.com
3.2在windows 95/98/nt/2000上快速安装apache web服务器(10秒钟)
在windows上运行php,你需要一个web服务器,你可以使用微软的iis,也可以使用免费的apache 。因为可以通过apache的安装文件setup.exe进行安装,可以为你节省许多时间。
phpttriad是一个包括apache、php、mysql的软件包,可从http://www.phpgeek.com/phptriad.php 或其镜像站点http://sourceforge.net/projects/phptriad下载。我强烈推荐使用phpttriad,它在windows用户中极受欢迎(已被下载了几百万次)。
apache 二进制程序: http://httpd.apache.org/dist/httpd/binaries/win32
3.3 微软的sql服务器
sql服务器可以安装在不需要运行windows的机器上,而你也需要一个sql服务器来作web开发。我推荐你在很老的pc上(如pentium或486)安装redhat linux和postgresql rpms。你数据库并不需要任何windows图形界面,可以在控制台直接启动postgresql。postgresql的速度大概是oracle和ms sql server的3倍。
php的postgresql支持库是由adam sussman编写的,他的邮件地址是:asussman@vidya.com
支持windows nt/2000的postgresql可从http://www.askesis.nl下载。可从http://www.geocities.com/alavoor/howto/pgsql/postgresql-howto.html获取postgresql的使用指南 。
3.4 php在unix和其它操作系统上的安装
参见php主站点www.php.net上的安装指南和说明,或所下载的软件包中的install文件。
4.快速进阶
用php的面向对象机制实现一个项目的步骤如下:
·首先,你需要连接一个数据库sql服务器——有下面两个选择:
adodb (active data objects data base),即动态数据对象数据库(http://php.weblogs.com/adodb)
metabase(database independent access and management),即数据库独立访问和管理(
http://phpclasses.upperdesign.com/browse.htm/package/20)
·第二,你需要一些通用的php类来创建表单、表格和其它html对象。这些都可以从php classes网站上获取(http://phpclasses.upperdesign.com)。可以参考一下该网站的下载排行榜。也可以从网站http://www.milkywaygalaxy.freeservers.com/上获取表单类、模板类等。
·第三,通过对这些通用类的继承,来设计和创建自己的php类。
·第四,使用模板类来分离显示样式和业务逻辑,可参见http://www.phpclasses.com
·第五,使用ide工具进行开发(参见php ide一节)。
·最后,最好把你代码封装成类,这样可以实现代码的易维护性和可重用性。
5.php的主要特性
·支持标准cgi,fastcgi和apache模块——作为一个标准的cgi程序,php可以安装在运行任何web服务器的任何unix机器上。 php支持新的fastcgi标准,通过这一机制,php获得了速度上的提高。 当配置成apache模块时,php便成了功能极为强大的,运行速度如闪电般快的新的选择。
·访问日志——通过php的日志访问功能,用户可以维护他们的点击次数和日志。 该功能提供了实时的访问监测,而不以任何方式使用系统的中心访问日志文件。日志浏览脚本为个人用户拥有的一组页面提供快速的访问摘要。除此之外,该程序包还可以通过配置为每一个页面生成一个页脚(footer)来显示访问信息。可参考文章后面的例子。
·访问控制——个内建的基于web的配置“筛”,可实现对访问控制的配置。这样,才有可能为所有或部分web页面创建一套规则,使得拥有这些页面的特定的人可以对他的网页设置各种限制,如,什么人可以访问这些页面以及这些页面以怎样的一种方式被访问。对页面的设置有许多方式,如密码保护、完全限制、登录失效、或者更多的以客户的域、浏览器、e-mail地址甚至涉及的其它文档为设置依据。
·支持postgressql——postgressql是一个先进但是免费的rdbms(关系数据库管理系统)。php支持在.html文件中直接嵌入postgressql的“sql 查询语句”。
·支持rfc-1867文件上传——文件上传是netscape2.0新增的一项功能。用户可以将文件上传到web服务器。
php提供了实际的mime解码功能,使得文件上传成为可能。php还提供额外的框架,可对收到的上传文件进行一些有用的处理。
·基于http的身份验证控制——php可以用来为apache服务器创建自定义的基于http的身份验证机制。
·变量、数组,联合数组(associative arrays)——php支持typed(这个单词不知道怎么译,望高手指点)变量,数组,甚至perl风格的联合数组。而这些都可以通过get或post方法的表单从一个页面传递到另一个页面。
·条件语句、while循环——php是一种类似c语言的功能完整的脚本语言。你可以使用if/then/elseif/else/endif条件语句,以及while循环和switch/case语句来安排html页面显示的逻辑流程。
·扩展的正规表达式——正规表达式频繁地应用于模式匹配、模式替换以及一般的字符串操作。php支持所有常用的正规表达式操作。
·原始的http header控制——根据某种条件,让web页面能够发送自定义的原始http头对一些高级的网站设计来说是非常必要的。一个常见的用法就是发送一个location:url头,把客户端的请求重定向到另外一个url上。也可以用来关闭缓存或操作页面最新更新的http头。
·动态创建gif图片——php已经支持thomas boutell的gd图片库,可以实现gif图片的动态创建。
·支持isp“安全模式”——php支持独特的“安全模式”,从而使得多个用户运行同一台服务器上的php脚本变得更加安全。
·新发布的php中又增加了许多新的功能。可访问php的主站点http://www.php.net。
·php是免费的!——这是最后一个重要特色。php的程序包是完全免费的。它遵守gnu/gpl。你可以把这个软件用于实现商业或者其它任何目的。
5.1 php相对于java的优势php是一种已经确定下来的,用于创建动态网页的服务器端的脚本语言。作为一种为web而特别设计的语言,php带来了许多商业机构渴望的特性。
·维护周期短
·快速的开发时间
·非常高的性能
php可以在所有主要的操作平台(unix,windows,甚至是大型机)上运行,而且生来就支持各种流行的数据库。所有这一切决定它是一种进行web开发的非常理想的选择:曾有运用php技术的网上商店称,几天内就能够开发出可重用的代码。那些熟悉诸如c,c++或java等语言的程序员们,也总是发现他们能够在几个小时之内就能够进行php编程。
php是针对web开发而设计的,这一事实使它成为一种独具特色的开发工具,就象intranet design杂志评价的那样:
“php是构建在web开发人员现实需求之上的....不同于其它笨重的,高负荷的方法,php非常轻便,是为web开发度身定做的。它可以比其它同类技术更快,更容易的解决复杂的问题。”
java作为一种新的编程语言,最初用于运行嵌在浏览器中的客户端应用程序。在过去短短几年中,“applet”所暴露的问题迫使sun和其它java开发人员为该语言寻找新的出路。其中最为突出的就是服务器端编程,它允许web站点连接数据库并产生其它服务器端的应用程序,即“servlets”。sun最终推出了java server pages(jsp)作为编写servlets的手段。与php一样,jsp在不同平台间也具有高可移植性(尽管php支持任何32位以及32位以上的平台,而jsp只能在安装了java虚拟机的平台上运行)。 然后,没有编程背景的新手会发现,使用servlets编程是一件极为困难的事,原因在于该语言的复杂性以及jsp系统复杂的设计方式。
jsp的性能也存在许多待改进的地方:zdnet的在线刊物eweek最近的一项调查发现,php的运行速度差不多是jsp的3.7倍。可以说,jsp是web环境中非常差的一种解决方案,这是因为它每秒钟只能处理很少的事务,而且响应速度相当的慢。
zdnet的eweek杂志还提到:
“jsp是一项相对较新的技术,从开发工具、资源、人才方面来看,还未具有完全的市场成熟度。”......由于jsp是基于java的,而java由是一种强类型的语言,所以我们不得不声明变量的类型,并在需要的地方手工转换类型。这使得jsp成为程序员最难于学习的一种脚本语言。
php与java协同工作
jsp仅仅是一种能够访问java对象的语言罢了,认识到这一点很重要。而php也可以整合java,这意味着,php可以象jsp一样,成为一种能够调用java逻辑的脚本语言。但与jsp不同的是,php还可以调用其它组件模型,如microsoft的com,而且增加对新的对象模型的支持也极为容易。可见,php的扩展能力是无穷的。而另一方面,jsp完全依赖于java。
ibm程序员sam ruby联合使用php和java。通过php对java的良好支持,使得java对象如同常规的php对象一样,透明地被创建和使用。
autionwatch网站使得各种规模的商业团体都可以从其动态竞价环境中获益。它每月的访问人数在二百六十万以上;已有三十多万个注册用户;每个月进行一百二十万次拍卖。 他们曾尝试使用java,但还是选择了php,就因为它更容易使用,开发速度更快。若想知道的更多,请联系ben margolin,他是auctionwatch网站销售服务部的主任(ben@auctionwatch.com)。
编程顾问reuven lerner曾在各种语言之间作过比较。他对php的看法概括如下:
“这是门容易学习的语言。美工和web设计师可能会说他们并非程序员,但事实上,他们在大型项目中,越来越多的使用了javascript,vbscript以及其它一些简单的编程语言。与perl相比,php更加正规和明确;对一个新手来说,php比java更容易掌握。确实,php有点象javascript(如果存在服务器端版本的话)。任何人,不管有无编程经验,都可以在很短的时间里学会并使用php。这一点也许vbscript可以做到,但perl和java肯定不行.....php绝对是一个非凡的,强大的系统。无怪乎能够成为创建web站点的流行语言.....我认为,php将成为java和jsp强有力的竞争对手,我会在某些客户和公司内部项目中极力推荐php。”
php:一直在前进
jsp有sun作为其后盾,因此不断获得媒体的关注。但有趣的是,尽管没有任何宣传攻势,php的流行度仍然以8-11%的速度在增长,远远大于服务器端应用程序4%的月增长率。有六百五十万个站点使用了php(参见netcraft 2001年5月的调查报告)。39%的apache服务器上配置了php;而perl占了11%的市场分额,名列第四。apache保持着59%的web服务器市场占有率;microsoft次之,仅28%(参见e-soft inc./securityspace 2001年5月的调查报告)。
使用php的著名公司有:unilever、philips、ntt、cisco、 japan airlines、 air canada、 lufthansa、ge marketplace、 wallstreet:online germany、 auctionwatch、 villagevoic、 dialpad以及bmc。
1.intranet design杂志:一个it经理对php的看法,2000年6月4日。
http://linuxtoday.com/news_story.php3?ltsn=2000-06-04-002-04-nw-hl-sw
2.eweek:四中脚本语言的速度开发,2000年10月30日。
http://www.zdnet.com/eweek/stories/general/0,11011,2646052,00.html
关于php的前途(三)
6.php的简要历史
php最初作为一种用perl写成的简单小巧的cgi工具,被称为“个人主页工具(personal home page tools)”,后来改称为“个人主页构建工具箱(personal home page construction kit)”。
也曾叫做“专业主页工具(professional home pages)”,现在最新的名称是
“php超文本预处理器(php hypertext pre-processor)”
另外还有一种工具,可以非常简单的把sql查询语句嵌入web页面当中。这种工具基本上可以看作是解析sql查询语句,并在此基础上非常容易的创建表单和表格的另一种cgi工具。这种工具叫做fi(form interpreter,表单解释器)。
php/fi2.0彻底重写了这两个包,并合并成一个单独的程序。最终发展成一种嵌在html文件当中的简单的程序语言。php通过直接在html文件中放置简单的脚本
使得不再需要创建大量微小的perl cgi程序。因为免去了多次调用perl程序的负荷,所以大大提高了你的web页面的总体性能。大大提高了你的web页面的总体性能。 而且通过把构成web页面的所有组件放在一个单独的html文件中,使得大型站点的管理变的更为容易。 由于包括了对各种数据库的支持,可以非常容易的开发基于数据库的web页面。 许多人都认为,这种方式比创建分离的html和cgi文件更为简单。
现在,php/fi又被重新命名为php。
7.一个简单的例子
假设你有这样一个表单:
你的display.html文件可以这样来显示表单所提交的内容:
echo hi $name, you are $age years old!
; ?>
这是那么地容易! php自动为每一个表单输入域创建了变量。你可以直接在
action指向的文件中使用这些变量。
一旦搞清楚了变量使用方法,那么下一步你便可以在页面中编写一些逻辑流程了。 例如,你想根据不同的用户输入来显示不同的消息,就可以使用if/else语句。 把上面的例子改一改,我们就可以根据用户输入的年龄做不同的显示了:
if($age>50);
echo hi $name, you are ancient!
;
elseif($age>30);
echo hi $name, you are very old!
;
else;
echo hi $name.;
endif;
?>
php提供了一套非常强大的脚本语言,它能做的要比上面这个简单的例子要多的多。可参见php脚本语言部分,获取更多信息。
你也可以用php来配置页面的访问权限。这是通过一个内建的配置界面来实现的。比方说,你可以指定来自特定的域的用户才能访问你的页面。或者,你也可以创建一个规则,用密码保护特定的页面。 可参见访问控制部分,以获取详细内容。
php还能够从任何rfc-1867兼容的web浏览器上载文件。 这一功能使得用户可以上传文本和二进制文件。通过php的访问控制和逻辑函数,你可以对谁可以上传文件以及文件上传后执行什么操作等实现完全的控制。可参见文件上传部分,以获取详细内容。
php有postgresql数据库的支持包。它支持在html文件中嵌入sql查询语句。
8. soapx4和phpxmlp
soap是一种基于xml的协议,用于在两个进程间传送消息和进行rpc式的通讯。万维网联盟的xml协议(xp)工作小组正在开发soap标准,这一标准将被称为xp。
soapx4(simple object access protocol,简单对象访问协议)是php实现:
http://dietrich.ganx4.com/soapx4.
以及http://sourceforge.net/projects/phpxmlp。
8.1 xml/xslt发布引擎
krysalis是一套基于php技术的xml/xslt发布引擎,其设计思想来自于cocoon。
interakt公司开发krysalis为得是实现下一代web服务的功能,即信息,应用程序逻辑和表示层的完全分离。
krysalis是一种开放源码的以xml/xslt为核心的php开发平台,它利用了phakt的大部份代码,创建了krysalis标记库(taglib)。
其主要功能有:
·动态的xml支持。
·动态生成pdf文档。
·用正规表达式描述站点地图。
·pxp页面缓存。
·多个转换管道。
·针对不同数据的多个连接类型(adodb)。
请访问krysalis的站点获取更多信息http://www.interakt.ro/products/krysalis
9.php类库
php是一个面向对象的脚本语言。因此php代码是“类,类,类,还是类”。在你编写php代码时,你必需编写可重用的类,这些类也可以使用现有的类。 网上有着大量编写好的类,拿来就可以使用。这其中有用来访问数据库的类,生成xml文档和html表单的类,还有用来创建表格和其它html对象的类。 如果你编写了什么通用的类,那么请你把它放到网上去。 到2005年,网上将会有超过1亿个可重用的php类。php类的优势在于它们提供了数据隐藏、继承、封装、可靠性、可重用性以及多态性等功能和特性。下面给出了最重要的php站点:
9.1 php类与php扩展和应用程序库
可访问下列web站点获取大量立马就可以用的php类库
·php classes: http://phpclasses.upperdesign.com.
·pear(php扩展和应用程序库)是一个php扩展程序的代码库,与perl的cpan相似:http://pear.php.net
·adodb (active data objects data base,动态数据对象数据库) http://php.weblogs.com/adodb : php的数据库访问函数并不统一。每个数据库扩展都使用不同并且不兼容的api函数。这就需要创建一个数据库类来隐藏不同数据库间的差异(即对不同数据库间的差异进行封装)。 从而,我们可以很容易的实现数据库的切换。adodb目前可以支持mysql、postgresql、interbase、 oracle、 ms sql 7、 foxpro、 access、 ado、 sybase和一般的odbc。 可参考adodb的手册。phplens就是基于adodb的。
·metabase (数据库独立访问和管理)
http://phpclasses.upperdesign.com/browse.html/package/20
·php hot scripts: http://www.hotscripts.com/php
·非常受欢迎的php资源站点:http://php.resourceindex.com
·php项目站点:http://php.net/projects.php
·php lib netuse: http://phplib.netuse.de
·php小工具: http://www.northern.ca/projects/phpwidgets
·php4通用框架: http://sourceforge.net/projects/gpfr
·source forge的php库:http://phplib.sourceforge.net
·source forge的php程序片段: http://sourceforge.net/snippet
·e-gineer的php库 http://e-gineer.com/articles/php-hacker
·php常见问题解答: http://php.faqts.com
·php库 http://px.sklar.com
·php工厂: http://alfalinux.sourceforge.net/phpfact.php3
·php builder:http://phpbuilder.com/snippet
·php developer: http://www.phpdeveloper.org
·php新手: http://www.newbienetwork.net
· php walrus:http://www.evilwalrus.com
9.2 其它php工具
其它的php工具有:
·用户登录样本: http://www.devshed.com/server_side/php/commerce1
·phppdftable是一个php类,方便pdf报表的创建。需安装php4.x(php3.x应该也可以)和pdflib: http://sourceforge.net/projects/phppdftable
·数据管理员提供了一个基于php的数据管理界面。它并不仅限于一个或两个数据库。并且封装了原来的php数据库访问函数:http://sourceforge.net/projects/dadmin
· pslib是一个用来生成postscript文件的类库。提供了一个生成postscript文件的简单方法。 只需在你的php脚本中调用pslib函数就可以非常容易的生成ps文件:http://sourceforge.net/projects/pslib
· 可紧密合作的一组完整的php脚本,可创建高度自定义的,动态的和面向模块的web站点:http://sourceforge.net/projects/twebs
·phpopentracker是一个站点访问追踪的全面解决方案。所收集的数据存储在sql数据库中。可以进行复杂但是简单的分析工作。包含了一套用于分析和生成报表(html和pdf)的功能强大的api:http://www.phpopentracker.de
·phpshopcart 是一个用php的编写的网上购物车程序,使用mysql数据库。此程序是为 “linux下的数据库指南”这本书编写的”(syngress media): http://sourceforge.net/projects/phpshopcart
10 phpgem 包
phpgem本身也是php脚本程序,可加速生成操作数据表的php脚本。可工作于不同的sql数据库,如postgresql、mysql、msql、odbc以及adabas。你只要输入数据字段的描述信息和参数(如字段名称、是/否搜索字段等),phpgem就会为你输出另一个php脚本,该脚本可以对这个数据表进行各种操作(浏览/添加/编辑/删除/复制/搜索)。phpgem支持多层嵌套的数据表。phpgem允许你为每一个用户指定对每一个数据表和字段访问的级别。phpgem还支持图象信息。
专家预言:php将比java更好更受欢迎netscape共同创办人marc andreessen在zend/php会议上预言,简单的php描述性语言撰写工具,在web-based应用程序的开发上,将会比java更受欢迎。
在升阳(sun microsystems)于1995年发表java之后,由于java的友善接口让工程师设计软件更为容易,受到工程师欢迎,但十年下来java陆陆续续被加入了强大的功能,反而使它变得不容易操作。marc andreessen指出,现在的java可能比c++更难学,在此同时,php传承了java的简单精神,并创造一个比java更容易使用的程序开发环境。
php为一开放原始码项目,其中包括可以简化程序的描述性语言引擎以及一个大的链接库,也有专门开发php的公司,如zend就有销售php套装产品、程序撰写工具及技术支持服务。
andreessen的看法可能很难博得java拥护者的认同,因为现阶段全球仍有数百万专研java的工程师,也有数百家公司参与java community process(jcp),在jcp中共同主掌java的命运。但是,就算是大力扶植java、甚至以java为websphere服务器软件核心的ibm,也认为php的前途会比java来得好。
ibm新网络科技事业处副总裁rod smith就说,「简单」是php最大的特色,而且它不会为了与其它语言竞争而加入新的语言功能,java显然就不是这么做。
而且,php的势力也不小,目前约有2200万的网站采用php,包括yahoo!、lufthansa等知名网站,数量并持续增加中,并有450个软件工程师有权去审核在php软件上的任何变动。
与java相较,php可用范畴限制较多,它仅能用在网络服务器上,不像java,同时可用在网络服务器、个人计算机、手机、芯片卡或其它装置。
java和php除了在某些方面相互竞争之外,某个程度来看,也在彼此靠陇。甲骨文产品策略副总ken jacobs表示,即使甲骨文(oracle)销售同时可执行java及php的java服务器与数据库软件,但正为java加上一项额外的新功能,让这两个软件项目可以协同运作;更具体的说,java规格需求223(jsr 223)将会「协助建构在java社群与php社群之间的那座桥梁」。
日前才发表可以分享照片等内容网站「ning」的marc andreessen也说,现在ning也同时执行java与php,其中核心系统是由java组成,比起该站所有可看见的应用程序都是由php写成,java更像是操作系统层级。
就像其它诸如linux及apache的开放原始码项目,php目前也受到计算机工业主要大厂的庇佑,像ibm跟oracle都致力开发让php软件可以撷取旗下数据库的程序。事实上,ibm与oracle的行为就像在为php背书,连这两大厂都支持php,证明php也许就是个好东西。
以前收藏的资料现在拿出和大家分享。
浪风小园子 -- 比较认真的php平台开发
http://www.bkjia.com/phpjc/440364.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/440364.htmltecharticlephp 优势 - php与asp.net的比较 如今当提到 web 开发时,您有许多选择。这些方法中许多都涉及到预处理 即,利用特定的标记将代码嵌入到 ht...