2024年3月3日发(作者:)
维普资讯
~朱一一殊一 的结合 文/肖文鹏 摘娶:本文讲蓬了妇何在I ̄lux率舍下安装和配置PHP的lava扩展穰块,以及妇何在PHP 脚本甲剖建和调用lava对象,此外还对妇何在PHP脚本甲处理lava异常作了简娶介绍。 PHP, Java、 Apache,Linux、PHP扩展 一、蔺介 本文主要介绍如何在Linux环境下安装和配置PHP的Java 扩展模块,以及如何利用PttP的Java扩展模块在PHP脚本中创 作为一种Web服务器端的脚本语言,PHP凭借其强大的功能 和优秀的跨平台特性, 始逐渐吸引人们的注意,特别是随着 建并调用Java对象。 Linu)(操作系统的不断普及和开放源码运动的逐渐深入,越来越多 的开发者都开始选用Apache+PHP+MySQL作为网站的支撑平台。 PHP最初设计目标是类似于c语言的结构化脚本语言,因 而并没有考虑到对面向对象的支持,只是因为后来随着面向对 象程序设计原则和方法的广泛使用,才迫使PHP的设计者们不 得不加入了一些面向对象的基本特性。由于设计上的先天不足, 导致PHP与一些专门的面向对象语言(如c++、Java和Python) 相比,对面向对象特性的支持显得相当软弱和幼稚。PHP只能提 供最基本的面向对象特性,而像虚函数、析构函数、函数 载、 私有函数和私有变量这类特性则不被PHP所支持。 尽管PHP在编写Web服务器端脚本方面具有诸多优点,但 由于其面向对象的功能过于简单,因而在开发大型网站和强调 软件复用的场合下还是显得捉襟见肘。目前解决该问题的一种 有效方法是将PHP和Java结合起来,借助PHP在开发Web服务 器端脚本方面的简单高效和Java在面向对象方面完整而强大的 支持,来共同完成网站的开发工作。 PHP之所以具有如此旺盛的生命力,一个很重要的原因在 于其开放的体系结构和良好的可扩展性,从而使得PHP能够被 非常方便地进行功能性扩展。为了借助Java在面向对象方面 的优势,PHP专门针对Java语言开发了相应的功能扩展模块, PHP脚本可以借助Java扩展来生成Java对象,并能够通过简 单而有效的方法来调用该对象中定义的方法。 以下的安装和配置过程建立在Apache 1.3.24、PHP 4.1.O和 Sun JDK 1_4 O基础之上,操作系统选用的是Re.at Lir1L1)(7.2。 步骤一安装JDK JDK的安装相对来讲比较简单,只需从Sun网站http://jav ̄ suiz conl下载相应的软件包并解压缩到/usr/local/j2sdk1.4.0/目 录下,然后再设置好环境变量PATH和CLASSPATH就可以了。 步骤二安装Apache 从Apache网站http://v ̄w.apache.org下载相应的软件包 并解压缩到/tmp/apache1.3.24/目录下,然后以root身份执 行下面的命令编译并安装Apache: [root]#cd/tuf)/apache 1.3.24 [root];t./configure一一enable—shared= ̄x [root]#make [root]#make instal1 步骤三安装PHP 从PHP网站http://www.php.net下载相应的软件包并解压 缩到/tmp/php-4.1.O/目录下,然后以root身份执行下面的命 令编译并安装PHP: [root]#cd/t ̄p/php一4.1.0 [root]#./configure--with—apxs-/usr/local/apache/hin/apxs\ with—config-file—path=/usr/local/etc/t
。。。 一 譬j ■爹_ 熏 警 雾 。 臻 j—r …j j=¨ 。。 霹。鬻 曩 : ; 翳 0 ; 0— 豫 鬈 维普资讯
黔一 _ _l_ 。i ith java=/usr/local/j2sdk1.4.O/ EEEE, dd.YYYY at h:m:ss a ZZZZ ). Eroot]#make -root]#make instal1 print¥formatter一>format(new Java( j|dvdJ util.Date )) ?> 步曩四鼍置PHP的Java扩展 将/tmp/php一4.1.0/目录下的php、ini—dist文件复制到/ usr/local/etc/目录下,并更名为php、ini。编辑该文件, 在[Java]一节中加入以下几项配置信息:  ̄Java] java.1ibrary=/usr/local/j2scN1.4|O/ire/1ib/i386/client/1ibjv ̄so java class path=/usr/local/1ib/php/phpjava jar:/usr/local/ 将上述脚本命名为bui ldin.php,并保存到Apache的文档 根目录/usr/local/apache/htdocs/下,如果一切正常,在浏 览器中查看该脚奉时将显示如图1所示的贞画。 EI —Edit—View§0 Beokma ̄s Iools window H_eIp .0 Javaversion=1 4 0 口tems Inc 图匦团 。 j2sdk1.4.O/jre/1 ib/rt.jar:/usr/local/apache/htdocs java hcme=/usr/local/j2sdk1.4.0 Javavendor=SanMier ̄0s=Linux 2,4 2—2Oili386 星期一六月10.2902 at 2:26:38下午GMT+08:O0 extensin dior=/usr/local/1 ib伽/e](t日1Si∞s _deb TIIrzts 0l∞0l extension=1 ibphp java SO 在上面的配置信息中,java.1 ibrary为PttP指定将被调用 的Java虚拟机所在的位置,PHP的Java扩展模块通过Java本 地接口(JNI)来创建Java虚拟机;java.class.path为Java 虚拟机设置查找类文件时的搜索路径,该路径中至少应该包括 PHP Java扩展模块中提供的php java.jar和Sun JDK中提供的 借助PttP提供的Java扩展来创建Java对象是相当简单的, bui ldin.php脚本的第一行创建了java lang.System类的一个实 例,并将其保存到PHP变量¥syStem中: ¥system=new Java( java lang.System ): %Document Done【q aas sect)—0 <图1> rt.jar,此外若PHP脚本中要用到自定义的Java类,也要在 此处给出这些类所在的路径:java.home为Sun JDK所在的路 径;extension—dir为PHP的Java扩展模块所在的路径;ex- tension则为PttP的Java扩展模块所对应的动态连接库文件。 步曩五重新启动ADache 关闭当前正在运行的Apache,然后以root身份执行下面 的命令来重新启动Apache: [root>ell ̄o1%LD LIBINffyAT&/usr/local/j2s&1.4|O/ire/1ib/i386/:\ /usr/l ̄al/j2sdk1.4|O/jre/lib/i386/client/ 由于只给出了要创建的Java对象的类名,因而Java虚拟 机将调用java.1ang.System类的默认构造函数。如果在PHP脚 本中创建Java对象时除了给出类名之外还给出了其他一些参 数,则J av a虚拟机将会根据这些参数来调用恰当的构造函 数,例如,对于下面这条PH P语句: ¥fP=new Java( java io File , /heme/gary/test txt ): [root]#/usr/local/apache/bin/apachect1 start Java虚拟机将会调用jaw io.File类提供的仅带一个参数 的构造函数,并将 /home/gary/test.txt 作为参数值传递给 三、使用J 【ll呐Java类 先从一个简单例子开始来讲述如何在PHP中调用Java对 象,下面的PHP脚本利用JDK中内置的Java类java lang.System、 被调用的构造函数,从而最终创建一个用于处理/home/gary/ text.txt文件的File对象。 一旦Java对象被创建,PHP脚本就可以用面向对象的语法 来访问Java类提供的公有方法和属性。例如,要通过System 类的getProperty0方法来获Java虚拟机的版本信息,就可以 用如下的脚本语句来实现: ¥system->getProperty( java.version ): java text.SimpleDateFormat和jrdva ut i 1.Date来获得当前系 统的一些信息。 <?php //Create instance of Java class java lang.Systme in PHP PHP的Java扩展就是通过如此简单而有效的方法实现了对 Java的封装,从而使PHP脚本能够直接复用己经存在的Java 代码,极大地提高了网站开发的效率和质量,同时还为PHP 引入了强大的面向对象的支持。 ¥system new Java( jav&lang.System ): //Access property. print ̄Java versin- .¥systoem->getPro ̄erty( jaw version*). < > print ̄Java vt ̄3r=- .¥system->getProperty( java vendor*). Cot> : print Os= .¥system->getProperty( os.name ). . ¥system->getProperty( OS.version ). on Ssystem->getProperty( OS.arch ). <br> : //Use java uti1.Date. 除了使用JDK中内置的Java类外,在PHP脚本中还可以 使用自定义的Java类。下面自定义的这个Java类Calculator ¥formatter=new Java( java text SimpleIMteFormat ,
维普资讯
用于完成对两个数的加、减、乘、除四则运算: publ ic Class Calculator i double NumberA,NumberB: tot实现了一个简单的Web计算器: <html> <head> publ ic Calculator 0 NumberA=1. NumberB=1. <titIe>PHP Java Calculator</title> (/head> <body> <?php publ ic void setA(double a) NumberA=a. ¥result=0. if(isset(¥numbera)&&isset(¥numberb)){ setType(¥numbera double ): public void setB(double b) NumberB=b, setType(¥numberb, double ): ¥calc=new Java( Calculator ): ¥calc一>setA(¥numbera): public double multiply0 return NumberA NumberB ¥calc一>setB(¥numberb): ¥operator=~: switch(¥ctype){ public double divide0{ return NumberA/NumberB case( add ): Sresult=¥calc>add(). ¥operator= public double add0{ return NumberA+NumberB break: case( sub ): ¥result=¥calc一>subtract 0: publ ic double subtract 0 return NumberA—NumberB ¥operator= 一 : break: case( mul ): ¥result=¥calc一>multiply0: 将上述Java源程序命名为Calculator.java,并保存到 Apache的文档根目录/usr/local/apache/htdocs/下。由于在/ ¥operator= ★ break, usr/1oca1/etc/php.ini文件中,/usr/local/apache/htdocx/ 目录己经被加到java.class.path配置项中,因而PHP脚本在 case( div ): ¥resuh=¥calc一>divide 0: ¥operator= / : break: 创建Calculator类的对象时,能够从该目录中查找并加载所 需的类文件。 ) Sstack.= Snumbera¥operator¥numberb=¥result<br> 在生成Calculator.java文件后,执行下面的命令对其进 行编译,得到Java虚拟机所需要的类文件Calculator.class: [root]n cd/usr/1ocal/apache/htdocs/ print( <h2>¥stack</h2> ): ) ?> [root]n javac Calculator.java 一旦自定义Java类的源程序能够正确通过编译,就可以 <hi>Input two numbers:</hi> <form act ion- calc.php method= post > <table bgcolor-  ̄dfdfdf cellspacing= 0 cellpadding= 3 在PHP脚本中创建该Java类的对象,并调用该对象提供的公 有方法和属性。下面的PHP脚本利用自定义的Java类Calcula- order- 0 > b<tr> <td>Number A:</td> <td><input type- text name- numbera ></td> </tr> <tr> <td>Method:</td> <td> <select nalne- ctype >
维普资讯
<option value= add >Add</option> <option value= sub >Subtract</option> <option value= mul >Multiply</option> <option value= div >Divide</option> </select> 异常处理是Java语言中一个非常重要的机制,PHP的Java扩 展通过使用函数java last exceptionlet 0和java lsta exception </td> </tr> <tr> clear 0,在PHP脚本中实现了对这一机制的支持。 若P卜Ⅱ)的Java扩襞模块通过Java本地接口(JNI)创建的 Java虚拟机有异常抛出时,将最终导致一个PHP警告信息的产 生,同时还将返回一个空值(NuLL)。此时若在PHP脚本中 调用函数java last~except ion get 0,则可以获得异常的相关 信息,利用这些信息可以对异常情况做进一步的处理。当异常处 0函数来 理完后,P}Ⅱ)脚本应该调用javaflastexceptionclear <td>Number B:</td> <td><input type= text naiile= numberb 、 </tr> </table> <br> <input type= submit value= Calculate 、 清除所有的异常信息,从而保证程序在逻辑上的正确性。 下面的Java类ReverseString用于完成对字符串的转置运 算,该类中的reverse 0方法中包含一个数组越界错误,因此 Java虚拟机在执行该方法时将有一个异常被抛出。 import java io.Writer: import java.io.IOException: import java lang.Exception: <input type=*hidden value= <?php print(¥stack)?> name-- stack > <『t0rm> </body> </html> 将上述脚本命名为calc.php,并保存到Apache的文档根 目录/usr/local/apache/htdocs/下,如果一切正常,在浏览 器中查看该脚本时将显示如图2所示的页面。 public class ReverseString{ public Writer out public void setWriter(Writer out)i this.out=out: ; public void reverse(String string)throws Exception i try f //Reverse the input string. char tempi]=new char[string.1ength0]: for(int i=0:i<string.1ength0:i++) temp[i]=string.charAt(string,length0一i). String reserved=new String(temp): <图2> out.*rite(reserved): }catch(Exception e)f //Catch everything else, 由于PHP属于弱类型定义语言,而Java则属于强类型定义 语言,为弥补两者之间的差异,当PHP中的变量作为参数传递 给Java对象之前,可以先调用P}Ⅱ)提供的函数setType0来设置 参数的类型。例如,下面这两条PHP语句: setType(¥numbera, double ): setType(¥number ̄ double ): throw new Exception( Some error happened ), } } 将上述Java源程序命名为ReverseString.java,并保存到Apache的文 档根目录/usr/local/apache/htd0cs/下。然后执行下面的命令对其进行编 将PHP变量Snumbera和¥numberb的类型设置为double型, 此后当这两个变量作为参数交给Java虚拟机处理时,将被作 为double类型来对待。 虽然上面给出的例子都只使用简单数据类型在PHP和Java 之间进行通信,但事实上还可以使用数组在PHP和Java间进行 数据交换。遗憾的是,目前PHP所提供的Java扩展还不具备 译,得到Java虚拟机所需要的类文件Reversestring.class: [root] ̄cd/usr/lacal/apache/htdacs/ [root ̄#javac ReverseString.java 下面的P}Ⅱ)脚本创建了ReverseString类的一个对象,并随 后调用了该对象的reverse0方法。由于Java虚拟机在执行 ReverseString类的reverse 0方法时将抛出一个异常,因而此 时调用P}Ⅱ)函数java_last—exceptionget 0将得到与之对应的异 在PHP和Java间直接以对象为单位进行数据交换的能力。 常信息,该异常信息被保存在PHP变量¥e中,PHP脚本通过检
维普资讯
查Se是否为空来判断Java虚拟机中是否有异常 产生。 异常处理完毕后,P H P脚本调用 java last except ion clear 0函数来清除所有的 异常信息。 <?php Create an instance of Java class ReverseString ¥obj=new Java( ReverseString ): , Create an instace of Java class StirngWriter. ¥sTiter=new Java( jay&io.StringWriter ): ¥obj一>setWriter(¥writer), @¥obj)reverse( PHP and Java Programming ): //Get the last exception Se=java last exception get 0: if(¥e) 。。/Give error infomation. 上一讲我们主要介绍了图像的格式,其中重点说明了BMP文件的存储 print Se一>toString0. el se 格式,同时对JEPG和GIF等常用格式作了简单的介绍。本节主要讲述如 何操作BMP文件,如对其读、写和显示等。 print S iter>toString0: Sw’1ter>flush0 SWriteI->close0: 在实现数字图象处理的过程中,主要是通过对图像中的每一个像素点 运用各种图像处理算法来达到预期的效果,所以进行图像处理的第一步, 也是我们最关心的问题,是如何得到图像中每一个像素点的亮度值;为 了观察和验证处理的图像效果,另一个需要解决的问题是如何将处理前后 Llear exception. 的图像正确的显示出来。我们这章内容就是解决这些问题。随着科技的 java last exception clear0. ?> 发展,图像处理技术已经渗透到人类生活的各个领域并得到越来越多的应 用,但是突出的一个矛盾是图像的格式也是越来越多,目前图像处理所 涉及的主要的图像格式就有很多种,如T IF、JEMP、BMP等等,一般情 将上述脚本命名为except ion.php,并保存 到Apache的文档根目录/usr/1ocal/apache/ ht doc s/下,如果一切正常,在浏览器中查看 该脚本时将显示如图3所示的页面。 况下,为了处理简单方便,进行数字图像处理所采用的都是BMP格式的 图像文件(有时也称为DIB格式的图像文件),并且这种格式的文件是 没有压缩的。我们通过操作这种格式的文件,可以获取正确显示图像所 需的调色板信息,图像的尺寸信息,图像中各个像素点的亮度信息等 £He—Edit V—iew—Go—Bookmarks Iools W__indo,,v Help 0 口匿 。 等,有了这些数据,开发人员就可以对图像施加各种处理算法,进行相 应的处理。如果特殊情况下需要处理其它某种格式的图像,如GIF、JEMP la a iang Exception:Some error happened 等格式的图象文件,可以首先将该格式转换为BMP格式,然后再进行相 应的处理。这一点需要读者清楚。 BMP格式的图像文件又町以分为许多种类,如真彩色位图、256色位 图,采用RLE(游程编码)压缩格式的BMP位图等等。由于在实际的工程应 }Document Done(o s sees);蕾 - 用和图像算法效果验证中经常要处理的是256级并且是没有压缩的B 灰度
发布者:admin,转转请注明出处:http://www.yc00.com/news/1709453794a1628512.html
评论列表(0条)