2016-03-29 2 views
0

Следующими принимает строку и проверяет все файлы на сервере (./*), чтобы увидеть, если указанная строка существует в любых файлах, а затем выводит данные> grep_results.txt:PHP shell_exec команды с переменной

$command = 'grep -ri "any string goes here" ./* > grep_results.txt'; 
shell_exec($command); 

Во всяком случае, если это возможно, я хотел бы передать ему переменную, представленную следующей формы HTML:

 <form id='searchform' action='/GREP.php' method='post'> 
      <div class='form-group'> 
       <input type='text' name='SearchString' placeholder='Search string...'> 
       <input type='submit' name='submit' value='Find' class='button'> 
      </div> 
     </form> 

Я начал делать это:

$string = $_POST['SearchString']; 
echo $string; 

И, конечно же, любая переданная строка возвращается обратно.

Место, где я застрял, я попытался это и это не сработало:

$string = $_POST['SearchString']; 
$command = 'grep -ri "'.$string.'" ./* > grep_results.txt'; 
shell_exec($command); 

Как передать строку в $ $ команде?

+0

код в верхней части (с жестким кодированием строки) не работает правильно уже при вызове его из браузера? 'grep_results.txt' должен быть доступен для записи пользователем веб-сервера, чтобы это работало, и вы _absolutely must_ вызывают' escapeshellarg() 'на' $ string' перед передачей ему '$ command'. http://php.net/manual/en/function.escapeshellarg.php –

ответ

0

UPDATE:

Михаилу Берковский (в комментариях), спасибо, escapeshellarg сделал трюк.

Рабочий код теперь:

$string = $_POST['SearchString']; 

$searchstring = escapeshellarg($string); 

$command = 'grep -ri "'.$searchstring.'" ./* > grep_results.txt'; 

shell_exec($command); 
Смежные вопросы