2011-11-07 21 views
7

Dizinde bir veya daha fazla metin dosyasında belirli bir metin dizesi bulmak istiyorum, ancak nasıl olduğunu bilmiyorum. Şu an uzun zamandır Googled var ve hiçbir şey bulamadım. Bu yüzden size bunu nasıl çözebilirim diye soruyorum.PHP'de birden çok TXT dosyasında belirli bir metin bulun

Şimdiden teşekkürler. Eğer Unix ev sahibi çalıştırdığınız takdirde

cevap

5

Grep kullanmadan ihtiyacınız olanı alabilirsiniz. Grep, komut satırında olduğunuz zaman için kullanışlı bir araçtır, ancak ihtiyacınız olan şeyi sadece bir PHP koduyla yapabilirsiniz.

örneğin Bu küçük pasajı, sen grep benzer sonuçları verir:

$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

Teşekkürler! Bu bir charmed gibi çalıştı, ancak bir satırda belirli bir "kod" nasıl alabilirim? Bir satır şöyle: TME: ... | UID: ... | FNE: ... | MSG: ... | IPA: ... '. "Kod" örneğin "UID" dir. – Erik

+0

Eğer doğru bir şekilde anlıyorsam, eğer (strpos ($ line, '| UID:')! == false) 'ihtiyacınız olanı yapabilir. – ghbarratt

+0

Eğer yankı nasıl olursa olsun? – Erik

10

dizinde grep bir sistem arama yapabilirsiniz: Bir Linux kutusunda iseniz

$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

Windows kullanıyorum ediyorum :) Ama benim web barındırma Linux kullanıyor. Bunun Windows'da da çalışmasını sağlamak mümkün mü, onu web sunucuma yüklemeden önce test edebilirim? – Erik

+1

Windows için http://gnuwin32.sourceforge.net/packages/grep.htm (ve bağımlılıkları aynı sayfada listelenen) için grep'i yükleyebilirsiniz –

1

Sadece bir dosya adı belirtin, dosyanın içeriğini alın ve dosya içeriğiyle normal ifadeleri eşleştirin.

$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 

    } 

Not: Aşağıdaki kodum numunesi ile ilgili daha detaylı bilgi için this ve this görün Bu bakılmaksızın bir linux kutusunda konum olup olmadığına çalışacaktır.

İlgili konular