PHP - while循环(!feof())没有输出/显示所有内容

时间:2015-12-22 22:55:24

标签: php while-loop output fopen

我正在尝试阅读(并回显).txt文件的一切

这是我的代码:

$handle = @fopen("item_sets.txt", "r");

while (!feof($handle))
{
    $buffer = fgets($handle, 4096);
    $trimmed = trim($buffer);
    echo $trimmed;
}

这是我的“item_sets.txt”:http://pastebin.com/sxapZGuW

但它不会回应所有内容(并根据我之后回显的是否以及有多少字符来改变显示的内容)。 var_dump()告诉我最后一个字符串永远不会打印出来。看起来像这样:

" string(45) ""[cu_well_tra。但是,如果我提出一个

echo "whateverthisisjustarandomstringwithseveralcharacters";

我的最后输出行如下所示:

" string(45) ""[cu_well_traveled_ak47]weapon_ak47" "1" " string(5) "} "

基本上我的代码不会打印/回显所有应该或至少不显示它的内容。

提前致谢:)

1 个答案:

答案 0 :(得分:2)

那是因为您在输出上次阅读之前对EOF进行了测试

尝试使用EOF测试作为阅读过程的一部分

<?php
$line_count = 0;

$handle = fopen("item_sets.txt", "r");

if ($handle) {

    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
        $line_count++;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

echo PHP_EOL.PHP_EOL.PHP_EOL.'Lines read from file = ' . $line_count;
?>

此外,我删除了@ fopen的不良做法,以忽略错误,更好的做法是寻找并处理错误。

我将您的数据复制到名为tst.txt的文件中并运行此确切代码

<?php
$handle = fopen('tst.txt', 'r');

if ($handle) {

    while (($buffer = fgets($handle, 4096)) !== false) {
        $trimmed = trim($buffer);
        echo $trimmed;
    }
} else {
    echo 'Unexpected error opening file';
}
fclose($handle);

它生成了这个输出(这里只显示了一小部分)

"item_sets"{"set_community_3"{"name"            "#CSGO_set_community_3""set_description"                "#CSGO_set_community_3_desc""is_collection"

最后一个输出是

[aa_fade_revolver]weapon_revolver"          "1"

哪个是数据文件中的最后一个条目