开发者社区> 问答> 正文

PHP fread的问题..:报错

$fp = fopen('i.html', 'rb');

$arr = fstat($fp);
echo 'file size:'.$arr['size'];

fread($fp, $arr['size']);

echo PHP_EOL;
echo "fread(\$fp, {$arr['size']});";
echo PHP_EOL;

var_dump(feof($fp));
exit();

i.html 文件的内容为一行:(无换行)

1234
数据已经读取完了, 为什么:

var_dump(feof($fp));

还返回假?  还没到结束点?

展开
收起
kun坤 2020-06-08 19:25:01 413 0
1 条回答
写回答
取消 提交回答
  • fclose你需要######多思考. 亲.###### http://en.cppreference.com/w/c/io/feof
    大意就是说,你读到eof的时候,下次再调用fread之类的读操作会失败,然后会自动置状态为eof,然后这个时候才能通过feof得到true
      ######

    引用来自“hylent”的答案

    http://en.cppreference.com/w/c/io/feof 大意就是说,你读到eof的时候,下次再调用fread之类的读操作会失败,然后会自动置状态为eof,然后这个时候才能通过feof得到true  
    不太明白, ######
    你读两遍试试。
    <?php
    
    $fp = fopen('i.html', 'rb');
    
    $arr = fstat($fp);
    echo 'file size:'.$arr['size'];
    
    fread($fp, $arr['size']);
    
    echo PHP_EOL;
    echo "fread(\$fp, {$arr['size']});";
    echo PHP_EOL;
    
    var_dump(feof($fp));
    
    fread($fp, $arr['size']);
    
    var_dump(feof($fp));
    exit();
    ###### fread()有两个参数:
    file 必需。规定要读取打开文件。
    length 必需。规定要读取的最大字节数。
    你设置了长度,于是 fread就读了这么长,虽然也全部读取了,但与读到文件结束是两个概念。 ######

    引用来自“Lucups”的答案

    你读两遍试试。
    <?php
    
    $fp = fopen('i.html', 'rb');
    
    $arr = fstat($fp);
    echo 'file size:'.$arr['size'];
    
    fread($fp, $arr['size']);
    
    echo PHP_EOL;
    echo "fread(\$fp, {$arr['size']});";
    echo PHP_EOL;
    
    var_dump(feof($fp));
    
    fread($fp, $arr['size']);
    
    var_dump(feof($fp));
    exit();
    while(!feof($fp)){  $arr[] = fread($fp,$size); } 显然就造就了一空数组值.
    2020-06-08 19:25:07
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
The Next Gen of PHP 立即下载
使用C++开发PHP7扩展 立即下载
低代码开发师(初级)实战教程 立即下载