2011-11-07 18 views

Odpowiedz

5

Możesz dostać to, czego potrzebujesz, bez użycia grep. Grep jest przydatnym narzędziem, gdy jesteś w linii poleceń, ale możesz zrobić to, czego potrzebujesz, używając tylko odrobiny kodu PHP.

Ten mały fragment, na przykład, daje rezultaty podobne do grep:

$path_to_check = ''; 
$needle = 'match'; 

foreach(glob($path_to_check . '*.txt') as $filename) 
{ 
    foreach(file($filename) as $fli=>$fl) 
    { 
    if(strpos($fl, $needle)!==false) 
    { 
     echo $filename . ' on line ' . ($fli+1) . ': ' . $fl; 
    } 
    } 
} 
+0

Dzięki! To działa jak zaklęty, ale jak mogę uzyskać określony "kod" w linii? Jedna linia wygląda następująco: 'TME: ... | UID: ... | FNE: ... | MSG: ... | IPA: ...'. "Kod" to na przykład 'UID'. – Erik

+0

Jeśli dobrze cię rozumiem, 'if (strpos ($ line, '| UID:')! == false)' może zrobić to, czego potrzebujesz. – ghbarratt

+0

Jak powinno być w tym echo, jeśli? – Erik

10

Jeśli jest gospodarzem Unix używasz, możesz nawiązać połączenie systemu do grep w katalogu:

$search_pattern = "text to find"; 
$output = array(); 
$result = exec("/path/to/grep -l " . escapeshellarg($search_pattern) . " /path/to/directory/*", $output); 

print_r($output); 
// Prints a list of filenames containing the pattern 
+0

Używam systemu Windows :) Ale moja hostingowego używa Linuksa. Czy jest możliwe, aby działało to również w systemie Windows, więc mogę przetestować go przed przesłaniem go do mojego usługodawcy hostingowego? – Erik

+1

Możesz zainstalować grep dla Windows http://gnuwin32.sourceforge.net/packages/grep.htm (i jego zależności wymienione na tej samej stronie) –

1

Wystarczy podać nazwę pliku, pobrać zawartość pliku i dopasować wyrażenie do zawartości pliku. Zobacz this i this dalsze szczegóły dotyczące mojej próbki kodu poniżej:

$fileName = '/path/to/file.txt'; 
    $fileContents = file_get_contents($fileName); 
    $searchStr = 'I want to find this exact string in the file contents'; 

    if ($fileContents) { // file was retrieved successfully 

     // do the regex matching 
     $matchCount = preg_match_all($searchStr, $fileContents, $matches); 

     if ($matchCount) { // there were matches 
      // $match[0] will contain the entire string that was matched 
      // $matches[1..n] will contain the match substrings  
     } 

    } else { // file retrieval had problems 

    } 

Nota: To będzie działać niezależnie od tego, czy jesteś na polu Linux.

Powiązane problemy