【问题标题】:Unable to exec("java -version") in php osx无法在 php osx 中执行(“java -version”)
【发布时间】:2015-10-06 04:30:54
【问题描述】:

osx yosomite中的PHP无法成功执行以下代码。

<?php   
        exec("java -version 2>&1", $output, $returnValue);
        print_r($returnValue);
        print_r($output);
?>

我得到的输出是

1Array ( [0] => No Java runtime present, requesting install. [1] => 2015-07-16 21:25:05.588 java[1434:49304] JLRequestRuntimeInstall: Error calling: CFMessagePortCreateRemote )

我可以从命令行成功运行它。我尝试更改 apache 用户,但没有帮助。

【问题讨论】:

  • Java 存在于系统中。
  • 提供 java 可执行文件的绝对路径可能会有所帮助。
  • 它有帮助,但没有完整路径就不能完成吗?

标签: java php macos exec


【解决方案1】:

在 PHP 中,您无法访问 Java 等可执行文件的正常搜索路径;这就是为什么您可以在终端中运行它而不是在 PHP 代码中运行它的原因。不将 shell $PATH 变量中的搜索路径导入 PHP 等服务器端语言是一项安全功能。

虽然您可以将 PATH 变量导出到 exec 子shell,但您可能不应该这样做。首选 java 可执行文件的完整路径。请记住,可供 PHP 使用的环境变量(例如 PATH)将是供 PHP 运行的用户使用的环境变量——出于安全原因,通常是受限用户。

如果您有兴趣使用环境变量方法,我建议您使用受限环境。根据您的特定设置,以下关于 SO(对于 Apache / PHP)的问题可能会给您一个起点: https://stackoverflow.com/questions/13568191/how-to-get-system-environment-variables-into-php-while-running-cli-apache2hand

【讨论】:

  • 谢谢!尽管我使用的是 evnvironment 变量方法,但问题是我在多个位置安装了 java 并且指向了错误的 java。一旦我让它指向正确的java,它就开始工作了。
猜你喜欢
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多