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

时间:2013-11-13 19:00:19

标签: 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, $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" }

帮助!

1 个答案:

答案 0 :(得分:3)

显然,反斜杠转义不是问题,因为错误消息列出了正确的反斜杠。如果问题 是关于反斜杠的,那么情况并非如此。 (你使用单引号,它会删除它们特殊含义的反斜杠。)

此外,我们可以注意到,生成错误消息的任何内容都知道它正在寻找“jarfile”。什么,在你的堆栈中,这样做?它不是PHP;它不是操作系统的内核。显然,您正在运行Java VM。这可能是一件好事。

为什么Java VM无法访问您的jar文件?你可能会拼错它的名字,但是这将是非常明显的,当你仔细检查代码时它会出现。这种情况发生的可能性更大,因为jar文件位于主目录的深处(我可以从“当你清理文件名时保留错误消息的长度为197”这一事实“深入”得出结论) Java VM无法读取。当您通过Web服务器运行PHP时,这将取决于您的Web服务器的配置,但是拥有一个名为“www-data”或“Internet Scripts”的专用用户帐户是很常见的,在该用户帐户下运行代码。你应该知道它在你的系统中。

完成后,您有几个选择。您可以授予运行PHP的用户(在此上下文中,Java VM)对jar文件的读访问权限。只要您的jar文件想要访问其他文件,您还需要让该用户帐户访问这些文件。 (只需确保它不会覆盖或删除任何重要内容。)或者,您可以重新配置您的Web服务器(或询问您的Web服务器管理员),以便它可以在您的用户上下文中运行您编写的脚本。