2012-04-19 126 views
3

我有一个C++可执行文件'skypeforwarder'。 skypeforwarder工作,如果我使用命令行中终端在Mac上: 亨利$ /Users/henry/Desktop/skypeForwarder/skypekit-sdk_sdk-4.1.2.20_793394/examples/cpp/tutorial/step3/skypeForwarderphp exec()命令权限被拒绝

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

但它总是发出“权限被拒绝”,如果它在php exec()中被调用;

<?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

+1

exec(“whoami”)的输出是什么? – 2012-04-19 20:22:05

+0

输出是_www。 – droughtrain 2012-04-19 20:48:44

回答

6

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

默认情况下,Desktop在OSX是-rwxr------,这是建议改变该目录的权限。

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

chown henry skypeforwarder 
chmod 755 skypeforwarder 

标准免责声明:像往常一样,是非常谨慎的执行系统从网络上访问PHP脚本调用时。

+0

Downvoter分享你的智慧。 – 2012-04-19 20:24:22

+0

这可能是有人在拖车,因为他们心情不好。我投票支持你。 – 2012-04-19 20:27:02

+1

现在正在工作。由于尽管我chown _www skypeforwarder,但henry仍然是/ Users/henry/Desktop/skypeForwarder /目录的所有者,因此权限被拒绝。一位同事帮助我用两个步骤解决了这个问题。 1. vi/private/etc/sudoers,添加一行:_www \t ALL =(ALL)NOPASSWD:ALL 2. chown_www:staff/Users/henry/Desktop/skypeForwarder /谢谢Michael,你的许多建议都适合我。我知道这不是设置/ Users/henry/Desktop /目录下的好方法。我会改变这一点。 – droughtrain 2012-04-20 19:48:01

0

尝试看看禁用功能在php.ini

disable_functions = exec 
+0

我在我的/private/etc/php.ini中搜索,没有disable_functions列表。谢谢。 – droughtrain 2012-04-19 20:47:51

+0

我从你对另一篇文章的评论中看到'exec(“whoami”)'有一个_www的输出,这意味着该函数被允许,所以这不是我所暗示的。如果它被禁用,你会在apache/PHP错误日志中得到一个错误。 – PadraigD 2012-04-20 09:23:05