Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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
Java PHP exec()无法访问.jar文件_Java_Php_Jar_Exec - Fatal编程技术网

Java PHP exec()无法访问.jar文件

Java PHP exec()无法访问.jar文件,java,php,jar,exec,Java,Php,Jar,Exec,我正在我的网站上建立一个表格。我希望处理通过电子邮件向我发送表单信息的PHP代码也能运行一个打印表单信息的java程序。这是我的PHP代码 $name = $_POST['name']; $email_address = $_POST['email']; $date = $_POST['date']; $time = $_POST['time']; $message = $_POST['message']; $info = array($name, $email_address, $dat

我正在我的网站上建立一个表格。我希望处理通过电子邮件向我发送表单信息的PHP代码也能运行一个打印表单信息的java程序。这是我的PHP代码

$name = $_POST['name']; 
$email_address = $_POST['email']; 
$date = $_POST['date'];
$time = $_POST['time'];
$message = $_POST['message']; 
$info = array($name, $email_address, $date, $time, $message);

exec('java -jar "C:\SomePathTo\HelloWorld.jar" $info 2>&1' , $output);`
var_dump($output);
和我的Java代码

public class HelloWorld {
    public static void main(String[] args) {
        for(int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}
array(1) { [0]=> string(197) "Error: Unable to access jarfile C:\SomePathTo\HelloWorld.jar" }

救命啊

显然,反斜杠转义不是问题,因为错误消息列出了正确的反斜杠。如果问题是关于反斜杠,情况就不是这样了。(您使用了单引号,它去掉了反斜杠的特殊含义。)

此外,我们可以注意到,生成错误消息的任何东西都知道它正在查找“jarfile”。在你的书堆里,那是什么?它不是PHP;它不是操作系统的内核。显然,您正在运行JavaVM。这可能是件好事

为什么JavaVM不能访问您的jar文件?您可能拼错了它的名称,但这很明显,当您仔细检查代码时,它会出现。发生这种情况的可能性更大,因为jar文件位于主目录的某个深处(我可以从清理文件名时将错误消息的长度保留为197这一事实得出“deep”的结论),而Java VM的用户上下文无法读取。当您通过web服务器运行PHP时,这将由您的web服务器的配置决定,但是有一个名为“www数据”或“Internet脚本”的专用用户帐户是相当常见的,在该帐户下运行代码。你应该找出它在你的系统上


一旦这样做了,你有几个选择。您可以授予运行PHP的用户(在本文中是JavaVM)对jar文件的读取权限。一旦您的jar文件想要访问其他文件,您也需要让该用户帐户访问这些文件。(只需确保它不能覆盖或删除任何重要内容。)或者,您可以重新配置您的web服务器(或要求web服务器的管理员重新配置)因此,它将运行您在用户上下文中编写的脚本。

可能是java可执行文件不在php设置的path变量中。请尝试替换jar文件路径中的斜杠\to\\,因此,您将有类似于
C:\\Users\\Nick Gilbert\\\..
的命令行执行尝试
echo
字符串,并尝试在操作系统中运行。不,同样的问题是\\设置权限会有问题吗?