2016-03-29 119 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'必須由Web服務器用戶寫入才能工作,並且在將''string'傳遞給'$ command'之前,絕對必須調用'$ string'上的'escapeshellarg()'。 http://php.net/manual/en/function.escapeshellarg.php –

回答

0

UPDATE:

爲了邁克爾Berkowski(在評論),謝謝你,escapeshellarg的伎倆。

工作代碼現在:

$string = $_POST['SearchString']; 

$searchstring = escapeshellarg($string); 

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

shell_exec($command);