4

I have a C++ executable file 'skypeforwarder'. skypeforwarder works if I use command line in Terminal in Mac: 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

But it always issued 'permission denied' if it is called in 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); 

I searched a lot. The problem should be the problem of the php/browser permission in web server. I also tried to change the owner of the file from:

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

to

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

It still does not work.

I set the apache in my mac according to http://foundationphp.com/tutorials/php_leopard.php

4

2 回答 2

6

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

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

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

chown henry skypeforwarder
chmod 755 skypeforwarder

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

于 2012-04-19T20:22:41.577 回答
0

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

disable_functions = exec
于 2012-04-19T20:22:38.113 回答