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用户,但它没有帮助。
答案 0 :(得分:2)
在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