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

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

救命!

最佳答案

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

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

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

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

关于java - PHP exec() 无法访问 .jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962163/

相关文章:

java - 工作小数点数

java - 通过 Gmail API 发送带有纯文本回退的 HTML 电子邮件

php - 多选查询 MySQL

javascript - 检查文本输入是否不为空

mySQL:与 Eclipse 的连接

gradle - Kotlin 总是告诉我 KotlinReflectionNotSupportedError

java - Websphere MQ 消息无限进程

java - 访问 Oozie 作业中在命令行输入的属性

PHP - 将 time() 调整为可被 5 整除

android - 添加 volley.jar 库后没有主 list 属性错误