无限循环获取到文件结尾时

时间:2019-01-31 16:01:00

标签: php php-5.6

我正试图获得一个PHP函数来从文本文件中读取信息,并将其作为数组返回。我的函数在文件开头似乎运行良好,但在文件末尾或此文件为空时卡住了。

下面是我的功能和文本文件:

function readBook($file) {
    $book = [];
    $line = trim(fgets($file));
    // Get rid of white lines at start of file
    while ($line !== false && strlen($line) === 0) {
      $line = trim(fgets($file));
    }
    if ($line === false) {
      return false;
    }
    // Prepare and return the array
    while ($line !== false && strlen($line) > 0) {
      $pos = strpos($line, ":");
      if ($pos != false) {
        $key = trim(substr($line, 0, $pos));
        $value = trim(substr($line, $pos + 1));
        $book[$key] = $value;
        //echo $line . "\n";
        $line = trim(fgets($file));
      } else {
        throw new \Exception("Erreur - Fichier mal écrit", 125);
      }
    }

    return $book;
  }

该文本文件为:

couverture : scorpion.jpg
titre : La marque du diable
serie : Le Scorpion
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées

couverture : BOB.jpg
titre : La marque du BOB
serie : Le BOB
auteurs : Marini - Desberg
année : 2000
catégorie : bandes-dessinées

在此示例中,当调用该函数3次时,它应仅返回两本书。什么它现在是返回的两本书和一个无限加载环路会被卡住。

难道你们帮我在这里?

最诚挚的问候

1 个答案:

答案 0 :(得分:2)

在EOF上,trim(fgets($fileHandle))返回""而不是false

开始更改

$line = trim(fgets($file));
while ($line !== false && strlen($line) === 0) {

通过

$line = fgets($file);
while ($line !== false && strlen(trim($line)) === 0) {
   $line = fgets($file);
}