分页: 7/11 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]
 比较PHP和JSP这两个web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较:

一、 语言比较

Php是解释执行的服务器脚本语言,首先php有简单容易上手的特点。语法和c语言比较象,所以学过c语言的程序员可以很快的熟悉php的开发。而java需要先学好java的语法和熟悉一些核心的类库,懂得面向对象的程序设计方法。所以java不如php好学。

Java首先要编译成字节码.class文件,然后在java虚拟机上解释执行。Java的web开发首先最容易想到的就是JSP(现在已经到JSP2.0),原来的java的web开发都是用servlet来实现的,用servlet来开发需要程序员在java的源文件中嵌入大量的html代码。所以后来就出现了JSP,JSP可以方便的嵌入到html文件当中,其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet,然后再编译执行。Jsp可以通过servlet和JavaBean的支持产生强大的功能。JavaBean 是一种可复用的、跨平台的软件组件。使用javabean可以方便的实现java代码和html的分离,能够增强系统的功能和软件的复用性。

Java的web开发属于SUN公司定义的J2EE其中的规范。而且在J2EE中包括了java的web开发的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特别适合于做大型的企业级的应用。

二、 数据库访问比较

Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。

PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。例如:用Java开发的web应用从MySQL数据库转到Oracle数据库只需要做很少的修改。而PHP则需要做大量的修改工作。

三、 系统设计架构比较

采用Java的web开发技术,需要使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。所以用Java进行开发前期需要做大量的系统分析和设计的工作。

四、 跨平台性

Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。

五、 开发成本比较

PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。

Java的web应用服务器有免费Tomcat、JBoss等,如果需要更好的商业化的服务有:Web Sphere和 Web logic。

六、 分布式多层架构比较

PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就比较强大,可以实现多层的网络架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。

下面简要的说一下Struts,它实质上是在JSP Model2的基础上实现的一个MVC(Model、View、Controler)框架。JSP Model2体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法。在Struts框架中,模型由实现业务逻辑的JavaBean或EJB组件构成,控制器由Servlet实现的,视图由一组JSP文件组成。采用Struts可以明确角色的定义和开发者与网页设计者的分工。而且项目越复杂,其优势越明显。

七、 源代码安全

PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。

Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。

八、性能比较

有人做过试验,对这两种种语言分别做回圈性能测试及存取Oracle数据库测试。

在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒。

数据库测试中,二者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。

表格 1 PHP 与Java的比较

 PHP JAVA

可复用性 低 高

开发速度 快 慢

易维护性 差 优

可移植性 优-Linux、Windows、Unix等

安全性 低 高

开发费用 低 高

多层架构 差 优

数据库访问 接口不统一 接口统一

可扩展性 差 优

面向对象 差 优

综上所述,我个人认为,PHP适合于快速开发,中小型应用系统,开发成本低,能够对变动的需求作出快速的反应。而Java适合于开发大型的应用系统,应用的前景比较广阔,系统易维护、可复用性较好。还有,同样功能的系统用Java开发的系统要比PHP开发的系统的价格要高。
相对于PHP4而言,PHP5有几点重要的变化和改进。按照Adam Trachtenberg的理解,PHP5有三点最重要的改进:更全面的面向对象编程功能、MySQL扩展支持库MySQLi、改进的XML支持;另外,PHP5还有以下4点重要改进:内嵌的文本型数据库SQLite、错误处理、SOAP支持、简化的枚举操作。

一、更全面的面向对象编程功能

这点的重要性是无需多讨论的。PHP3已经开始部分支持面向对象编程了,但不够成熟,在对类的操作上有不够简洁之处(例如在类创建和类销毁的时候,缺乏相应的好的机制),因此面向对象编程并不能算是PHP3的主要特性。

看上去,PHP5的面向对象功能似乎就是Java语言的翻版,实现了传统的Java里面几乎所有的面向对象编程的相关概念,以至于有人在说:是不是PHP5要被Sun公司收购了?还有人又回过头去炒一些老话题:面向对象的PHP能否击溃同样面向对象的JSP?

