我有两个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