<?
header('Content-Type:text/html;charset=GB2312');
$path = "apache2.doc";
$handle = fopen ($path, "rb");
$contents = "";
do {
    $data = fread($handle, 1);
    if (strlen($data) == 0) {
        break;
    }
    $contents .= $data;
} while(true);
fclose ($handle);$conn=mssql_pconnect("DEVELOP-08","sa","123");
mssql_select_db("test",$conn);
$sql = "insert into test values('".$path."','".base64_encode($contents)."')";  //urlencode转换url编码    base64_encode  base64_decode
echo $sql;
if(mssql_query($sql,$conn))
echo "ok";
else
echo "false";$result = mssql_query("select zd2 from test where zd1 = '$path'");
$myrow = mssql_fetch_array($result);$fp=fopen('apache3.doc','w');
fwrite($fp,base64_decode($myrow[0]));    //urldecode恢复原编码
fclose($fp);
mssql_close();
?> 我想做的是读取doc文件后保存到数据库中,可是取出来的时候写回去的话就乱码或没有结果。试过urlencode,base64_encode,pack等方法都不行,哪位高手指点指点啊。

解决方案 »

  1.   

    还试过file_get_contents()依然无效。
      

  2.   

    既然入库时用了 base64_encode 进行编码
    那么出库时就用 base64_decode 进行解码你已经这样做了,问题可能在于数据库操作中数据被截断了
      

  3.   


    <?php
    /**
    CREATE TABLE `tbl_blob` (`id` int(10) NOT NULL auto_increment,
    `content` mediumblob NOT NULL,
    PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM;
    */
    function asc2hex($str)
    {
    $return = '';
    for($i = 0;$i < strlen($str); $i++)
    {
    $return .= sprintf("%02x",ord($str{$i}));
    }
    return $return;
    }
    $content = file_get_contents('a.doc');
    $str = addslashes('0x' . asc2hex($content));
    $db->query("replace into tbl_blob(id,content) values(1,{$str})");$thisinfo = $db->fetchone("select * from tbl_blob");w('aaa.doc',$thisinfo['content']);
    ?>