php exec()命令权限被拒绝

时间:2012-04-19 20:19:09

标签: php linux permissions exec

我有一个C ++可执行文件'skypeforwarder'。如果我在Mac的终端中使用命令行,则skypeforwarder可以正常工作:   henry $ /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder

sh: /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarder: Permission denied

但如果在php exec();

中调用它,它总是发出'permission denied'
<?php 
echo exec('whoami');

$output = null;

$execBuild = '/Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/';
$execBuild .= 'skypeForwarder';

$n  = exec($execBuild, $output); 

我搜索了很多。问题应该是Web服务器中的php / browser权限问题。我还尝试从以下位置更改文件的所有者:

-rwxr-xr-x  1 henry  staff  1212716 19 Apr 11:23 skypeForwarder

-rwxr-xr-x  1 _www  staff  1212716 19 Apr 11:23 skypeForwarder

它仍然不起作用。

我根据http://foundationphp.com/tutorials/php_leopard.php

在我的mac中设置了apache

2 个答案:

答案 0 :(得分:6)

虽然Web服务器可以读取文件本身,但Desktop文件夹很可能不是,因此Web服务器无法遍历它以找到可执行文件。您应该将skypeforwarder二进制文件移动到Web服务器可读的位置,例如与您尝试提供此PHP脚本的位置平行的目录。但是,该目录不应该是Web可访问的。使用.htaccess保护它或将其放在Web DocumentRoot上面,但它必须可由Web服务器读取。

默认情况下,OSX上的Desktop-rwxr------,并且 建议您更改该目录的权限。

此外,非常建议将文件更改为由_www Web服务器用户拥有和写入。相反,它应该是Web服务器可读和可执行的,但不可写。

chown henry skypeforwarder
chmod 755 skypeforwarder

标准免责声明:与往常一样,在从网络上可访问的PHP脚本执行系统调用时要格外小心。

答案 1 :(得分:0)

尝试查看php.ini中的禁用功能

disable_functions = exec