2015-10-22 3 views
-2

Я пытаюсь выполнить команду grep внутри php shell_exec. И он отлично работает, кроме того, что он терпит неудачу, когда у меня есть знак подчеркивания в поисковом слове. Я не могу понять, почему это не удается из-за подчеркивания, так как, команда Grep с подчеркиванием в слово для поиска работы в коде оболочки ниже:Подчеркивание в php shell_exec

$output = shell_exec("grep -l -r '$search_word'"); 

Содержание в search_word переменной является динамическим из базы данных, но слова что дает мне неприятности является base_64

+0

$ search_word - это переменная, что такое контент? –

+0

Содержимое является динамическим из базы данных, но слово, которое имеет знак подчеркивания in, является base_64 – PatrickSH

+0

@Amarnasan i dont belive, это возможное решение для меня, поскольку переменное содержимое является динамическим и не содержит подчеркивания каждый раз – PatrickSH

ответ

0

Попробуйте так: $ выход = shell_exec ("Grep -l -r '$ search_word' ./* ");

+0

Работал как шарм, наконец, спасибо! – PatrickSH

0

Перед PHP нерестится подпроцесс ваша команда будет оцениваться $search_word:

grep -l -r '....' 
# So in $search_word is set to `john doe` it will become: 
grep -l -r 'john doe' 

Как PHP ведет себя я не уверен, это может быть сваливания в ожидании завершения процесса, его га вы уже закрывали stdin.

Ваша вышеприведенная команда будет ожидать ввода со стандартного ввода, так как не указано имя файла, разбивка:

Grep [опция] ... [шаблон] [файл] ...
-l будет только печать имя файла совпадающего файла
-r рекурсивный поиск.

TLDR: Вы правильно хотите указать файл/каталог для поиска в:

$output = shell_exec("grep -l -r '$search_word' ."); 
// Or maybe 
$output = shell_exec("grep -l -r '${search}_word' ."); # will use $search variable as an input from PHP while _word is a string now.