2014-09-04 21 views
0

我有一种感觉它与权限做,我编译G ++PHP执行函数不执行与我的编译的程序权限

的main.cpp

#include <iostream> 

int main(int argc, char* argv[]) 
{ 
    std::cout << "It works!" << std::endl; 
    return 0; 
} 

下面的程序和我有PHP文件

test.php的

<?php 
// DEBUG ///////////////////////////////// 
error_reporting(E_ALL); 
ini_set('display_errors', TRUE); 
ini_set('display_startup_errors', TRUE); 
////////////////////////////////////////// 

$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 

echo "In : " . $in . "<br>"; 
echo "Out: " . $out . "<br>"; 
?> 

在命令行中运行该程序我得到输出“It works!”然而,当我在PHP上运行时,我没有得到任何输出(我仍然得到[In:... \ nOut:],但我知道PHP正在工作)。

相关问题:php exec() is not executing the command

更让我把 “2> & 1” 的结尾,现在我得到的输出:

日期:SH:1:/家庭/亚历克斯/ Dropbox/code_snippets/output/a.out:权限被拒绝

在做了一个快速sudo chmod 0777到a.out后,我仍然得到了同样的结果。 也尝试过sudo chown www-data a.out来赋予PHP的所有权,但那也不起作用,我相信这很简单,但我发现难以获得解决方案。提前致谢。

编辑:

  1. exec()函数肯定的作品,因为我使用EXEC(“WHOAMI”),以找出它是执行它通过PHP用户WWW的数据。在目录

  2. 试图执行opendir()函数,它返回相同的权限被拒绝

警告:执行opendir(/家/亚历克斯/ Dropbox的/ code_snippts /输出):未能打开目录:权限被拒绝在/var/www/html/test.php

我猜这是因为PHP只限于执行/ var/www中的东西后有一点在互联网上看起来更多我发现这可能有所帮助:

https://help.ubuntu.com/community/ApacheMySQLPHP向下滚动到部分安装suPHP似乎是设置在/ var/www目录以外的目录中运行的东西的方法有任何其他人有更好的想法吗?

将a.out复制到/ var/www,PHP正在输出“It works!”。

+0

你检查了你的php.ini,以确保你被允许使用exec()函数吗?具体检查它是否列在'disable_functions'中 – mz3 2014-09-04 15:28:39

+0

您的PHP文件位于何处?你能打开目录/ home/alex/Dropbox/code_snippets/output /它吗? (opendir()所,例如功能) – Petr 2014-09-04 15:32:11

回答

0

你的代码适合我,所以它必须是一个环境配置问题。

1)EXEC()在php.ini

检查的php.ini被列入黑名单,以查看是否safe_mode设置为on,或者如果执行exec()在disable_functions禁止。

2)包含文件的目录不被webserver配置所允许。

,如果您使用的是Web服务器,但要确保有一样,如果是这样的话(例如为Apache)在您的服务器配置如下目录块你有没有说过:

<Directory /var/www/> 
    Options Indexes FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 
+0

EXEC绝对是工作,我尝试: 'EXEC( “WHOAMI”)' 并返回www数据 – user3102241 2014-09-10 17:38:32

+0

答案#2是正确的 – user3102241 2014-09-10 17:47:06

+0

Emzy,你知道在哪里apache配置文件的位置包含我需要更改的信息,如上所示? – user3102241 2014-09-10 17:48:41

0

您可能需要使用的umask:

$umask = umask(0); 
$in = "/home/alex/Dropbox/code_snippets/output/a.out"; 
$out = exec($in); 
umask($oldumask); 
+0

不好意思,这没有奏效。 – user3102241 2014-09-10 17:37:57

0

这是一个与权限的问题的用户:WWW的数据无法读取/写入/外执行任何的/ var/www目录(默认情况下)。感谢emzy和Petr帮我解决了这个问题。

+0

这是我上面所说的#2。很高兴你解决了这个问题。 – mz3 2014-09-10 17:44:10

+0

确实,对不起,忘了阅读这一点,谢谢。 – user3102241 2014-09-10 17:45:32