2012-01-30 15 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 इतनी अधिक RAM का उपयोग नहीं करते हैं, जिसे आप स्वैप करना शुरू करते हैं, इस मामले में यह तेज़ हो सकता है), लेकिन कम रैम का उपयोग करना चाहिए, यह भी चेतावनी देना चाहिए कि यह एल्गोरिदम नहीं होगा न्यूलाइन युक्त तारों को ढूंढने के लिए काम करें, सिवाय इसके कि केवल स्ट्रिंग के बहुत ही अंत में एकमात्र नई लाइन है, इसे ध्यान में रखें :) – 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

संबंधित मुद्दे