5

PHPファイルで文字列を検索しようとしていますが、その文字列が見つかったら、その文字列が含まれているLINE全体を返します。これが私のサンプルコードです。explodeを使用する必要があると思いますが、それを理解することはできません。

$searchterm =  $_GET['q'];

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

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

 //OUTPUT THE LINE

 }else{

 echo "NOTFOUND";
 }
4

5 に答える 5

19

file関数を使用して、ファイル全体を行の配列として読み取るだけです。

function getLineWithString($fileName, $str) {
    $lines = file($fileName);
    foreach ($lines as $lineNumber => $line) {
        if (strpos($line, $str) !== false) {
            return $line;
        }
    }
    return -1;
}
于 2012-03-15T14:48:33.647 に答える
2

関数を使用fgets()して行番号を取得できます。

何かのようなもの :

$handle = fopen("forms.php", "r");
$found = false;
if ($handle) 
{
    $countline = 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";
于 2012-03-15T14:41:28.223 に答える
1

fileではなくを使用する場合file_get_contentsは、テキストを1行ずつ検索して配列をループし、配列のその要素を返すことができます。

PHP ファイルのドキュメント

于 2012-03-15T14:40:03.463 に答える
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)
于 2012-03-15T14:40:51.360 に答える
1

これは、タスクに正規表現を使用することについての回答済みの質問です。

preg_match_all()から行番号を取得します

ファイルを検索し、指定された行番号を返します。

于 2012-03-15T15:00:09.050 に答える