2016-07-06 2 views
0

PHP의 Begginer 임. 정말 바보 같은 질문 인 경우 정말 미안합니다. 디렉토리가 .txt 파일로 가득 찼습니다.디렉토리 내의 여러 파일에서 문자열을 검색하는 PHP

<?php 
$search = $_POST['search']; 
$dir = 'C:\xampp\htdocs\myfiles\dbl'; 
$files = scandir($dir,1); 
foreach ($files as $lines){ 
    foreach($lines as $line) 
    { 
    if(strpos($line, $search) !== false) 
    echo $line; 
    } 
} 
?> 

그러나, 나는이 오류가 계속 : 경고 : foreach는 대한 공급 잘못된 인수() C에서 : 그 파일 안에 특정 문자열과 전체 라인을 에코 라인 \ XAMPP \ htdocs를 \ myfiles \ search.php를 19

+0

많은 대용량 파일에서 속도가 필요하다면 [shell_exec] (http : //)를 사용하여 PHP에서 [grep] (http://www.delorie.com/gnu/docs/grep/grep_13.html) /php.net/manual/en/function.shell-exec.php). – Drakes

답변

1

이 오류는 실제로 1st 루프 내에서 파일을 열지 않았기 때문에 발생합니다. 루핑 선을 루핑하기 전에 각 파일을 열어야합니다. 다음 두 가지 방법으로 작업을 수행 할 수 있습니다

file_get_contents() 기능

2) FCLOSE (,)는 fopen (파일 (함께 작업 일부 기능을 사용) 등)

이동 here

를 사용

1)

0

사용 는 fopen() 각 파일을 읽고 다음 문자열

0
$search = 'test'; 
$dir = 'C:\xampp5.6\htdocs'; 
$files = scandir($dir,1); 
foreach ($files as $lines){ 
    if(strlen($lines) > 3 && strpos($lines, '.txt') !== false){ 
     $readfile = fopen('C:\xampp5.6\htdocs/'.$lines, 'r'); 

     while(!feof($readfile)) { 
      $contents = fgets($readfile); 
      if(strpos($contents, $search) !== false) 
       echo $lines.'<br>'; 
     } 
     fclose($readfile); 
    } 
} 
검색하기
+0

이것은 완벽하게 작동했습니다. 감사합니다! 하지만 대소 문자를 구분하지 않으려면 어떻게해야합니까? 내 파일이 크기 때문에 strtolower가 매우 느립니다. –

+0

사용자에게도 stripos ($ contents, $ search) 할 수 있습니다. –

관련 문제