更优的面向对象编程能力将对PHP的发展起到非常强劲的推动作用。这体现在两点。

现有的大量的PHP系统如果从PHP4升级到PHP5后,在内在结构的设计上可以有相当的改善,并且可以更好地借用现有的一些很好的面向对象的设计模式。PHP的内涵进一步升华了,这是第一点。

当Java凌空出世的时候,有人做了些C2Java之类的软件,把C程序转换成Java程序,但是这些C2Java的软件基本上都不能很完善地工作。但可以想象的是,Java2PHP(把Java转换成PHP)这样的系统开发起来要容易的多。由于PHP的面向对象能力和Java极其相似,很多Java开发的系统可以轻松地移植、转换成PHP。我个人觉得,一些原来基于Java/JSP的系统将会转移到PHP来,而且这可能成为一个潮流。这是第二点。

二、MySQL扩展支持库MySQLi

这点也没有多少需要讨论的。当MySQL支持预处理等功能后,PHP自然也应该实现对应的功能。实际上,在数据库支持这块,MySQL要做的工作远比PHP要做的多得多。

三、改进的XML支持

这点很重要。此前给我的印象是,PHP对XML的支持始终不够强劲,对XML的处理能力比较差、不灵活,以至于好些人都避免用PHP的XML功能。如果翻阅网上大家发布的一些用PHP4写的XML相关类库,就会发现,很多人对XML操作的时候,都是使用其它方式实现的,而不是PHP里面的XML相关函数。我没有测试过PHP5对XML的支持,但相信PHP5会在这方面做得很好。

四、内嵌的文本型数据库SQLite

这个太棒了,是中小型PHP应用的福音(要知道,相当多的PHP系统都是中小型的)。我想很多PHP程序员都写过基于文本存储的应用程序(例如用文本方式保存的留言本),那种编程感觉是让人有些不爽的,尤其是在数据格式发生变更或者数据导入、导出的时候。

内嵌SQLite真是一个好想法!中小型系统由此不需要依赖MySQL或者其它数据库软件,也不必去使用脆弱的纯文本去存储数据,但是我们依然可以建造一个健壮的系统!我们开发的基于SQLite的系统未来可以轻松移植到其它数据库软件上,我们甚至可以用ADOdb去操作SQLite!

(注:如果deminy依然坚持不在deminy.net上使用MySQL之类的数据库软件的话,但至少,deminy肯定会使用SQLite来改写自己的blog、留言本等程序。2)

五、错误处理

我并没有详细阅读这方面的文档,但可以想象得到这个改进很棒。早期的PHP纵容错误的发生,并且放任错误的发生,虽然使得编程容易了点,但也导致了一些开发方面的问题。如果PHP能够在错误处理方面大大加强的话,无疑在两个方面会得到很重要的改进:一是开发过程中的错误跟踪和调试;二是系统实现(业务)过程中对于流程方面的错误处理将会更容易被合理的处理。

(对于这一点,deminy没有具体研究PHP5的新的错误处理机制,只是通过对Java和PHP相关的错误处理机制的对比而做了一些探讨,说得很泛泛。或有谬误。)

六、内置对SOAP的支持

这个很棒。我估计在PHP5之前,PHP里SOAP的实现,是需要通过第三方类库来实现的(也许PEAR里面也支持SOAP,但我不知道)。比较有名的第三方类库是NuSOAP,但我个人对NuSOAP在web上承受高压的性能不很放心(去看看NuSOAP的代码就知道了,长长的!)。

现在PHP5内置了对SOAP的支持。也许在PHP里用SOAP的人不是很多,但是对于那些在PHP中使用SOAP的人,PHP5无疑是很好的一个福音,至少,SOAP编程在PHP5里面变得明显的简单了(关于这一点可以在phpclasses.org下载SOAP相关的代码做研究)。

七、简化的枚举操作

