XAMPP PHP EXEC 函数在从浏览器和 CLI 执行时提供不同的输出

问题描述 投票:0回答:1

我正在开发一个需要使用 PHP 执行 jar 文件的项目,我正在使用 php exec 函数来执行 jar 文件,当我从浏览器执行我的 php 脚本时,我得到了预期的输出,但是当我从命令行执行时,我得到了预期的输出。收到错误“无法访问 jarfilewrapper.jar”。

我的 php 脚本具有以下代码:

exec("java -jar wrapper.jar $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]",$output);

PHP 脚本和 jar 文件wrapper.jar 都在同一目录中,请检查下面的输出:

  1. 从浏览器执行时

    数组 ( [0] => REFNUM : 1258740043092402176 [1] => ANumber : null [2] => 状态 : y [3] => Txn : cf77bd77-f365-475f-b9ba-814f16f3a123 )

预期输出

  1. 从命令行执行时

    错误:无法访问 jarfilewrapper.jar 输出:数组 ( )

因为它是 CLI,我还更改了代码以提供 jar 文件的绝对路径,如下所示:

exec("java -jar 'D:\xampp\htdocs\AVAULT\wrapper.jar' $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]",$output);

我得到以下输出:

Error: Unable to access jarfile wrapper.jar OUTPUT: Array ( )

我还检查了

exec('java -version',$output)
,它在浏览器和命令行上显示了我的系统上安装的正确java版本

我还注意到,当在 exec 函数中使用单引号和双引号时,它的行为有所不同

带双引号(在浏览器中)

exec("java -jar wrapper.jar $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]",$output);

输出:

 Array ( [0] => REFNUM : 1258740043092402176 [1] => ANumber : null [2] => Status : y [3] => Txn : 01bac91a-9dd5-4886-9ca1-2166233af827 )

带单引号(在浏览器中)

exec('java -jar wrapper.jar $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]',$output);

输出:

Array ( [0] => ERROR : MISMATCH_AC_SA [1] => Status : n [2] => ANumber : Null [3] => Txn : ec883e3f-e8e7-4feb-ac37-9ce9f36d3d0b )

我不知道为什么单引号和双引号的行为不同。

但是我的实际要求是从 php 命令行执行 jar 文件。

我真的很困惑

  1. 为什么在从与 php 脚本相同的目录的命令行执行 jar 文件时,即使使用 jar 文件的绝对路径,我也会遇到无法访问 jar 文件的错误
  2. 为什么 exec 函数在使用单引号和双引号时表现不同
java php jar
1个回答
0
投票

在评论者的帮助下,我能够解决问题。 您必须注意,使用 php 命令行,路径必须是绝对路径,下面的代码对我有用。请注意,必须转义反斜杠

exec("java -jar D:\\xampp\\htdocs\\AVAULT\\wrapper.jar $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]",$output);

请注意,如果您在 exec 函数中传递任何 php 变量,请勿使用单引号,例如:

exec('java -jar D:\\xampp\\htdocs\\AVAULT\\wrapper.jar $arr[0] $arr[1] $arr[2] $arr[3] $arr[4] $arr[5] $arr[6] $arr[7] $arr[8] $arr[9]',$output);

使用单引号 php 变量将被视为字符串,您将得到意想不到的输出,有关 PHP 中单引号和双引号的更多详细信息可以找到这里

© www.soinside.com 2019 - 2024. All rights reserved.