无法在php osx中执行(" java -version")

时间:2015-07-16 15:56:47

标签: java php macos exec

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 个答案:

答案 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