PHP exec函数不执行我编译的程序相关权限
我有一种感觉,这是与权限有关的,我用g编译了下面的程序++ main.cppPHP exec函数不执行我编译的程序相关权限,php,linux,permissions,debian,exec,Php,Linux,Permissions,Debian,Exec,我有一种感觉,这是与权限有关的,我用g编译了下面的程序++ main.cpp #include <iostream> int main(int argc, char* argv[]) { std::cout << "It works!" << std::endl; return 0; } #包括 int main(int argc,char*argv[]) { 标准::cout 在命令行上运行程序时,我得到的输出是“It works!”,
#include <iostream>
int main(int argc, char* argv[])
{
std::cout << "It works!" << std::endl;
return 0;
}
#包括
int main(int argc,char*argv[])
{
标准::cout
在命令行上运行程序时,我得到的输出是“It works!”,但是当我在PHP上运行时,我没有得到任何输出(我仍然得到[In:…\nOut:],不过,我知道PHP正在工作)
相关问题:
让我把“2>&1”放在末尾,现在我得到一个输出:
Out:sh:1:/home/alex/Dropbox/code\u snippets/output/a.Out:权限被拒绝
在做了一个快速的sudo chmod 0777到a.out后,我仍然得到同样的结果。
还尝试了sudo chown www data a.out将所有权授予PHP,但也没有成功,我相信这很简单,但我发现很难找到解决方案。提前感谢
编辑:
将a.out复制到/var/www,PHP将输出“It works!”。您的代码对我来说运行良好,因此这一定是环境配置问题 1) exec()在php.ini中被列入黑名单 检查php.ini以查看是否启用了安全模式,或者在
禁用函数中是否不允许使用exec()
2) Web服务器配置不允许包含文件的目录
您没有说明是否正在使用Web服务器,但如果是这样的话,请确保服务器配置中有如下目录块(例如apache):
选项索引跟随符号链接
允许超越所有
要求所有授权
您可能需要使用umask:
$umask = umask(0);
$in = "/home/alex/Dropbox/code_snippets/output/a.out";
$out = exec($in);
umask($oldumask);
用户权限有问题:www数据无法读取/写入/执行/var/www目录以外的任何内容(默认情况下)。感谢emzy和Petr帮助我解决了这个问题。您是否检查了php.ini以确保允许使用exec()函数?特别检查它是否列在disable_functions
中,你的PHP文件在哪里?你能从中打开directory/home/alex/Dropbox/code_snippets/output/吗?(以opendir()为例,函数)不,对不起,这不起作用,得到了相同的空白$out.exec肯定和我尝试的一样:exec(“whoami”)
它返回了www-dataEmzy,您知道包含我需要更改的信息的apache配置文件的位置吗?默认情况下,它位于/etc/apache2/apache2.conf(基于Debian)中,但根据您的操作系统可能有所不同。这是我上面提到的第2个配置文件。很高兴您解决了这个问题。
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
$umask = umask(0);
$in = "/home/alex/Dropbox/code_snippets/output/a.out";
$out = exec($in);
umask($oldumask);