这也是个很棒的实用型的东西,完全符合PHP的设计思想:简化编程。翻来覆去地看,PHP大体上就那么几块主要的东西:数据库操作、文件流读写、循环/枚举等。对枚举操作的高度简化是一个很棒的想法,这是PHP程序员很喜欢的一个新特性!

总结:哪些新特性更重要?

我个人觉得:更全面的面向对象编程功能是最重要的;错误处理的引入有必要,但错误处理机制执行效果如何,还有待评估;更好的MySQL扩展支持库MySQLi、改进的XML支持这两点对于较大型的PHP应用更有帮助;其它三点(内嵌的文本型数据库SQLite、内置对SOAP的支持和简化的枚举操作)则属于小敲小打类型的,但非常实用,尤其是内嵌SQLite!

因此,我对这些新特性的重要性评估如下:

1. 更全面的面向对象编程功能
2. 错误处理机制 (有待进一步评估)
3. MySQL扩展支持库MySQLi
3. 改进的XML支持
4. 内嵌的文本型数据库SQLite
5. 内置对SOAP的支持
5. 简化的枚举操作

from:
http://www.blogcn.com/u/66/27/shaoxg/blog/31649262.html
有时搞一些跨网段的工程和应用,需要尽量准确的知道电信、网通、铁通等电信运营商的IP地址段分配情况,可网上的资料不但很少,而且经常都是N个月前的过期资料……

APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的!下面就让我们看看如何在Linux下获得一些电信运营商的IP地址分配情况:

shell> wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz

shell> tar xzvf ripe-dbase-client-v3.tar.gz
shell> cd whois-3.1
shell> ./configure
shell> make
完成上述编译安装工作后,我们开始获取IP地址段;

中国网通:
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP > /var/cnc

中国电信:
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET > /var/chinanet

中国铁通:
shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC > /var/crtc

打开获取后的文件可以看到里面的信息非常详细,甚至可以看到各个分公司的负责人、电话、电子邮件等等信息。如果想得到一份整齐干净的IP地址段文件,只要用grep和awk简单过滤就可以了:)
方法一:
$str = "超越PHP";
if  (preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $str)) {
   echo "这是一个纯中文字符串";
} else {
   echo "这不是一个纯中文字串";
}

方法二:
//判断是否为中文
//$str:待检测的字串
//$loum:错误时返回的字段显示名称
function fun_china($str,$loum=""){
$str_arr=strlen($str);
$str_count=count($str_arr);
for($i=0; $i<$str_count; $i++)
{
if (ord($str[$i]) < 128)
{
showerror($loum."应为中文,请检查!");
exit;
}
}
}
今日写了个生成文件的函数,应该挺有用的:

$file 是包含路径的参数,$html是文件内容,具体代码如下:

* 作者:heiyeluren
* 时间:2006-03-05
* 博客:http://blog.csdn.net/heiyeshuwu

[  Web Service介绍 ]

Web Service就是为了异构系统的通信而产生的,它基本的思想就是使用基于XML的HTTP的远程调用提供一种标准的机制,而省去建立一种新协议的需求。目前进行Web Service通信有两种协议标准,一种是XML-RPC,另外一种是SOAP。XML-RPC比较简单,出现时间比较早,SOAP比较复杂,主要是一些需要稳定、健壮、安全并且复杂交互的时候使用。

PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,如果没有xmlrpc扩展,建议使用PEAR::XML-RPC扩展。

我们这里主要是以XML-RPC来简单描述Web Service的交互过程,部分内容来自PHP手册,更详细内容,建议参考手册。


[  安装xmlrpc扩展 ]

如果你的系统中没有安装xmlrpc的php扩展,那么请正确安装。

