2017-02-04 8 views
3

Я пытаюсь выполнить программу на C с помощью команды shell_exec, для которой нужны аргументы. Он работает для одного входа, но не работает для других. Я пытался запустить программу C через терминал, он работает для всех входов.Команда shell_exec в php не работает должным образом

Это мой файл execprog.php. Я должен дать 2 входа в качестве аргументов командной строки для файла. /var/www/project - путь.

$query = "/var/www/project/./a.out /var/www/project/constraints.txt /var/www/project/constraints_keyword.txt /var/www/project/FIB.txt /var/www/project/ANS.txt"; 

echo $query; 

$var = shell_exec($query); 

echo $var; 
+2

Добро пожаловать на переполнение стека! Сначала вы можете взять [тур] и узнать [спросить] хороший вопрос и создать [mcve]. Это облегчает нам помощь. – Katie

+3

Atleast показать нам, что вы сделали до сих пор? –

+0

попробуйте указать аргументы: http://stackoverflow.com/a/16932201/454827 – ZiTAL

ответ

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; 
+0

Не работает .. !! Я печатаю запрос i.e $ command в браузере. Если я запустил этот запрос, который напечатан в браузере на терминале, он работает нормально. –

+0

проверить, может ли пользователь веб-сервера запускать этот код. – ZiTAL

+0

Как проверить это? –

0

Как это работает на терминале, а не на apache затем файл сервера Apache php.ini можно отключить использование shell_exec().

См http://www.php.net/manual/en/ini.core.php#ini.disable-functions

php.ini файл вашего сервера Apache может выглядеть как

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

Удалить shell_exec из этого списка и перезапустить веб-сервер, хотя это представляет собой угрозу безопасности, и я не рекомендую.

В обычных функциях, таких как exec, shell_exec и system, всегда используются для выполнения внешних программ. Также можно выполнить команду оболочки. Если эти две функции включены, пользователь может ввести любую команду в качестве входного и выполняемого на ваш сервер. Поэтому обычно люди отключаются в конфигурации apache как disable_functions для обеспечения безопасности своего сайта.

Это работает для меня - Вот тестовый прогон

тест Sample c код

[[email protected] 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

[[email protected] tmp]$ gcc test.c 

Образец php сценарий

[[email protected] 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; 
?> 

Исполнение и выход

[[email protected] 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 
+0

Его работа, если мы запустим php-файл на терминале, но он не работает для браузера. –

+0

снова прочитайте мой ответ, вы должны проверить его отключен. Я думаю, –

+0

Я проверил его. он не отключен. –

 Смежные вопросы

  • Нет связанных вопросов^_^