我有两个java类,它们位于... / jtest / StepRegTest目录中并包含“package StepRegTest;”指令。
选项1 。我直接从shell调用它:
[jtest]# java StepRegTest.Main
一切正常。
选项2 。我通过PHP exec :
调用java<?php
echo getcwd() . "\n";
exec("java StepRegTest.Main 2>&1", $output);
print_r( $output );
?>
当我从shell调用它时,PHP文件与选项1位于同一目录 jtest 中。但是,它会返回错误:
线程“main”中的异常java.lang.NoClassDefFoundError:com / quinncurtis / matpackjava / DMatBase
引用这些缺失类的jar存档位于CLASSPATH中。 该类的导入参考是:
import com.quinncurtis.matpackjava.DDMat;
请注意,当我从shell执行代码时,一切正常。
这是什么问题?为什么它可以从shell运行,而不是从PHP运行?
谢谢!
答案 0 :(得分:1)
如果正在使用CLASSPATH环境变量,请在php exec()调用时验证它是否已设置;它可能会迷路。
一种简单的检查方法是:
<?php
echo getcwd() . "\n";
exec("env", $output);
print_r( $output );
?>
要在php脚本中设置CLASSPATH变量,可以执行以下操作:
putenv("CLASSPATH=/path/to/lib.jar");
这是一个描述putenv()的页面: