0

我有两个 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中。但是,它返回一个错误:

线程“主”java.lang.NoClassDefFoundError 中的异常:com/quinncurtis/matpackjava/DMatBase

引用这些缺失类的 jar 归档位于 CLASSPATH 中。该类的导入参考是:

import com.quinncurtis.matpackjava.DDMat;

请注意,当我从 shell 执行代码时,一切正常。

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

谢谢!

4

1 回答 1

1

如果正在使用 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

于 2013-08-30T06:44:43.357 回答