admin 管理员组文章数量: 1184232
2024年4月30日发(作者:thinkphp最新框架)
维普资讯
~朱一一殊一
的结合
文/肖文鹏
摘娶:本文讲蓬了妇何在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/apache
1.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/php
java 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}Ⅱ)脚本应该调用javaflast
exception
clear
<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—exception
get 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 灰度
版权声明:本文标题:珠联璧合PHP与JAVA的结合 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714421621a679569.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论