当前位置: 首页 > 知识库问答 >
问题:

PHP:为什么shell cmd在shell中运行良好,但在浏览器上执行的shell_exec()/exec()中运行不好?

阎修明
2023-03-14

我试图使用php的shell_exec()执行一个jar文件。pgp 文件在服务器上运行。

我研究了这个问题,并尝试了以下方法,但到目前为止没有成功:

    < li >我在命令中指定了完整的java路径 < li >我确保服务器上没有禁用shell_exec()/exec()函数,服务器没有在安全模式下运行 < li >我将jar文件的权限更改为可执行 < li >我还尝试使用exec() < li >我测试了exec("ls ",$out ")之类的命令,它工作正常

该命令类似于:

shell_exec("/usr/lib/jvm/java-7-oracle/bin/java -jar PATH_TO_MY_JAR_FILE.jar");

我将命令复制并粘贴到shell中,它运行良好。

----------------------------更新-------------------------------------

我在调试方面取得了一些进展,并希望稍微更新一下问题。

我尝试使用

exec("command from above", $output, $exit_code)
echo $output;
echo $exit_code;

并做了一些修复,现在我确定php脚本已经执行,但它没有做我想要的。

因此,jar 文件的目的是在系统中创建一个 json 文件。我指定此 json 的绝对路径。

现在,在我运行php文件后,$output显示

Array ( [0] => {"balance":"c","num":"b","is_vip":true,"name":"a"} ) 

当我在shell中运行命令时,这是相同的输出

$exit代码的值为 10

但是我在系统里找不到json文件。

共有1个答案

詹正浩
2023-03-14

您是否检查了服务器上是否启用了php安全模式?http://php.net/manual/en/function.shell-exec.php 的文档说:

注意:当 PHP 在安全模式下运行时,此功能处于禁用状态。

尽管如此:文档还说,safe_mode从PHP5.3开始就被否决了,所以希望这不会影响到你的服务器。

此外,您应该检查是否允许php用户执行xjava二进制文件。

 类似资料:
  • 我创建了一个JasperReport应用程序,它在tomcat服务器上运行良好。但是当我使用相同的jar在Jboss上运行时,它会显示错误 原因:java.lang.ClassCastException:org.apache.xerces.jaxp.DocumentBuilderFactoryImpl无法强制转换为javax.xml.parsers.DocumentBuilderFactor.ne

  • 尽管CAS服务器在Tomcat下工作得很好,但我有一些问题要使它在WebLogic12c下工作。在Weblogic上部署之前,我遵循以下指南:https://github.com/gentics/gentics-sso-cas/wiki/oracle-weblogic-configuration在webcontent/web-inf/with content中添加文件Weblogic.xml:

  • 当我执行时 在控制台(javascript)中,它通过类名返回元素,但是当我执行时: < code > driver . find elements(by . class name(" jobs-company-card _ _ content-wrapper ")); 结果(元素)是一个空的列表,注意返回

  • 我使用kotlin中的EclipsePAHOMQTT库和IntellijIDE中的Gradle创建了一个小型mqtt应用程序。当通过Intellij运行它时,它运行良好,但是当我构建它并运行创建的jar文件时,我会得到一个错误。 从我看到的其他问题来看,这似乎与类路径有关,但我不确定如果这确实是问题所在,需要做什么,因为我使用的是gradle而不是jar文件作为库。 我正在学习这个教程 这是我的档

  • 我被以下错误困住了。我不知道这是什么类型的错误。我该怎么办?

  • Mocha在浏览器中运行。每个版本的Mocha都将拥有新版本./mocha.js并./mocha.css在浏览器中使用。 特定于浏览器的方法 以下方法仅在浏览器上下文中起作用: mocha.allowUncaught() :如果被调用,错误处理程序将不会吸收未捕获的错误。 典型的设置可能类似于下面,我们呼吁mocha.setup('bdd')使用BDD加载测试脚本,运行之前的界面onload与mo