问题描述
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用户,但没有帮助。
1楼
在PHP中,您无权访问Java等可执行文件的常规搜索路径。 这就是为什么您可以在终端中而不是PHP代码中运行它的原因。 不将外壳$ PATH变量中的搜索路径导入服务器端语言(例如PHP)是一项安全功能。
尽管您可以将PATH变量导出到exec子外壳中,但您可能不应该这样做。 Java可执行文件的完整路径是首选。 请记住,PHP可用的环境变量(例如PATH)将是运行PHP的用户的那些环境变量-出于安全原因通常是受限用户。
如果您对使用环境变量方法感兴趣,我建议您使用受限环境。 根据您的特定设置,以下关于SO的问题(针对Apache / PHP)可能为您提供一个起点: :