【发布时间】:2014-10-29 10:10:35
【问题描述】:
感觉和权限有关,我用g++编译了下面的程序
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:/home/alex/Dropbox/code_sn-ps/output/a.out:权限被拒绝
在对 a.out 执行快速 sudo chmod 0777 后,我仍然得到同样的结果。 还尝试了 sudo chown www-data a.out 以将所有权授予 PHP,但这也不起作用,我确信这很简单,但我发现很难获得解决方案。提前致谢。
编辑:
exec() 函数肯定有效,因为我使用 exec("whoami") 发现是用户 www-data 通过 PHP 执行它。
在目录上尝试了 opendir() 函数,它返回相同的权限被拒绝
警告:opendir(/home/alex/Dropbox/code_snippts/output):无法打开目录:/var/www/html/test.php 中的权限被拒绝
我猜这是因为 PHP 仅限于执行 /var/www 中的内容,在互联网上进行了更多查看后,我发现这可能会有所帮助:
https://help.ubuntu.com/community/ApacheMySQLPHP 并向下滚动到安装 suPHP 部分,这似乎是一种设置在 /var/www 以外的目录中运行东西的能力的方法,还有其他人有更好的想法吗?
将 a.out 复制到 /var/www 并且 PHP 正在输出“It works!”。
【问题讨论】:
-
您检查过您的 php.ini 以确保您被允许使用 exec() 函数吗?具体检查它是否列在
disable_functions -
您的 PHP 文件在哪里?您可以从中打开目录 /home/alex/Dropbox/code_sn-ps/output/ 吗? (以opendir(),函数为例)
标签: php linux permissions debian exec