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
虽然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脚本执行系统调用时要格外小心.