在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C:Windows或者C:Winnt目录下,(PHP4的扩展在C:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在C:Windowsphp.ini或者C:Winntphp.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。

在Unix/Linux平台下,如果没有安装xmlrpc扩展,请在重新编译PHP,在configure的时候请加入 --with-xmlrpc 选项,然后查看phpinfo()看是否正常安装xmlrpc。

(注意:以下操作都是建立在xmlrpc扩张正常安装前提下,请务必正确安装。)


[  XML-RPC工作原理 ]

XML-RPC大致就是整个过程就是使用XML来进行通信。首先构造一个RPC 服务器端用来出来从RPC客户端传递过来的使用XML封装的请求,并且把处理结果通过XML的形式返回给RPC客户端,客户端就去分析XML获取自己需要的数据。

XML-RPC的服务器端必须有现成的函数提供给客户端调用,并且客户端提交的请求中的函数和方法必须和服务器端的一致,否则将无法获取所需要的结果。

下面我进行简单的代码来描述整个过程。


[  XML-RPC实践 ]

服务器端使用xmlrpc_server_create函数产生一个服务器端,然后把需要需要暴露的RPC调用接口进行注册,接受RPC客户端POST过来的XML数据,然后进行处理,处理结果通过XML的形式显示给客户端。

代码如下: rpc_server.php

<?php
/**
* 函数:提供给RPC客户端调用的函数
* 参数:
* $method 客户端需要调用的函数
* $params 客户端需要调用的函数的参数数组
* 返回:返回指定调用结果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
  if ($parameter == "get")
  {
      $return = ''This data by get method'';
  }
  else
  {
      $return = ''Not specify method or params'';
  }
  return $return;
}

//产生一个XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();

//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");

//接受客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;

//执行调用客户端的XML请求后获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);

//把函数处理后的结果XML进行输出
header(''Content-Type: text/xml'');
echo $xmlrpc_response;

//销毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
?>


服务器端构造好了,那么再构造我们的RPC客户端。客户端大致通过Socket访问XML-RPC服务器端的80端口,然后把需要调用的RPC接口封装到XML里,通过POST请求提交给RPC服务器端,最后获取服务器端返回结果。

代码如下:rpc_client.php

[code]<?php
/**
* 函数:提供给客户端进行连接XML-RPC服务器端的函数
* 参数:
* $host  需要连接的主机
* $port  连接主机的端口
* $rpc_server XML-RPC服务器端文件
* $request  封装的XML请求信息
* 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {

  //打开指定的服务器端
  $fp = fsockopen($host, $port);

  //构造需要进行通信的XML-RPC服务器端的查询POST请求信息
  $query = "POST $rpc_server HTTP/1.0 User_Agent: XML-RPC Client Host: ".$host." Content-Type: text/xml Content-Length: ".strlen($request)." ".$request." ";

  //把构造好的HTTP协议发送给服务器,失败返回false
  if (!fputs($fp, $query, strlen($query)))
  {
      $errstr = "Write error";
      return false;
  }
 
  //获取从服务器端返回的所有信息,包括HTTP头和XML信息
  $contents = '''';
  while (!feof($fp))
  {
      $contents .= fgets($fp);
  }

  //关闭连接资源后返回获取的内容
  fclose($fp);
  return $contents;
}

//构造连接RPC服务器端的信息
$host  = ''localhost'';
$port  = 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';

//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get
$request = xmlrpc_encode_request(''rpc_server'', ''get'');

//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
$response = rpc_client_call($host, $port, $rpc_server, $request);

//分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
$split = ''<?xml version="1.0" encoding="iso-8859-1"?>'';
$xml =  explode($split, $response);
$xml = $split . array_pop($xml);
$response = xmlrpc_decode($xml);

//输出从RPC服务器端获取的信息
print_r($response);

?> [/code]


大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回的XML数据是:

<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
 <value>
  <string>This data by get method</string>
 </value>
</param>
</params>
</methodResponse>


那么我们再通过xmlrpc_decode函数把这个XML编码为PHP的字符串,我们就能够随意处理了,整个Web Service交互完成。


[  结束语 ]

不管是XML-RPC也好,SOAP也罢,只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使用。

简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册,如果文章有不正确,请指正。


本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( ProgramFan.Com )
加密解密的算法实例:

$key = "This is supposed to be a secret key !!!";
function keyED($txt,$encrypt_key)
{
$encrypt_key = md5($encrypt_key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++)
{
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}


分页: 7/11 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