【问题标题】:PHP running java jar files with parameters as php variablesPHP运行带有参数作为php变量的java jar文件
【发布时间】:2012-04-17 18:03:27
【问题描述】:

您好,我正在尝试从 PHP 5 执行一个 jar

这是我正在执行的代码:

$command = '"java -jar WEB-INF\\lib\\FileReceiver.jar '.$address.' '.$service_port.' \"'.$command.'\" \"'.$filePath.'\""';
exec($command, $out);

但是 jar 没有被执行。 我在 firebug 中记录了 $command 变量并将输出插入到代码中,例如:

exec("java -jar WEB-INF\lib\FileReceiver.jar 127.0.1.1 2018 \"docs/document.txt \" \"C:\\apache-tomcat-7.0.26\\webapps\\test\\downloads\\doument.txt\"", $out);

给出正确的输出。我不明白为什么硬编码它可以工作,但包含相同信息的变量却没有。

有人可以帮我吗?

谢谢

【问题讨论】:

  • 您确定$adress $service_port $command$filepath 的值正确吗?
  • 你需要显示 \" ,你应该写 \\"
  • @Shingetsu 是的,我确定,我从 firePHP 控制台复制了变量 $command 中的内容并粘贴了它。

标签: java php html jar


【解决方案1】:

这样试试

$command = escapeshellarg($address).' '.escapeshellarg($service_port).' '.escapeshellarg($command).' '.escapeshellarg($filePath).' ';

exec('java -jar WEB-INF\\lib\\FileReceiver.jar '.$command, $out);

【讨论】:

  • 如果我对变量中包含的内容进行硬编码,但如果我传递变量,则 jar 不会执行。感谢您的快速答复。您还有其他建议吗?
  • 我试过了,结果是正确的。我用 exec 中的 echo 结果替换了 $command,它可以正常工作。我完全困惑为什么在 exec 中有变量不会执行。
  • @ßee ,尝试使用 escapeshellarg
  • 我太累了……它只是在开头和结尾的双引号后添加了一个空格,并删除了中间的引号,这会使情况变得更糟。无论哪种方式,jar 都没有执行
  • 非常感谢您的帮助。我刚刚发现了问题。 $command 有一个 \n 字符,阻止它在 jar 文件中执行。
【解决方案2】:

您在第一个 sn-p 中过度转义了双引号。

您使用单引号作为文字字符串分隔符,因此您不需要转义双引号。

另外,最后的'\""' 应该是'"'

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多