|
|
LII. PHP / Java の連携
PHPとJavaの連携をとして考えられる手段は2種類あります。PHPをJavaサーブ
レット環境に統合する方法とJavaサポートをPHPに統合する方法です。前者の
方がより安定で効率的な手法です。前者は、サーブレットサーバへのインター
フェイスとしてSAPIモジュールにより提供され、後者は、Java拡張モジュール
として提供されます。
Java拡張モジュールは、PHPからJavaオブジェクトのメソッドを生成し、
コールする簡単で効率的な手段を提供します。このJVMはJNIを用いて作
成され、全てはこのプロセスで動作します。
警告 | このモジュールは、
実験的なものです。これは、これらの関数の動作、関
数名は、このドキュメントに書かれて事項と同様に告知なく将来的なPHPのリ
リースで変更される可能性があります。注意を喚起するとともに、このモジュー
ルは使用者のリスクで使用して下さい。 |
この拡張モジュールを使用するには、使用するマシンにJava VMがインス
トールされていることが必要です。
この拡張モジュールの構築手順は、
php4/ext/java/READMEにあります。
Win32ユーザへの注意:
この拡張モジュールを有効にするには、PHP/Win32バイナリパッケージの
DLLフォルダからjvm.dllを使用するWindowsマシン
のSYSTEM32フォルダ(例:C:\WINNT\SYSTEM32または C:\WINDOWS\SYSTEM32)
にコピーする必要があります。
これらの関数の動作は、php.iniの設定により変化します。
表 1. Java設定オプション 名前 | デフォルト | 変更の可否 |
---|
java.class.path | NULL | PHP_INI_ALL | java.home | NULL | PHP_INI_ALL | java.library.path | NULL | PHP_INI_ALL | java.library | JAVALIB | PHP_INI_ALL |
PHP_INI_* 定数の詳細と定義については、
ini_set()を参照して下さい。
この拡張モジュールはリソース型を全く定義しません。
例 1. Javaの例
<?php
$system = new Java('java.lang.System');
print 'Java version='.$system->getProperty('java.version').' <br>';
print 'Java vendor=' .$system->getProperty('java.vendor').' <br>';
print 'OS='.$system->getProperty('os.name').' '.
$system->getProperty('os.version').' on '.
$system->getProperty('os.arch').' <br>';
$formatter = new Java('java.text.SimpleDateFormat',
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
print $formatter->format(new Java('java.util.Date'));
?>
|
|
例 2. AWTの例
<?php
$frame = new Java('java.awt.Frame', 'PHP');
$button = new Java('java.awt.Button', 'Hello Java world!');
$frame->add('North', $button);
$frame->validate();
$frame->pack();
$frame->visible = True;
$thread = new Java('java.lang.Thread');
$thread->sleep(10000);
$frame->dispose();
?>
|
|
注意:
new Java() は、有効なコンストラクタがある場合、
クラスのインスタンスを生成します。引数が指定されない場合には、
デフォルトのコンストラクタにより
java.lang.Systemのようなクラスにアクセスすると
良いでしょう。このクラスは、静的な手法でそのクラスの機能の多くを
公開しています。
あるインスタンスのメンバーにアクセスする際には、まずbeanプロパティ
が探されてから、次にpublicフィールドが探されます。言い換えると、
print $date.timeはまず
$date.getTime()と解釈され、続いて
$date.timeと解釈されます。
静的メンバおよびインスタンスメンバは共に同じ構文でアクセス可能です。
さらに、javaオブジェクトがjava.lang.Class型の場
合、このクラスの静的メンバ(フィールドとメソッド)にアクセス可能です。
例外が発生するとPHPの警告が出力され、結果はNULLとなります。警告は
"@"記号を付けてメソッドをコールすることに抑圧できます。以下のAPI
を直近のエラーを取得し、リセットするために使用することができます。
オーバーロードの解決は、二つの言語の間で型の違いがあるため一般には
困難な問題です。PHP のJava拡張機能は簡単ですが最も一致するオーバー
ロードを定義するかなり効率的な手段を使用しています。
加えて、PHPのメソッド名は大文字小文字を区別しないため、選択される
オーバーロードの数は増加する傾向があります。
メソッドが一度選択されると、パラメータの値は必要に応じて調整されま
す。このため、(倍精度実数が論理値に変換されるといった)データの劣化
が発生する可能性があります。
PHPでは伝統的に配列とハッシュテーブルは相互に完全に可換でした。PHPの
ハッシュテーブルは整数または配列の添字のみを使用できることに注意して
下さい。また、Javaのprimitive型の配列は疎とすることができないことに
も注意して下さい。これらの構造は値で渡されるため、メモリと時間の消
費量が大きくする可能性があります。
Java Servlet SAPIは、PHPプロセッサ全体をサーブレットとして実行す
るためにJava拡張モジュールにより定義された機構の上に構築されています。
この形態のPHPの側からこの実装が基本的に優れている点は、サーブレットを
サポートするWebサーバが通常JVMをプールし、再利用することに注力している
ことです。このサーブレットSAPIモジュールの構築手順は、
php4/sapi/README にあります。
注意:
このコードは、全てのサーブレットエンジンで実行可能であるように作成
されていますが、現在ApacheのJakarta/tomcatでしかテストされていませ
ん。他のエンジンでこのコードを実行する際に必要なパッチ、バグレポー
ト、成功事例等をお知らせ下さい。
PHP は、動作ディレクトリを変更する特徴があります。sapi/サーブレット
はもとに戻そうとしますが、PHPが実行されている間、サーブレットエンジ
ンはCLASSPATHい相対ディレクトリにより指定されている全てのクラスをロ
ードできないか、管理用およびJSPコンパイル用に使用されている作業ディ
レクトリを見つけることができなくなる可能性があります。
jost2345 at yahoo dot de
31-Aug-2004 12:08
The PHP/Java bridge that has been posted some time ago is now available on sourceforge.net. It contains several bugfixes and is meant to be used as a replacement for the expermental PHP4 java bridge.
So please don't send me private e-mails anymore to obtain the sourcecode for the bridge.
PHP/5 users may want to wait for the official PHP/Java bridge, which I expect to appear in a few years when java contains the appropriate hooks.
okapi at yahoo dot com
26-Aug-2004 05:05
As mentioned prior, Zend is working to be the first of an official servlet / scripting integration. I've been testing their reference implementation that's available on the JSR 223 site and it's working pretty good. Some minor issues around the edges, but been working with one of their developers to fix it. So far, pretty good.
drgroove at myway dot com
07-Aug-2004 11:33
@ smc+phpman
Zend/PHP is likely awaiting the finalization of JSR223, which seeks to allow scripting languages a much clearer form of communication to/from Java.
This is a joint effort between Sun & Zend, among others. PHP will be the first language supported out of this JSR effort, others (such as Perl) will follow.
- DrGroove
Moderator, Devshed.com PHP forum
a9702466 at gmx dot net
03-Mar-2004 05:08
The Java Servlet SAPI works fine in a non-threading
environment. If you want to use threads (normal case) you
have to do several things to get it work:
- get the patched files from
- replace the sapi/servlet/servlet.java and
sapi/servlet/servlet.c file by the patched files
- build the php like this
./configure --with-tsrm-pthreads \
--with-servlet=/opt/resin --with-java=/opt/java \
--prefix=/opt/php-4.3.4
The primary problem is, that the request and response
objects are stored as global instance-variables of the servlet
which will be overwritten by other threads invoking the
servlet (remember: just on servlet-object for all threads!) and
all crashes. I changed the servlet to pass the request and
response objects to the java- and native-methods (where
required) to prevent the problem.
Once you have solved this problem it works fine and needs
unlike the java-extension just one jvm.
norman at junkonline dot com
29-Feb-2004 12:16
This works fine on MacOS X (Panther). The one trick is, you need to symlink "java.so" in your php extensions directory to "libphp_java.jnilib".
Here's the relevant section from my php.ini file for anyone who needs it:
[Java]
java.class.path = "/usr/local/lib/java/php_java.jar"
java.home = "/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home"
java.library.path = "/usr/local/lib/php/extensions/no-debug-non-zts-20020429"
extension=java.so
You may have decided to put php_java.jar somewhere other than where I did.
For some reason, setting java.library in the ini file causes this to fail, so I left it out and things worked flawlessly without it. YMMV.
Thomas
25-Feb-2004 03:44
The documentation is missing an important note:
The PHP/JAVA bridge only works on threaded http servers such as IIS, it does NOT work on http servers such as APACHE which fork off (sub-)processes.
The reason for this is that for each new request APACHE fork()'s off a new and independed copy of itself, initializes the java VM and eventually passes control over to VM until the request is finished. If the request is finished, the child with the java VM go to the apache pool.
That means that after a while hundreds (up to MAX-PROCESSES) of java VM's are in the apache pool each of them eating away up to 64MB. The machine may sooner or later crash because it ran out of memory. (If you have luck, the bridge will not run at all because apache was not statically linked to the pthreads library).
Although another PHP/Java bridge exists that does not have this problem (do a google search for "A new PHP/JAVA module"), the java binding (used by both bridges) has also problems one must be aware of. For example if one creates a Properties() object, one will receive a reference to it and may ask this reference for its values. However, if one invokes a method that returns a Properties() object, one will receive an array of values, not a reference to the Properties() object.
In short: If you want to use java from php in IIS, you can use this bridge. BUT if you want to use java from php in APACHE, you must use a socket approach (for an example see "A new PHP/JAVA module").
georgedaswani at hotmail dot com
02-Feb-2004 10:39
I was able to compile java support in no problem and got it working sun jdk 1.4.2_03 (linux)
make sure JAVA_HOME is set
make sure LD_LIBRARY_PATH has
$JAVA_HOME/jre/lib/i386
on php.ini
[Java]
java.home = "/opt/j2sdk1.4.2_03"
java.class.path = "/opt/php/lib/php/php_java.jar:/opt/php/java-packages"
java.library.path = "/opt/php/lib/php/extensions/no-debug-zts-20020429"
extension_dir= "/opt/php/lib/php/extensions/no-debug-zts-20020429"
extension = java.so
It's import to note that APACHE 2 needs to be compiled using "PREFORK" instead of a thread based else the java stuff will work for a minute, then stop working with the following error
"PHP Fatal error: Unable to create Java Virtual Machine"
Seems that the extension is not thread safe.
07-Nov-2003 06:00
PHP-Java-MySQL example downloads:
golob a with tail gimb little spot org
03-Jun-2003 01:57
This module allows PHP to interact with some interesting pieces of software - for one, it allows PHP to convert XML FO files into PDF/PS/... with the use of Apache FOP processor.
Here's an example:
<?
$basedir = new Java("java.io.File", ".");
$outdir = new Java("java.io.File", "out");
$outdir->mkdirs();
$fofile = new Java("java.io.File", $basedir, "xml/fo/helloworld.fo");
$pdffile = new Java("java.io.File", $outdir, "ResultFO2PDF.pdf");
echo "Input: ".$fofile->toString()."\n";
echo "Output: ".$pdffile->toString()."\n";
$driver = new Java("org.apache.fop.apps.Driver");
$logger = new Java("org.apache.avalon.framework.logger.ConsoleLogger");
$driver->setLogger($logger);
$driver->setRenderer($driver->RENDER_PDF);
$out = new Java("java.io.FileOutputStream", $pdffile);
$driver->setOutputStream($out);
$in = new Java("java.io.FileInputStream", $fofile);
$driver->setInputSource(new Java("org.xml.sax.InputSource", $in));
$driver->run();
$in->close();
$out->close();
?>
raggha at hotmail dot com
13-Jan-2003 10:45
Just wanted to make available the solution I found posted on
to solve the typical "Fatal error: Unable to Create Java Virtual Machine" trouble for Win32 users (thanks buddy):
[12 Dec 2002 9:19am] [email protected]
Hi there,
I'm confirming C�dric's knowledge - java is running correctly from within PHP on Apache only when PHP is running as a CGI and not as a SAPI module. When running PHP as Apache SAPI Module after the restart Apache only fist access to php page using java is running OK, all next reloads of this page caused "Fatal error: Unable to create Java Virtual Machine
in ..." I think this could be still not solved bug.
Thanks
Alberto
BTW I'm running on:
OS:Win2000 Server SP2
Apache:1.3.27
PHP Version 4.3.0-dev (Build Date Dec 12 2002 10:14:28)
Java version=1.4.1_01
Java vendor=Sun Microsystems Inc.
neil at lowden dot net
03-Jan-2003 09:41
** Success with W2K Server, PHP 4.3.0 as IIS5 SAPI module and J2SDK1.4.1_01 **
After a bunch of annoyingly spurious "access violation" and "Unable to create Java Virtual Machine" errors
I changed the php.ini setting for java.library from:
"C:\j2sdk1.4.1_01\jre\bin\client\jvm.dll"
to:
"C:\j2sdk1.4.1_01\jre\bin\server\jvm.dll"
All above examples now work perfectly incuding my own classes and those at
(thanks to emilebosch above on 18-Oct-2001 07:19).
I'd really like to know the difference between 'client' and 'server' JVM versions if anyone can illuminate us.
Notes:
1. Manual install of PHP 4.3.0 to C:\php with the following relevant extracts from php.ini:
extension=php_java.dll
[Java]
java.class.path = "C:\php\extensions\php_java.jar;C:\java\packages\"
java.home = "C:\j2sdk1.4.1_01\bin"
java.library = "C:\j2sdk1.4.1_01\jre\bin\server\jvm.dll"
java.library.path = "C:\php\extensions"
2. Default installation of latest Java SDK from Sun
3. Win2K Server SP2 with all(?) patches
4. My own classes are placed in C:\java\packages\
Hope this helps some people.
Regards
-Neil
jason at buildernaut dot com
19-Dec-2002 02:28
ON Linux / Apache --with-apxs
Page cannot be displayed - Apache crapping out.
I spent a great deal of time getting this to work - but hey - I'm a newbie.
One thing I did find was that I experienced an error I have not seen on this board or anywhere else in searches.
If you try to run a test java .php page and you get a page cannot be displayed error, try adding the follwing to your apache startup script
export LD_LIBRARY_PATH=/usr/lib/j2sdk1.3/jre/lib/i386/server
:/usr/lib/j2sdk1.3/jre/lib/i386
And of course change to paths that mean something to you.
joey at creativejuices dot ws
12-Dec-2002 12:27
*** Win32 Users & Using Command-line Interface ***
First of all, this is AWESOME!!!! I think PHP just took a huge leap forward with this capability!
Here is what you need:
In the Php.in file:
;Windows Extensions
extension=php_java.dll
[Java]
java.class.path = "C:\php\java\php_java.jar"
java.home = "C:\J2SDK_Forte\jdk1.4.0\jre"
java.library = "C:\J2SDK_Forte\jdk1.4.0\jre\bin\client\jvm.dll"
java.library.path = "C:\php\extensions"
**** Don't forget the double-quotes in the values ! ****
Next, add the file type association for Windows 2000.
1) open Windows Explorer
2) Click the Tool Menu Item
3) Select "Folder Options"
4) Select "File Types" tab
5) Select "New"
6) Type in your file extension for php scripts, I suggest ".phx" without the double-quotes
7) Click "Ok"
8) Find that extension in the "File Types" list again. You may have to back out and come back in to find it.
9) Once you found that newly added php extension, select the "Advanced" button. You can change the Icon here, but what you want to do is click the "New" button next to the "Actions" area.
10) For the "Action" value enter the value "open" without the quotes.
11) For the "Action used to perform this action:" value enter the value "C:\php\php-cli.exe -c C:\WINNT %1" without the quotes.
Lastly, add c:\php to you PATH Environment variable on your computer.
That should do it. You can test it by creating a test.phx file and open a cmd (DOS) window and cd into that directory(eg. c:\junk) and just execute your test file like this: c:\junk test.phx
This should return you your results as expected. If you don't know much about the php-cli.exe (cli = Command-Line Interface) go here
I used the person's example at the top of this page and it worked.
Now, if I can just figure out how to call my own custom classes that have their own packages.
mike [at] blamires (dot) co (dot) uk
07-Nov-2002 12:45
For win32 users: I spent some time wondering why the php session couln't find my classes/packages saved in my own custom classpath. even though the correct paths were specified in java.class.path. The reasons was as simple as double quotes. e.g.
java.class.path = c:\php\extensions\php_java.jar; c:\java\packages\ - incorrect, the packages & classes in c:\java\packages will not be found
java.class.path = "c:\php\extensions\php_java.jar;c:\java\packages\" - will find all your classes and packages in c:\java\packages
Thanks to PHP for another stunning feature.
Mike
aruntheking at hotmail dot com
09-Oct-2002 10:40
Something that i missed out in my above mentioned earlier note on the same
topic, Thanks to Pablo for reminding me the same
Important
-------------
After you have completed the above mentioned steps, open the httpd file in /etc/init.d and type the following lines
LD_LIBRARY_PATH=:/usr/local/j2sdk1.4.0_02/jre/lib/i386
:\/usr/local/j2sdk1.4.0_02/jre/lib/i386/server
else you will get an error stating libverify.so not found
Another process
---------------
Before compiling PHP complete the following steps:
edit your /etc/ld.so.conf file by adding the following two lines:
/usr/local/j2sdk1.4.0_02/jre/lib/i386
/usr/local/j2sdk1.4.0_02/jre/lib/i386/server
To make this change effect, type the following at the command prompt:
ldconfig
Now "cd" into /usr/local/j2sdk1.4.0_02/jre/lib/i386 directory and enter the following command:
ldd libjava.so
The response that you get back shouldn't contain any "not found" error messages. If you get any then you can add the path for
the "not found" file to /etc/ld.so.conf and redo the above mentioned steps till you don't get any error messages.
Now you can compile PHP in the process mentioned above and follow the rest of the steps.
pablo-at-godel.com.ar
30-Sep-2002 09:22
For those using Redhat 7.x and Sun JDK, you have to set in LD_LIBRARY_PATH the directory where libjava.so .
In my case it looks like:
LD_LIBRARY_PATH=:/usr/local/j2sdk1.4.0_02/jre/lib/i386:\
/usr/local/j2sdk1.4.0_02/jre/lib/i386/server
This solved my problem with libjava.so not finding libverify.so
Hopes this helps to save some time for others.. I spent a lot of time before figuring this one out...
aruntheking at hotmail dot com
19-Sep-2002 03:55
Installing PHP 4.2.3 on Red Hat Linux7.2
with Java Support-Arunoday
-------------------------------
PHP as CGI module
------------------
1. Download PHP from www.php.net
2. Copy the file in the folder you want to have it installed like
/usr/local
3. Unpack the file using the following commands
gunzip php-4.2.3.tar.gz
tar xvf php-4.2.3.ta
This will create a directory php-4.2.3.
4. cd into the above mentioned directory and type
./configure --with-java=<java directory>
You can add more options with
configure.
For a full list of options type ./configure --help | more
5. If configure doesn't through any error then type make
6. To test make you can type make test
7. To complete the installation type make install
In all probability the actual binary that this will create
by the name php will be in
the /usr/local/bin directory.
This file should then be copied to your
cgi-bin directory[the webservers cgi-bin]
in my system i issued the following command
cd /usr/local/bin/php /var/www/cgi-bin/php.cgi
8. Modify the php.ini with the following lines
[java]
java.class.path=/usr/local/lib/php/php_java.jar
java.library.path=/usr/local/lib/php
/extensions/no-debug-non-zts-20020429
java.home=/usr/local/j2sdk1.4.0_02
java.library=java.so
extensions_dir=/usr/local/lib/php/extensions/no-debug-non-zts-20020429
extension=java.so
in all probability the php.ini file will be
in the php4.2.3/pear/tests directory
- u will need to copy it to the
/usr/local/lib directory and add the above lines
You will also need to cd into the directory specified in java.library.path
above and type the following
ln -s java.so libphp_java.so
This will make a symbolic link to java.so file through libphp_java.so.
A call to any of your PHP file will have to be like the following:
PHP as Dynamic Shared Object
----------------------------
Retrieve PHP binary as mentioned above.
The configiration process will be different and will be as follows:
./configure --with-apxs=/usr/sbin/apxs
--with-java=/usr/local/j2sdk1.4.0_02 --with postgresql
postgresql is optional - u can leave it out if you donot want to use it.
apxs is required as it gives the directive to configure php as a dynamic shared object with Apache.
Advantage, it runs in the same memory space as Apache
and hence accessing of data is faster.
Apart from this there is no need to call the php interpreter (php.cgi) with every call to a PHP file.
Add the following lines in the php.ini file - it should be in /usr/local/lib
[Java]
java.class.path=/usr/local/lib/php/php_java.jar
:/usr/share/pgsql/jdbc7.1-1.2.jar:/var/www/html
java.home=/usr/local/j2sdk1.4.0_02
java.library=/usr/local/j2sdk1.4.0_02/jre/lib/i386/libjava.so
extension_dir=/usr/local/lib/php/extensions/no-debug-non-zts-20020429
extension=java.so
You will also need to cd into the directory specified in java.library.path
above and type the following
ln -s java.so libphp_java.so
This will make a symbolic link to java.so file through libphp_java.so.
Note: the jdbc7.1-1.2.jar file mentioned in java.class.path
is the JDBC part for Postgresql.
alexg at syspro dot co dot za
28-Aug-2002 06:50
According to an Article posted at:
there might be some problems with getting php and jdk-1.4 to work toghether.. I`ve tried (php-4.2.2 and jdk-4.1) with no success....
amtd at 163 dot net
11-Jun-2002 10:45
--php.ini-------------------------
[Java]
java.class.path = .\extensions\php_java.jar
java.home = c:\java
java.library = C:\java\jre\bin\server\jvm.dll
java.library.path = c:\apache\php\extensions
--system---------------------------
Windows 2000 P + Apache + SUN jdk 1.4.0-beta3
--app path---------------------------
java(C:\java)
Apache(C:\apache)
PHP(C:\apache\php)
-----------------------------
success!
gturner at newedgenetworks dot com
30-May-2002 08:20
Hello! I have two tips about getting PHP Java to work, hopefully google will pick this up...
After you've followed the instructions (building PHP with Java enabled and hacking php.ini) and you get a message like:
Fatal error: Cannot instantiate non-existent class: java in (file) on line (line)
That means PHP doesn't know what the 'Java' function is. You can confirm that the Java extension isn't loaded by looking at 'phpinfo' and verifying that there is no section titled Java. To fix this you need to edit php.ini and set the 'extensions_dir' and an 'extension' appropriately. On our system it was 'extension_dir = /opt/php/lib/php/extensions/no-debug-non-zts-20020429' and an 'extension = java.so'. All the documentation I found said the extension library should be called 'php_java.so', but our build produced 'java.so', I have no idea why, YMMV.
The next error message I ran into was:
Fatal error: java.lang.UnsatisfiedLinkError: no php_java in java.library.path in (file) on line (line)
Yay! this confirms that the JVM is indeed loading (UnsatisfiedLinkError is totally on the Java side), so relax, you're almost done! What's happening is that the Java class 'net.php.reflect' (a class in php_java.jar that is built by PHP) is trying to execute 'System.loadLibrary("php_java")' and the JVM is unable to find the file named 'libphp_java.so' (or maybe 'php_java.dll' on Windows?). If you ever heard of LD_LIBRARY_PATH, java.library.path is the same thing. The solution has two parts: First making sure the php.ini has a 'java.library.path' (in the '[java]' section) that's pointed at the same directory that 'extension_dir', specifically the directory containing the file 'java.so' (or maybe 'php_java.so' like everyone else). Second, this part is bad IMHO, making a symbolic link from the ''java.so' file to 'libphp_java.so' so that Java's System.loadLibrary method can find what it's looking for (apparently Java prefixes the filename it looks for with "lib"). To make this symbolic link do 'cd' into the extensions directory and run 'ln -s java.so libphp_java.so'.
Hope somebody finds this useful!
venuti at sissa dot it
13-Mar-2002 08:03
Again about how to call java servlets from php...
the above method I described works as long as you don't need to send long strings as parameters and this because they are sent via GET method that cannot handle long strings. So you need to send the parameters via POST, which is not straightforward at all! Infact, you need to open a socket and write php code that sends the call to the servlet as if it came from a form with post method.
venuti at sissa dot it
04-Mar-2002 02:23
Invoking java servlet from PHP.
This might look silly, but I found many people on the net asking how to invoke a java servlet from php. Read these notes:
(look for the message about servlets).
Basically, it's like calling any other URL, so you can use the "file" function. Read also the online documentation about "file".
This solution is much easier than many others I have found around the net.
not_contactable at yahoo dot com
03-Mar-2002 07:16
Installation of PHP's Java module under Win32(Apache/IIS).
I install php in "C:\php", firstly I install with "php-4.1.1-installer.exe"(from ), and then unzip the "php-4.1.1-Win32.zip"(from ) to the C:\PHP.(because all the extension dll files are from this zip file, including php_java.dll)
I also install my Java v1.3 in "C:\jdk1.3"
And My Program require JDBC connection of the Java Program, so I did install also the JDBC driver for MySQL in "c:\JDBC4mysql\mm.mysql.jdbc-1.2c"(from ).
About the PHP.ini:
1> You need to set the extension_dir="c:\php\extensions"(directory of all the extensions dll files)
2> Add those lines at the end of php.ini
======
[Java]
extension=php_java.dll
java.class.path="c:\php\java\php_java.jar;c:\wwwroot; c:\JDBC4mysql\mm.mysql.jdbc-1.2c"
java.home="c:\jdk1.3\bin"
java.library="c:\jdk1.3\jre\bin\hotspot\jvm.dll"
java.library.path="c:\php\extensions"
======
* extension: it is the DLL you wish to load in, here we want to load the java module.
* java.class.path: By default, you need to include the "C:\php\java\php_java.jar" for Java & PHP connection, AND those directories that contain the Java class files you wish to run. Here, my program Java classes are in "c:\wwwroot\", and ALSO the JDBC driver classes in "c:\JDBC4mysql\mm.mysql.jdbc-1.2c", because my Program need to import it.
* java.home: the bin directory (directory of java.exe)
* java.library: jvm.dll is supposed to be under JDK's jre\bin\hotspot, but sometimes it doesn't, try to Find(Start->Find) jvm.dll where it is.
* java.library.path: which is the same as the extensions directory.
christian at wenz dot org
08-Feb-2002 12:36
JDK1.4 RC is out, here are my Windows settings that make the Java extension work:
extension=php_java.dll
[Java]
java.class.path = c:\php\java\php_java.jar
java.home = d:\jdk1.4\jre
java.library = d:\jdk1.4\jre\bin\server\jvm.dll
I have not tested (yet) whether installing just the JRE works; for servlet support w/ Tomcat you do need JDK since Tomcat needs tools.jar that is not part of JRE.
ywliu at _spam_me_not_ dot hotmail dot com
30-Jan-2002 07:13
Hello,
There are two more useful links on phpbuilder.com in the PHP&JAVA discussion. They are related to the PHP and Java integration on Unix/Linux.
My settings (see above) is like that in the 1st link.
Moreover, I have the path to java in my PATH env. variable, so MAYBE its why my libjava.so works. I couldn't find the origin of libjava.so, but now looks there are libjava.so and libjvm.so two options.
I built my php from the source package, and libphp_java.so does exist, at least on my RH6.2 with Apache 1.3.19 and Sun JDK 1.3.1. libphp_java.so should be found under php-4.1.1/ext/java/.libs .
If you want to find some more discussion about PHP & Java integration, you may try www.phpbuilder.com and look for php&java. It's a good place to start with.
Yen-Wei Liu
fernando at lozano dot eti dot br
24-Jan-2002 11:20
I managed to get it working with IBM Java SDK 1.3.0 but it was not easy. Here's my php.init:
[Java]
extension = libphp_java.so
java.library.path = /usr/local/lib/php/extensions/no-debug-non-zts-20010901
java.class.path = /usr/local/lib/php/php_java.jar
java.home = /opt/IBMJava2-13
java.library = /opt/IBMJava2-13/jre/bin/classic/libjvm.so
Besides, I had to edit the httpd init.d script to include the statement:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/IBMJava2-13/jre/bin:\
/opt/IBMJava2-13/jre/bin/classic
I guess java.library.path should serve for this, but it didn't worked.
Magnus_Naeslund at nowhere dot to dot be dot found
25-Dec-2001 05:52
An _very_ important thing here is to remember that the apache must be linked with pthreads (do "LDFLAGS=-lpthread ./configure <options>", or like me, add it the the .spec file).
You can check if your apache is pthreaded with "ldd $(which httpd)" if you like.
I experianced a lot of hangs/errors due to this problem, it's a shame that it's not in the docs / README (i didn't find it).
Magnus
| |