使用PHP输出二进制数据时出错

时间:2011-10-20 02:32:30

标签: php

我写了一个简单的php来从DB加载一些二进制数据然后输出到客户端。

    $sql="select FightPlayEnd from ZMTXLogic.FightLog where ID=".addslashes($id);
    $result=$db->query($sql);

    if($db->num_rows($result)>0)
    {

        $row = mysql_fetch_assoc($result);
        $nByteCount = mb_strlen($row["FightPlayEnd"], '8bit');
        //echo $nByteCount;

        header("Content-type:application/octet-stream");
        header("Accept-Ranges:bytes");
        header("Accept-Length:".$nByteCount);
        header("Content-Disposition:attachment;filename=FightPlayEnd.bin");
        header( "Content-type: application/octet-stream");

        echo $row["FightPlayEnd"];
    }

问题是从IE获取的数据与原始二进制数据不同但添加了 EF BB BF(在UltraEdit中查看)在标题处,0D 0A 0D 0A在结尾处。这有什么问题?

1 个答案:

答案 0 :(得分:4)

0D 0A 0D 0A只是\r\n\r\n,即两个换行符。

EE BB BF是字节顺序标记。它标志着UTF-8编码。

修改(参见评论):

您的脚本输出可能超出预期(特别是那些\r\n\r\n)。

您需要在开始输出数据(ob_clean())之前清理输出缓冲区,然后在回声后立即退出。