As you it works on the terminal and not on apache
then apache's php.ini
file may be disabling the use of shell_exec()
.
See http://www.php.net/manual/en/ini.core.php#ini.disable-functions
Your apache's php.ini
file may look something like
disable_functions=exec,passthru,shell_exec,system,proc_open,popen
Remove shell_exec
from this list and restart the web server, although this is a security risk and I don't recommend it.
In general functions such as exec
,shell_exec
and system
are always used to execute the external programs. Even a shell command can also be executed. If these two functions are enabled then a user can enter any command as input and execute into your server. So usually people disable in apache config as disable_functions
to secure their site.
It works for me - Here is test run
Sample test c
code
[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;
}
Compile
[akshay@gold tmp]$ gcc test.c
Sample php
script
[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;
?>
Execution and output
[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