我有一个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
它仍然不起作用。
在我的mac中设置了apache答案 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