php exec()命令权限被拒绝

dro*_*ain 4 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
Run Code Online (Sandbox Code Playgroud)

但如果在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); 
Run Code Online (Sandbox Code Playgroud)

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

-rwxr-xr-x  1 henry  staff  1212716 19 Apr 11:23 skypeForwarder
Run Code Online (Sandbox Code Playgroud)

-rwxr-xr-x  1 _www  staff  1212716 19 Apr 11:23 skypeForwarder
Run Code Online (Sandbox Code Playgroud)

它仍然无法正常工作.

我根据http://foundationphp.com/tutorials/php_leopard.php在我的mac中设置了apache

Mic*_*ski 6

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

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

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

chown henry skypeforwarder
chmod 755 skypeforwarder
Run Code Online (Sandbox Code Playgroud)

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