php fread()函数读取文本直到文件尾却无法结束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php fread()函数读取文本直到文件尾却无法结束相关的知识,希望对你有一定的参考价值。

<?php
$handler=fopen('test.txt','rb');
$t='';
while(($contents=fread($handler,10))!==false)
$t.=$contents;

echo $t;
fclose($handler);
在循环里一直出不来,为什么文件都读完了,还不返回false

参考技术A 应该是!feof($contents=fread($handler,10)),这里返回的是字符串,不能用false去判断追问

手册上说失败时返回false,没数据读不算失败吗

追答

while (!feof($handler)) //This looped forever
$contents= fread($handler, 1024);

手册上是对的,但是我怀疑可以是在无法读取时才返回false,读取到末尾返回的是空或者“”或者NULL,你在循环里面var_dump($contents)试一下,或者像我上面那样,是官网里面的写一样,换种方法

追问

返回了"",fgets是可以这样的,因为没数据读它返回false

本回答被提问者采纳

matlab 中关于fread函数的用法

用fread打开一个文件时,需要不需要把被打开文件放在某个特定位置?

fread函数在MATLAB中的功能:fread函数可从文件中读取二进制数据

用法:

A = fread(fid, count)

A = fread(fid, count, precision)

其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

扩展资料:

fread函数在PHP中:

(PHP 4, PHP 5)

fread:读取文件(可安全用于二进制文件)

stringfread( int handle, int length )

fread()从文件指针handle读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。

在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 'b'。

当从网络流或者管道读取时,例如在读取从远程文件或popen()以及proc_open()的返回时,读取会在一个包可用之后停止。这意味着应该如下例所示将数据收集起来合并成大块。

如果只是想将一个文件的内容读入到一个字符串中,用file_get_contents(),它的性能比上面的代码好得多。

参考资料:百度百科-fread函数

参考技术A “fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size: 不指定 :到尾返回读。
N : 读出N个数据,构成列向量。
inf : 读出fid指向的打开的文件的全部数据。
[M,N] : 读出N个数据,构成列向量,填入M*N矩阵
precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时位。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'char' 'char*l' 8 位,字符型
'uchar' 'unsigned char' 8 位
'schar' 'signed char' 8 位,字符型
'int8' 'integer*1' 8 位,整型数
'intl6' 'integer*2' 16 位,整型数.
'int32' 'integer*4' 32 位,整型数.
'int64' 'integer*8' 64 位,整型数
'uint8' 'integer*l' 8 位
'uintl6' 'integer*2' 16 位
'uint32' 'integer*4' 32 位
'uint64' 'integer*8' 64 位
'float32' 'real*4' 浮点数, 32 位
'float64' 'real*8' 浮点数, 32 位

以下precision(精度)将不保证读出具有一致的体积。
MATLAB C or Fortran Descriphon(精度)
'short' 'short' 16 位,整型数
'int' 'int' 32 位,整型数
'long' 'long' 32 (64) 位,整型数
'uShort' 'Unsigned short' 16 位
'uint' 'Unsigned int' 32 位
'ulong' 'unsigned long' 32 (64) 位
'float' 'float' 浮点数, 32 位
'double' 'double' 浮点数, 64 位
以下precision(精度)规定读出指定的体积n。
'bitN' N位,整型数 1<=N<=64
'ubitN' N位, 1<=N<=64
参考技术B 文件必须在Matlab可以搜索的路径中。
一般为提高速度,直接指定位置,比如指定C盘文件myfile
fid=fread('C:\myfile','r')本回答被提问者采纳
参考技术C 当前目录下也是个选择

以上是关于php fread()函数读取文本直到文件尾却无法结束的主要内容,如果未能解决你的问题,请参考以下文章

C 编程中的 fread 函数

fread函数无法正确读取数据

matlab 中关于fread函数的用法

C 语言文件操作 ( fread 函数 )

fread()函数如何判断是不是到文件末尾?

文件函数fread()获取文件的内容的问题,在线等,急啊!