2012-03-15 134 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