Php 是否可以查看文本文件的下一行来搜索某个单词,但不实际处理它?

Php 是否可以查看文本文件的下一行来搜索某个单词,但不实际处理它?,php,Php,我正在写一个php脚本,它从一个文本文件中读取行来撰写一封电子邮件。有些行以以下单词开头: 致: 发件人:example@email.com 示例行,单词。。。等 主题: 当我读这行并找到单词“From:”时,我希望它继续读这行,直到找到单词“Subject:”。我遇到的问题是,为了检查下一行是否以“Subject:”开头,我需要用fgets()阅读这一行。但我不想发生这种事。如果我发现单词“Subject:”我不想读这行,请中断(因为我处于切换状态),再次转到while循环的开头,然后阅读包含

我正在写一个php脚本,它从一个文本文件中读取行来撰写一封电子邮件。有些行以以下单词开头:

致:

发件人:example@email.com

示例行,单词。。。等

主题:

当我读这行并找到单词“From:”时,我希望它继续读这行,直到找到单词“Subject:”。我遇到的问题是,为了检查下一行是否以“Subject:”开头,我需要用fgets()阅读这一行。但我不想发生这种事。如果我发现单词“Subject:”我不想读这行,请中断(因为我处于切换状态),再次转到while循环的开头,然后阅读包含“Subject:”的行。我想不出一个合乎逻辑的方法来做这件事。我觉得我可能不得不使用goto函数,但我知道这是一个糟糕的做法。我怎样才能避开这件事

while (!feof($file)) {
    $line = fgets($file, filesize("$filename"));
        if (!feof($file)) {
            $pos = strpos($line, ":");
            $lineMsg = substr($line, $pos + 2);
            switch(trim(strtolower(substr($line, 0, $pos + 2)))) {
            case("subject:"):
                if ($content[2][4] == 0) {
                    $content[0][4] = $lineMsg;
                    $content[1][4] = true;
                    $content[2][4] = 1;
                    }
                break;
            case("body:"):
                $content[0][5] .= $lineMsg;
                $content[1][5] = true;
                $content[2][5] = 1;
                $msg = fgets($file, filesize("$filename"));
                echo $msg;
                while (!feof($file) && compare($msg)) {
                    if (compare($msg)) {
                        $content[0][5] .= $msg;
                        echo $content[0][5] .= PHP_EOL . PHP_EOL . PHP_EOL;
                    }
                    $msg = fgets($file, filesize("$filename"));
                } // end while loop
                if (!compare($msg)) {
                    break;
                }
                break 2;
(上述开关箱的其余部分与问题无关) 下面是compare()函数:

function compare($msg) {
    if ((stripos($msg, "to:") !== false) || (stripos(strtolower($msg), "from:") !== false) || (stripos($msg, "cc:") !== $
        return false;
    } else {
        return true;
    } // end if-else statement
} // end compare function
我知道有一种更简单的方法来实现compare()函数,但为了测试和清晰起见,我使用了上面的方法


如有任何建议,我们将不胜感激。谢谢

如果文件相对较小(10 MB或更少),我只需要使用
file()
将整个内容读取到一个数组中


然后,您可以访问任何您想要的行,并像任何数组一样在其上循环。

如果文件相对较小(10 MB或更少),我只需使用
file()
将整个内容读取到一个数组中

然后,您可以访问任何您想要的线路,并像任何阵列一样在其上循环。

请检查以下内容:

这正是你想要的。它逐行读取文件。

签出以下内容:

这正是你想要的。它逐行读取文件