PHP-while循环(!feof())不是';t输出/显示所有内容


PHP - while loop (!feof()) isn't outputting/showing everything

我正在尝试读取(并回显).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()显示最后一个字符串从未打印完。看起来是这样的:

CCD_ 2。但是如果我放一个

echo "whateverthisisjustarandomstringwithseveralcharacters";

我最后的输出行是这样的:

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

基本上,我的代码没有打印/回显它应该打印的内容,或者至少没有显示

提前感谢:)

这是因为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"

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