从PHP与shell调用Java-Java.lang.NoClassDefFoundError:


Calling Java from PHP vs shell - java.lang.NoClassDefFoundError:

我有两个java类,它们驻留在/jtest/StepRegTest目录,并包含"package StepRegTest;"指令。

选项1。我直接从shell调用它:

[jtest]# java StepRegTest.Main

一切都很好。

选项2。我通过PHPexec:调用java

<?php
echo getcwd() . "'n";
exec("java StepRegTest.Main 2>&1", $output);
print_r( $output );
?>

当我从shell调用选项1时,PHP文件与选项1位于相同的目录jtest中。但是,它返回一个错误:

线程"main"java.lang.NoClassDefFoundError:com/quinncurtis/matpackjava/DMatBase中出现异常

引用这些缺失类的jar档案在CLASSPATH中。该类的导入引用是:

import com.quinncurtis.matpackjava.DDMat;

请注意,当我从shell执行代码时,一切都很好。

这里有什么问题?为什么它可以在shell中工作,而不能在PHP中工作?

谢谢!

如果正在使用CLASSPATH环境变量,请验证在进行php exec()调用时是否设置了该变量;它可能正在丢失。

一种简单的检查方法是:

<?php
echo getcwd() . "'n";
exec("env", $output);
print_r( $output );
?>

要在php脚本中设置CLASSPATH变量,可以执行以下操作:

putenv("CLASSPATH=/path/to/lib.jar");

这是一个描述putenv()的页面:

http://php.net/manual/en/function.putenv.php