2012-03-15 175 views
3

我正在嘗試搜索PHP文件中的字符串,並且當找到該字符串時,我想返回字符串所在的整個LINE。這是我的示例代碼。我想我不得不使用爆炸,但無法弄清楚。搜索字符串和返回線PHP

$searchterm = $_GET['q']; 

$homepage = file_get_contents('forms.php'); 

if(strpos($homepage, "$searchterm") !== false) 
{ 
echo "FOUND"; 

//OUTPUT THE LINE 

}else{ 

echo "NOTFOUND"; 
} 

回答

9

只是讀取整個文件作爲file功能線陣列。

function getLineWithString($fileName, $str) { 
    $lines = file($fileName); 
    foreach ($lines as $lineNumber => $line) { 
     if (strpos($line, $str) !== false) { 
      return $line; 
     } 
    } 
    return -1; 
} 
+0

魔術串第一次出現短路。也不返回該行,只返回該字符串發生的行號。 – Hasteur 2012-03-15 16:52:26

+1

我能夠通過回顯$行來獲得該行的內容。很棒! – 2012-03-15 16:56:17

+0

歐,對不起,我以爲你只想要行號,現在已經修好了。 – martin 2012-03-15 19:47:52

1

如果使用file而不是file_get_contents您可以循環通過線陣列線搜索的文本,然後返回數組的該元素。

PHP file文檔

1

您希望使用與fgets函數可以拉出一個單獨的線,然後搜索

<?PHP 
$searchterm = $_GET['q']; 
$file_pointer = fopen('forms.php'); 
while (($homepage = fgets($file_pointer)) !== false) 
{ 
    if(strpos($homepage, $searchterm) !== false) 
    { 
     echo "FOUND"; 
     //OUTPUT THE LINE 
    }else{ 
    echo "NOTFOUND"; 
    } 
} 
fclose($file_pointer) 
1

可以使用fgets()函數來獲取行號。

喜歡的東西:

$handle = fopen("forms.php", "r"); 
$found = false; 
if ($handle) 
{ 
    $linecount = 0; 
    while (($buffer = fgets($handle, 4096)) !== false) 
    { 
     if (strpos($buffer, "$searchterm") !== false) 
     { 
      echo "Found on line " . $countline + 1 . "\n"; 
      $found = true; 
     } 
     $countline++; 
    } 
    if (!$found) 
     echo "$searchterm not found\n"; 
    fclose($handle); 
} 

如果你還是想用file_get_contents(),然後像做:

$homepage = file_get_contents("forms.php"); 
$exploded_page = explode("\n", $homepage); 
$found = false; 

for ($i = 0; $i < sizeof($exploded_page); ++$i) 
{ 
    if (strpos($buffer, "$searchterm") !== false) 
    { 
     echo "Found on line " . $countline + 1 . "\n"; 
     $found = true; 
    } 
} 
if (!$found) 
    echo "$searchterm not found\n"; 
+0

什麼是4096? – 2013-12-08 19:49:45

+0

@JohnMagnolia http://www.php.net/manual/en/function.fgets.php - 這是緩衝區大小。它將讀取4096 -1字節。 – 2013-12-08 21:18:41