Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP exec()不接受java类路径_Java_Php_Exception_Classpath - Fatal编程技术网

PHP exec()不接受java类路径

PHP exec()不接受java类路径,java,php,exception,classpath,Java,Php,Exception,Classpath,当我从控制台运行命令时,如下所示: java -cp /root/weka-3-6-11/weka.jar weka.filters.unsupervised.attribute.Remove {Parameters come here} 但是当我用PHP运行它时,它给了我一个错误,我认为它没有使用提供的类路径: exec('java -cp /root/weka-3-6-11/weka.jar weka.filters.unsupervised.attribute.Remove {Param

当我从控制台运行命令时,如下所示:

java -cp /root/weka-3-6-11/weka.jar weka.filters.unsupervised.attribute.Remove {Parameters come here}
但是当我用PHP运行它时,它给了我一个错误,我认为它没有使用提供的类路径:

exec('java -cp /root/weka-3-6-11/weka.jar weka.filters.unsupervised.attribute.Remove {Parameters come here}');


[0] => Exception in thread "main" java.lang.NoClassDefFoundError: weka/filters/unsupervised/attribute/Remove
[1] => Caused by: java.lang.ClassNotFoundException: weka.filters.unsupervised.attribute.Remove
[2] =>  at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
[3] =>  at java.security.AccessController.doPrivileged(Native Method)
[4] =>  at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
[5] =>  at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
[6] =>  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
[7] =>  at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
[8] => Could not find the main class: weka.filters.unsupervised.attribute.Remove. Program will exit.
我在某个地方读到PHP使用自己的java类路径,但我无法让它工作。到目前为止,我尝试在exec命令之前执行这些行,但仍然存在相同的异常:

echo getcwd() . "\n"; //  /var/www/yugo_api/web
exec("env", $output);
print_r( $output ); // output is below

Array
(
[0] => APACHE_RUN_DIR=/var/run/apache2
[1] => APACHE_PID_FILE=/var/run/apache2/apache2.pid
[2] => PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[3] => APACHE_LOCK_DIR=/var/lock/apache2
[4] => LANG=C
[5] => APACHE_RUN_USER=www-data
[6] => APACHE_RUN_GROUP=www-data
[7] => APACHE_LOG_DIR=/var/log/apache2
[8] => PWD=/var/www/yugo_api/web
)

putenv("CLASSPATH=".$cp); // value of $cp is /root/weka-3-6-11/weka.jar
在终端中运行的命令:

环境


在我看来,您的apache服务器用户似乎无权访问该位置

/root/weka-3-6-11/weka.jar
您可以通过运行

filesize("/root/weka-3-6-11/weka.jar")
从PHP内部


exec
启动的任何程序都将以与apache服务器用户相同的用户身份运行-确保您对jar文件及其父目录设置了权限,以便apache服务器用户(通常是用户
www data
)可以读取它。

从终端运行
env
,然后检查类路径设置为什么。感谢您的帮助,我已经添加了env提供给我的输出。我以前考虑过权限。我认为你是对的。filesize()不输出任何内容,因此我认为它没有权限。你能帮我把它们放好吗?我对设置权限没有太多经验。:)是的,用户是www-data。您可以修改权限,但最好的方法可能是将文件放在可以读取的位置?尝试在某处创建目录
/usr/share/weka
,并设置运行以下
chmod 755-R/usr/share/weka
filesize("/root/weka-3-6-11/weka.jar")