gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:28:50 25 4
gpt4 key购买 nike

我正在我的网站上设置一个表单。我希望处理通过电子邮件向我发送有关表单的信息的 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),其中用户上下文Java VM 无法读取。当您通过 Web 服务器运行 PHP 时,这将由您的 Web 服务器的配置决定,但是通常会有一个名为“www-data”或“Internet Scripts”的专用用户帐户,代码在该帐户下运行.您应该找出它在您的系统上。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com