http://cn2.php.net/manual/en/function.fread.php是的

解决方案 »

  1.   

    我也了一段测试代码没有出现你的情况,代码如下:<?php
    echo "No.1:<br/>";
    $handle = fopen ("2.txt", "rb");
    $contents = "";
    $len = "";
    $fileLen = filesize("2.txt");
    while (!feof($handle)) {
      $contents .= fread($handle, 8192);
    }
    $len = strlen($contents);
    echo "文件长度:".$fileLen."<br/>";
    echo "读取长度:".$len."<br/>";
    echo "文件内容:<br/>".$contents."<br/>";
    fclose($handle);
    echo "-------------------------------";
    echo "No.2:<br/>";
    $fh = fopen("2.txt", "rb"); 
    $data = fread($fh, filesize("2.txt"));
    $lenred = strlen($data);
    echo "读取长度:".$lenred."<br/>";
    fclose($fh); 
    ?>No.2的方法就是你所写的。
    我用的测试文件大小是16.2KB,16680字节的二进制文件。
    测试结果两种方法得到的读取长度都是16880.
    换了几个更大的也如此。
      

  2.   

    fread
    (PHP 3, PHP 4, PHP 5)fread -- 读取文件(可安全用于二进制文件)
    说明
    string fread ( int handle, int length )fread() 从文件指针 handle 读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。 // get contents of a file into a string
    $filename = "/usr/local/something.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize ($filename));
    fclose($handle); 
     
    警告 
    在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen() 函数的 mode 参数要加上 'b'。 
     
    $filename = "c:\\files\\somepic.gif";
    $handle = fopen($filename, "rb");
    $contents = fread($handle, filesize ($filename));
    fclose($handle);  警告 
    当从网络流或者管道读取时,例如在读取从远程文件或 popen() 以及 proc_open() 的返回时,读取会在一个包可用之后停止。这意味着你应该如下例所示将数据收集起来合并成大块。 
     
    <?php
    $handle = fopen ("http://www.example.com/", "rb");
    $contents = "";
    while (!feof($handle)) {
      $contents .= fread($handle, 8192);
    }
    fclose($handle);
    ?>  
      

  3.   

    fread()这个函数的确只能一次性读入8KB的东西,如一楼讲的,一楼的是英文的,中文官方的解释在这里http://cn2.php.net/manual/zh/function.fread.php,这里讲的很明白,“已读取了 8192 个字节时就会停止读取文件”
      

  4.   

    试了下可以一次读出,我要读取是struct 结构里边的数据<8192 ^ ^
    读取的二进制文件是struct 结构的,
    我想将读取到的数据在php 中定义并赋读取到的值要怎么做??<?php
    echo "No.1:<br/>";
    $handle = fopen ("2.txt", "rb");
    $contents = "";
    $len = "";
    $fileLen = filesize("2.txt");
    while (!feof($handle)) {
      $contents .= fread($handle, 8192);
    }$contents ---
      

  5.   

     $contents就是你要读取的数据.不用定义.
    不过你可以初始化一下.
    $content = "";