【问题标题】:fgetc() function to read the whole filefgetc() 函数读取整个文件
【发布时间】:2020-03-07 15:07:46
【问题描述】:

我正在尝试使用 fgetc() 和 do..while 循环读取整个文件。我知道不建议这样做,但应该可以。 counter.dat 的内容是 我不知道该怎么做,但我得到的输出是 0。为什么是 0?

<?php
 $f = "counter.dat";
 if (!($fp = fopen($f,"r"))) {
      die("Can Not Open $f");
 }
 do {
  $one_char = fgetc($fp);
  $counter = $one_char;
  $counter .= $one_char;
 } while($one_char);
 fclose($fp);
 $counter = (int) $counter;
 echo $counter;
?>

【问题讨论】:

  • 当您执行$counter = $one_char; 时,您正在丢弃$counter 的先前值。摆脱那条线。
  • @Barmar。我按照你说的做了,但是它给出了一个错误,在第 12 行显示 undefined counter。
  • 因为你从未初始化过$counter
  • counter.dat 包含什么
  • @RonakDhoot。 counter.dat 包含句子“我不知道该怎么做”

标签: php fgetc


【解决方案1】:

在追加之前,您每次通过循环都会覆盖$counter。在最后一次迭代中,$one_char 将是FALSE,因此您设置了$counter = FALSE;,并将其转换为整数返回0

您还需要在开头将$counter初始化为一个空字符串。

由于文件不包含整数,因此不应使用(int) $counter。只需打印$counter 的值即可。

这样做:

$counter = "";
while ($one_char = fgetc($fp)) {
    $counter .= $one_char;
}
echo $counter;

这会在到达 EOF 时立即退出循环,它不会尝试使用上次迭代中的 FALSE 值。

【讨论】:

  • 我复制了您的代码并将其粘贴在那里。 0 仍然是输出。
  • 文件是否包含数字?
  • 没有。就一句话,就是“我不知道该怎么办”。
  • 你为什么要用(int) $counter把它转换成整数?
  • 哦。这就是问题所在。我删除了它,它起作用了。请编辑您的答案,以便我可以选择它作为答案。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多