使用PHP / Java Bridge进行PHP-Java集成的问题

时间:2010-09-07 10:28:05

标签: java php

我需要你们的紧急帮助。在尝试将PHP与Java集成时,我遇到了一些奇怪的事情。首先,我的问题:

当我启动Apache服务器服务时,程序运行正常。但是,如果我关闭浏览器并再次打开它, 程序不再运行并给我一个"Fatal error: Unable to create Java Virtual Machine in C:\php\java.php ..."

如果我重新启动Apache服务器服务,程序会再次运行,但行为相同:如果我关闭浏览器窗口并再次打开它,它就不起作用。

我在互联网上查了但没有得到任何解决方案,但发现许多人面临同样的问题。他们中的许多人告诉它PHP-Java桥中的一个错误。那么有没有解决这个问题的方法。我没有选择,如果有人可以提供帮助,我会很感激。

谢谢。

我的系统规格:

  • Windows XP

我已经安装了

  • XAMPP服务器: - xampp-win32-1.6.1-installer

这将在我的系统上安装PHP,Apache和MySQL。版本如下

  • Apache版本: - Apache / 2.2.4(Win32)
  • PHP版: - 4.3.1
  • Sun Microsystems JDK版本: - jdk1.6.0_16

我使用php-javabridge实现了这个PHP-Java扩展。我从以下网址下载了javabridge.jar文件:http://php-java-bridge.sourceforge.net/pjb/download.php

我将下载的javabridge.jar文件放在此路径上:C:\xampp\php\ext\

在php.ini文件中为php-java集成完成的设置如下。

; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:\xampp\php\ext\"

I also uncomment the java extension.

extension=php_java.dll

我在PHP.ini文件的“模块设置”部分添加了以下行。

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Java]
;This points to the directory where your Java 
;classes will be stored.  You can designate multiple
;paths, each path separated by a semicolon.
;It must also include the location of php_java.jar
java.class.path = "C:\xampp\php\ext\JavaBridge.jar;C:\xampp\php\extensions\php_java.jar;C:\Program Files\Java\jdk1.6.0_16\jre\lib;C:\Program Files\Java\jdk1.6.0_16;C:\prog"

;java.class.path = "C:\xampp\php\extensions\php_java.jar;C:\prog"
; This points to the bin directory of the JDK.
java.home = "C:\Program Files\Java\jdk1.6.0_16\bin"

; This must point to the Java Virtual Machine (jvm.dll) file.
java.library = "C:\Program Files\Java\jdk1.6.0_16\jre\bin\server\jvm.dll"

; This must point to the location of php_java.dll.
java.library.path = "C:\xampp\php\ext;C:\Program Files\Java\jdk1.6.0_16\jre\lib"

java.java = "C:\Program Files\Java\jdk1.6.0_16\bin\javaw.exe"

我在PHP脚本中使用的Java类。

import java.util.*;
import java.text.*;

public class SalesTax {

  public String SalesTax(double price, double salesTax) {

    double tax = price * salesTax;

    NumberFormat numberFormatter;

    numberFormatter = NumberFormat.getCurrencyInstance();
    String priceOut = numberFormatter.format(price);
    String taxOut = numberFormatter.format(tax);

    numberFormatter = NumberFormat.getPercentInstance();
    String salesTaxOut = numberFormatter.format(salesTax);

    String str = "A sales Tax of " + salesTaxOut +
                 " on " + priceOut + " equals " + taxOut + ".";

    return str;

    }

}

PHP脚本test1.php,它使用上面的java类

<?php
// Format the HTML form.
$salesTaxForm = <<<SalesTaxForm
   <form action="test1.php" method="post">
   Price (ex. 42.56):<br>
   <input type="text" name="price" size="15" maxlength="15" value=""><br>
   Sales Tax rate (ex. 0.06):<br>
   <input type="text" name="tax" size="15" maxlength="15" value=""><br>
   <input type="submit" name="submit" value="Calculate!">
   </form>
SalesTaxForm;

if (! isset($_POST[submit])) 
   echo $salesTaxForm;
else 
{
   // Instantiate the SalesTax class.
   $salesTax = new Java("SalesTax");
   // Don't forget to typecast in order to
   // conform with the Java method specifications.
   $price = (double) $_POST[price]; 
   $tax = (double) $_POST[tax];
   print $salesTax->SalesTax($price, $tax);
}
?>

1 个答案:

答案 0 :(得分:0)

PHP Java桥与扩展php_java.dll无关。前者是用户态PHP实现。

请阅读the docs