【问题标题】:PHP - while loop (!feof()) isn't outputting/showing everythingPHP - while 循环 (!feof()) 没有输出/显示所有内容
【发布时间】:2016-03-29 07:20:08
【问题描述】:

我正在尝试读取(并回显).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) "} "

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

提前谢谢:)

【问题讨论】:

  • 为什么不在这里使用print file_get_contents()
  • @ob_start 仍然没有打印所有内容
  • 您的代码没有任何问题 - 它读取所有行并输出它们。 除了 trim'吃掉'所有end of line标记,所以当你回显时,你需要使用PHP_EOL。 IE。 echo $trimmed, PHP_EOL;。否则你会得到一长串输出。

标签: php while-loop output fopen


【解决方案1】:

那是因为你对 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"

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

【讨论】:

  • 这也没有打印所有内容:/这可能只是输出问题吗?
  • 添加调试行,看看它是否真的在循环这个循环
  • 嗯......现在它不再显示任何东西了,它甚至没有显示我在导航栏之外的 html 文档
  • 您是否查看过您的php error log 以获取任何提示。另请记住,我只能看到您向我展示的内容,我看不到 html,因此我将其视为独立的一段代码
  • 错误日志的最后一个日志是我尝试用file_get_contents()打印出来的时候
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多