php中的shell_exec命令无法正常工作

时间:2017-02-04 14:32:54

标签: php shell-exec

我正在尝试使用script.js命令执行C程序,该命令需要传递参数。它适用于一个输入,但不适用于其他输入。我试图通过终端运行C程序,它适用于所有输入。

这是我的execprog.php文件。我必须提供2个输入作为文件的命令行参数。 shell_exec是路径。

/var/www/project

2 个答案:

答案 0 :(得分:0)

<?php
$query = "/var/www/project/./a.out";
$arguments = array
(
    '/var/www/project/constraints.txt',
    '/var/www/project/constraints_keyword.txt',
    '/var/www/project/FIB.txt',
    '/var/www/project/ANS.txt'
);
$string = '';
for($i=0;$i<count($arguments);$i++)
    $string.= ' %s';

$command = vsprintf("{$query}{$string}", $arguments);
$var = shell_exec($command);
echo $var;

答案 1 :(得分:0)

由于它在终端上工作而不在apache,因此apache的php.ini文件可能会禁用shell_exec()

请参阅http://www.php.net/manual/en/ini.core.php#ini.disable-functions

您的apache的php.ini文件可能类似于

disable_functions=exec,passthru,shell_exec,system,proc_open,popen

从此列表中删除shell_exec并重新启动Web服务器,但这存在安全风险,我不建议这样做。

通常,execshell_execsystem等函数始终用于执行外部程序。甚至shell命令也可以执行。如果启用了这两个功能,则用户可以输入任何命令作为输入并执行到您的服务器。因此,人们通常会在apache配置中禁用disable_functions来保护其网站。

对我有用 - 这是试运行

示例测试c代码

[akshay@gold tmp]$ cat test.c
#include<stdio.h>

int main(int args, char *argv[]) {
 int i = 0;
 for (i = 0; i < args; i++)
 printf("Arg[%d] = %s\n",i, argv[i]);
 return 0;
}

<强>编译

[akshay@gold tmp]$ gcc test.c 

示例php脚本

[akshay@gold tmp]$ cat test.php
<?php
$query = "/tmp/./a.out /var/www/project/constraints.txt /var/www/project/constraints_keyword.txt /var/www/project/FIB.txt /var/www/project/ANS.txt";
$var = shell_exec($query);
echo $var;
?>

执行和输出

[akshay@gold tmp]$ php test.php
Arg[0] = /tmp/./a.out
Arg[1] = /var/www/project/constraints.txt
Arg[2] = /var/www/project/constraints_keyword.txt
Arg[3] = /var/www/project/FIB.txt
Arg[4] = /var/www/project/ANS.txt