运行 Java PHP 上的空数组

Empty Array on running Java on PHP

我在 .jar 文件中有一个 java 程序,我需要 运行 到 PHP。我必须发送 3 个参数(所有 3 个都是字符串,第一个是一个很大的参数),并在执行后接收输出。

我在整个项目中使用 XAMPP 和 Windows 10 上的 Symfony,尽管我怀疑它是否是问题的组成部分。

我已经尝试了几种可能性

起初我试过:

exec("java -jar 'D:\Path\To\File\src\Service\Java\JavaFile.jar' ". $argument1 ." ". $argument2 ." ". $argument3. " 'package.Main'", $output, $errorcode)

在 var_dump/print_r/echo $output

之后没有给我任何结果

在那之后,我经历了一堆选项(全部列在下面),但仍然没有得到任何输出——大部分我收到一个空数组。

exec("java -jar 'D:\Path\To\File\src\Service\Java\JavaFile.jar' \"". $argument1 ."\" \"". $argument2 ."\" \"". $argument3. "\" 'package.Main'  2>&1", $output, $errorcode)
exec("java -jar 'D:\Path\To\File\src\Service\Java\JavaFile.jar' '". $argument1 ."' '". $argument2 ."' '". $argument3. "' 'package.Main' 2>&1", $output, $errorcode)
$output = shell_exec("java -jar 'D:\Path\To\File\src\Service\Java\JavaFile.jar' '". $argument1 ."' '". $argument2 ."' '". $argument3. "' 'package.Main' 2>&1")

但是这个给了我不同的输出:

我根本没有发送参数

$output = shell_exec("java -jar 'D:\Path\To\File\src\Service\Java\JavaFile.jar' 'package.Main' 2>&1")

无法访问 jarfile

我在 Internet 上找到的任何内容都没有帮助。回答一些最开始可能出现的问题:

我希望得到一些帮助,因为这对项目来说是一个非常重要的部分。

经过一个多星期的努力,我终于解决了我的问题。

这可能不是适合您的解决方案。

我的服务将在 Linux 服务器上 运行,所以这个解决方案对我来说是可用的。


我已经与我的一位同事取得联系,他在 PHP 方面的经验比我丰富得多。我们花了大约一周的时间得出结论,我需要 将环境 从 Windows 更改为 Linux。

为了避免在我的设备上安装新的 OS,同事建议使用 Docker。 经过几个小时的工作,并按照关于如何在 Docker(使用 Symfony、Mysql 和 Nginx)中设置 PHP 环境的两部分教程 (part 1 part 2),我设法做到了它有效。

我在 php 容器 中安装了 Java (一个重要的部分,给我带来了很多困惑和问题),确保所有路径文件正确,.jar 文件 具有所有权限。在那之后,exec 函数 流畅地工作,给了我预期的输出。

此外,我已将第一个参数(这是一个非常长的字符串)保存到一个文件中,并将文件路径作为参数传递。 请注意,我在切换到 Docker 之前就这样做了,所以毕竟它可能适用于大字符串。


TLDR;

  • 切换到 Linux (fe. Debian) - 必要时可以选择使用 VM (fe. Docker)
  • 在 PHP 旁边安装 Java 以便他们可以通信
  • 确保所有路径都有效
  • 确保 .jar 文件具有所有必需的权限 (chmod)