无法在 php osx 中执行("java -version")
Unable to exec("java -version") in php osx
PHP in osx yosomite 无法成功执行以下代码。
<?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 用户但没有帮助。
在 PHP 中,您无权访问 Java 等可执行文件的正常搜索路径;这就是为什么您可以 运行 它在您的终端而不是 PHP 代码中的原因。不将 shell $PATH 变量中的搜索路径导入服务器端语言(例如 PHP)是一项安全功能。
虽然您可以将您的 PATH 变量导出到 exec subshell,但您可能不应该这样做。 java 可执行文件的完整路径是首选。请记住,可用于 PHP 的环境变量(例如 PATH)将是 PHP 运行s 下的用户的环境变量——出于安全原因通常是受限用户。
如果您有兴趣使用环境变量方法,我建议您使用受限环境。根据您的特定设置,以下关于 SO 的问题(对于 Apache / PHP)可能会给您一个起点:
PHP in osx yosomite 无法成功执行以下代码。
<?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 用户但没有帮助。
在 PHP 中,您无权访问 Java 等可执行文件的正常搜索路径;这就是为什么您可以 运行 它在您的终端而不是 PHP 代码中的原因。不将 shell $PATH 变量中的搜索路径导入服务器端语言(例如 PHP)是一项安全功能。
虽然您可以将您的 PATH 变量导出到 exec subshell,但您可能不应该这样做。 java 可执行文件的完整路径是首选。请记住,可用于 PHP 的环境变量(例如 PATH)将是 PHP 运行s 下的用户的环境变量——出于安全原因通常是受限用户。
如果您有兴趣使用环境变量方法,我建议您使用受限环境。根据您的特定设置,以下关于 SO 的问题(对于 Apache / PHP)可能会给您一个起点: