PHP sscanf不会在文件中打印第一行,但以下行

时间:2017-01-26 10:37:03

标签: php file-io printing fgets scanf

我有一堆文件,其数据格式如下: INT | INT |串|串

我有一些函数可以将所有文件放在目录中,格式化它们的名称并从中创建一个选择下拉菜单。

由此,用户选择他想要打开的文件。

选择的文件(其文件名)通过POST发送到第二个php文件,该文件在下拉表单下方的iframe中打开。

这些是所述文件的相关内容:

<table>
    <thead>
        <tr>
            <th>A:</th>
            <th>B:</th>
            <th>C:</th>
        </tr>
    </thead>
    <tbody>
<?php
$fl = $_POST["file"];
$currentfile = fopen("./dir/$fl","r");
if ($currentfile) {
    while (($line = fgets($currentfile)) !== false) {
        $n = sscanf($line, "%d|%d|%[^|]|%[^\n]", $a,$b,$c,$d);
        print "<tr><td>$a</td><td>$b</td><td>$d</td></tr>";
    }
    fclose($currentfile);
    } else {
        print "Error: Couldn't open file.<br>";
    }
?>
    </tbody>
</table>

现在不知何故,每个文件中的第一行都没有显示在由此生成的表中,其他一切都很好。

例如,这是一个文件。

1|334|Item 1
2|837|Item 2
3|321|Item 3
4|124|Item 4
5|331|Item 5

etc...

这是我得到的输出。

A:   B:   C:

2    837  Item 2
3    321  Item 3
4    124  Item 4
5    331  Item 5

etc...

或代码:

<table>
    <thead>
        <tr>
            <th>A:</th>
            <th>B:</th>
            <th>C:</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td>2</td>
            <td>837</td>
            <td>Item 2</td>
        </tr>
        <tr>
            <td>3</td>
            <td>321</td>
            <td>Item 3</td>
        </tr>
        <tr>
            <td>4</td>
            <td>124</td>
            <td>Item 4</td>
        </tr>
        <tr>
            <td>5</td>
            <td>331</td>
            <td>Item 5</td>
        </tr>

        etc...

    </tbody>
</table>

正如您可以通过上面的代码看到的那样,td标签被打印出来,但是它们中没有数据,而第二组td标签中有第二行数据,应该如此,那为什么不读取,扫描和打印文件的第一行呢?

1 个答案:

答案 0 :(得分:1)

我相信这是因为文件开头有“字节顺序标记”。 您需要检查并替换它或将其从文件中删除。

这对我有用:

$line = str_replace("\xEF\xBB\xBF",'',$line);

也许此代码不适用于您的系统,您需要尝试其他一些代码来删除BOM。 试试这个:

#red {
  height: 400px;
  width: 100%;
  background-color: rgba(255, 0, 0, 0.3);
  position: fixed;
  top: 0px;
}
#blue {
  width: 29%;
  height: 100%;
  background-color: rgba(0, 0, 255, 0.3);
  position: fixed;
  right: 0;
  top: 0;
}
#yellow {
  width: 80%;
  height: 75px;
  background-color: yellow;
}

希望它有所帮助。