2012-01-30 7 views
22

파일에 해당 문자열이 포함되어 있는지 확인하려고합니다.PHP 파일에 문자열이 포함되어 있는지 확인하십시오.

?php 
    $valid = FALSE; 
    $id = $_GET['id']; 
    $file = './uuids.txt'; 

    $handle = fopen($file, "r"); 

if ($handle) { 
    // Read file line-by-line 
    while (($buffer = fgets($handle)) !== false) { 
     if (strpos($buffer, $id) === false) 
      $valid = TRUE; 
    } 
} 
fclose($handle); 

    if($valid) { 
do stufff 
} 
+0

만약에 당신이'위해서 var_dump ($ 버퍼, $ 아이디)'대신'if'에 의해 그들을 비교? – zerkms

+2

오류가 있으면 언급하십시오. – Starx

답변

62

훨씬 간단 :

메모리 사용에 대한 의견에 응답
<?php 
    if(strpos(file_get_contents("./uuids.txt"),$_GET['id']) !== false) { 
     // do stuff 
    } 
?> 

: 코드가 더 효율적입니다

<?php 
    if(exec('grep '.escapeshellarg($_GET['id']).' ./uuids.txt')) { 
     // do stuff 
    } 
?> 
+4

훨씬 간단하지만 더 많은 메모리를 소비합니다. – zerkms

+1

전체 텍스트를 메모리에로드 할 필요가 없습니다. – xdazz

+1

@zerkms 어때 어때? –

16

(가)되고이 코드에 어떤 문제가 있는지 확실하지 않다 큰 파일을 검색하는 동안

$handle = fopen('path_to_your_file', 'r'); 
$valid = false; // init as false 
while (($buffer = fgets($handle)) !== false) { 
    if (strpos($buffer, $id) !== false) { 
     $valid = TRUE; 
     break; // Once you find the string, you should break out the loop. 
    }  
} 
fclose($handle); 
+0

ps로''더 효율적입니다. '는 의미는''느린 것입니다. (file_get_contents가 너무 많은 램을 사용하지 않는 한 스왑을 시작하면 빠를 수도 있습니다.) 경고하지만이 알고리즘은 그렇지 않습니다. 줄 바꾸기가 포함 된 문자열을 찾기 위해 작업합니다. 단, 줄 바꿈이 문자열 맨 끝에있는 경우는 제외합니다. – hanshenrik

+0

"큰 파일"이라고 말하면 파일이 너무 커지면됩니다. 최근 출시 된 암호 해시가 많음) 쉽게 메모리 한도에 도달 할 수 있습니다 – My1

3
function getDirContents($dir, &$results = array()) 
{ 

    if ($_POST['search'] == null) 
     exit; 

    ini_set('max_execution_time', $_POST['maxtime']); 

    $_SESSION['searchString'] = $_POST['search']; 

    echo "<script>var elm = document.getElementById('search');elm.value='$_POST[search]';</script>"; 

    if (!isset($_POST['case'])) 
     $string = strtolower($_POST['search']); 
    else 
     $string = $_POST['search']; 
    $files = scandir($dir); 

    foreach ($files as $key => $value) { 
     $path = realpath($dir . DIRECTORY_SEPARATOR . $value); 
     if (!is_dir($path)) { 
      $content = file_get_contents($path); 
      if (!isset($_POST['case'])) 
       $content = strtolower(file_get_contents($path)); 
      if (strpos($content, $string) !== false) { 
       echo $path . "<br>"; 
      } 
      $results[] = $path; 
     } else if ($value != "." && $value != "..") { 
      getDirContents($path, $results); 
      $results[] = $path; 
     } 
    } 
    return $results; 
} 

원래 프로젝트 : https://github.com/skfaisal93/AnyWhereInFiles

관련 문제