运行 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 上找到的任何内容都没有帮助。回答一些最开始可能出现的问题:
- 是的,jar 在 CLI 中 运行 正确
- 是的,我可以 运行 通过 exec() 和 shell_exec() 接收输出的基本命令
- 是的,我确实多次重启服务器,但对结果没有影响
- 是的,.jar 文件在那里
- .jar 文件从不根据代码给出空输出
我希望得到一些帮助,因为这对项目来说是一个非常重要的部分。
经过一个多星期的努力,我终于解决了我的问题。
这可能不是适合您的解决方案。
我的服务将在 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)
我在 .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 上找到的任何内容都没有帮助。回答一些最开始可能出现的问题:
- 是的,jar 在 CLI 中 运行 正确
- 是的,我可以 运行 通过 exec() 和 shell_exec() 接收输出的基本命令
- 是的,我确实多次重启服务器,但对结果没有影响
- 是的,.jar 文件在那里
- .jar 文件从不根据代码给出空输出
我希望得到一些帮助,因为这对项目来说是一个非常重要的部分。
经过一个多星期的努力,我终于解决了我的问题。
这可能不是适合您的解决方案。
我的服务将在 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)