你知道怎样从数据库读出内容,我就省略那部分
//show image php (showimg.php)
<?php
    //sql query.....
    //假设已经从数据读出内容到$picDate:
    //PHP支持三种图像:jpg、gif、png
    //你要对应的把下句的image/jpeg换成相应的image/gif、image/png
    header("Content-type: image/jpeg"); 
    echo $picData;
?>在html中显示:
//Query Page(Query.htm)
.....
<img src=showimg.php?id=xxxx>
.....

解决方案 »

  1.   

    to nhconch(海风轻拂) :多谢大虾的帮助,我现在在软件公司,以后可能还会有一些不明的问题,希望能得到您的指点!如果可以的话希望保持联系,我的EMAIL是:[email protected]
      

  2.   

    您所说的思路我已明白,找您所说的方法我已试过,但页面没有反映。我是用windows2000 family server +apache2.0 +php4.0的配置,我考虑了一下有以下疑惑:
    1,php显示图形是否需要图形库的支持:php_gd.dll;是否需先加载它?
    2,”<img src=showimg.php?id=xxxx>“代码中id是否指记录的ID号?
    3,我在SYBASE中看到的该照片子段是16进制的数,而“//你要对应的把下句的image/jpeg换成相应的image/gif、image/png”中所说,是否是说将此$picdata以jpeg或gif的格式输出,与该字段的类型没关系如:image,binary,(只要是图象类型)
    所写代码如下:
    showimg.php部分
    <?phpinclude("func.php");
    include("phpdb.php");   //打开数据库
    //开始对sql语句复职
    $sql_str="SELECT t_daoyou.*,t_lyrencai.f_name ,t_lyrencai.f_sex,t_lyrencai.f_xueli ,t_lyrencai.f_photo FROM t_daoyou,t_lyrencai WHERE t_daoyou.f_usercode =t_lyrencai.f_usercode AND t_daoyou.f_usercode='$f_usercode'";$query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
      $picdata= $rs[f_phpoto] ;
    }
        header("Content-type: image/gif"); 
        echo $picdata;
    ?>
    query.htm部分:<?php   
        .  //前面代码省略...
        .
        .
         echo "f_usercode=$f_usercode";
         echo " <img src=showimg.php?f_usercode=$f_usercode width=150 height=200 > ";
      ?>苦恼中....
      

  3.   

    我还是把代码贴出来吧,数据库操作集中到dbfun.inc里,供各个面页共享,这里的操作简化了,但思路还是一样的:
    数据库中的Image表内容(我用的是mysql,sybase可能稍有不同):
    CREATE TABLE Image
    (
      ID INT UNSIGNED PRIMARY KEY,
      Name VARCHAR(64) NOT NULL,
      Width INT UNSIGNED DEFAULT 0,
      Height INT UNSIGNED DEFAULT 0,
      Type ENUM('gif', 'jpeg', 'png') DEFAULT 'gif',
      Data BLOB NOT NULL
    )//showimg.php
    <?php
    if ($id!="")
    {
        require("dbfun.inc");
        $sql = new CmysqlDB;
        $sql->Connect();      //连接数据库
        $sql->Query("SELECT Type, Data FROM Image WHERE ID=$id");  //执行SQL语句,等价于sybase_query()
        $sql->Fetch(0);   //等价于sybase_fetch_array
        $picData = base64_decode($sql->data[Data]); //图像数据存进数据库时经过base64_encode编码
        $sql->Close();        //断开数据库连接
        //下面代码显示图片
        header("Content-type: image/$sql->data[Type]"); 
        echo $picData;
    }
    ?>在HTML页面中要显示ID为1的图片,像下面这样:
    <img src=showimg.php?id=1>PS:
    建议showimg.php仅用作显示图片,不要SELECT那么多字段
      

  4.   

    这是上传的代码(节选,有点乱):
    require("imgfun.inc");  //检查文件、读取数据的头文件(自编)
    require("dbfun.inc");
    $sql = new CmysqlDB;
    $sql->Connect();
    if ($DelOldImg) $sql->ExeSQL("DELETE FROM Image WHERE ID=$OldImgId");
    if ($ImageFile=="" || $ImageFile=="none" || $ImageFile && checkImg($ImageFile) && ($imgBuffer = readFileData($ImageFile, $ImageFile_size)))  //函数checkImg()、readFileData()、 getImageInfo()均在imgfun.inc里
    {
        $ImageId = 0;
        //$HasImage = 0;
        if ($ImageFile != "" && $ImageFile != "none")
        {
            $HasImage = 1;
            $imgData = base64_encode($imgBuffer);
            $img_Info = getImageInfo($ImageFile);
            $sql->Query("SELECT MAX(ID) AS ID FROM Image");
            $sql->Fetch(0);
            $ImageId = $sql->data[ID]+1;
            $sql->ExeSQL("INSERT INTO Image VALUES ($ImageId, '$ImageFile_name', $img_Info[width], $img_Info[height], '$img_Info[type]', '$imgData')");
        }
        else
            $HasImage = 0;
    ...........        
            echo "<p> 您的供求信息已成功修改</p>";
            echo "<p>  <a href=member.php?op=4>查看我发布的供求信息</a></p>";
            echo "<p>  <a href=member.php?op=3>发布新的供求信息</a></p>";
            echo "<p>  <a href=index.php>返回首页</a></p>";
        }
        //echo "<img src=showimg.php?ID=$ImageId>";
        $sql->Close();//imgfun.inc
    ....
    function readFileData($fileName, $fielSize)
    {
      if (($fp = fopen($fileName,"r")) && ($buf = fread($fp, $fielSize)))
      {
        fclose($fp);
        return $buf;
      }
      else
      {
        echo "文件 $fileName_name 不能读取!<br>";
        return 0;
      }
    }
    .......
      

  5.   

    今天我又重新试了试,简化了大部分的程序,我将SHOWIMG.PHP直接显示出来,网页有了反应,但输出的不是照片,而是16进制的数值字符串,很长,比如:“d8ffe000104a46494600010100000100010000ffdb004300140e0”。输出的报头我按三种图象格式试了,结果都是一样。我又将showimg.php在query.htm中输出,但网页没显示(只有一个”X“,像是图象路径指示错误),请指点!showimg.php部分
    <?php
    include("phpdb.php")
    //开始对sql语句复职$f_usercode="370200.0301.00001";//我直接了指定记录的ID号,没传递参数
    $sql_str="select t_lyrencai.f_photo from t_lyrencai where t_lyrencai.f_usercode='$f_usercode'";$query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
      $picdata= $rs[f_photo] ;
    }
        //PHP支持三种图像:jpg、gif、png
        //你要对应的把下句的image/jpeg换成相应的image/gif、image/png    header("Content-type: image/gif"); 
       //header("Content-type: image/jpeg"); 
       // header("Content-type: image/png"); 
        echo $picdata;
    ?>
    query.html部分
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD><BODY>
    <img src="showimg.php" width="760" height="66">
    </BODY>
    </HTML>
      

  6.   

    该字段类型是IMAGE类型,至于当时导入时是否经过了什么处理我也不太清楚(手中的文档有限)这方面很重要吗?
      

  7.   

    你先试试能不能单独显示一个那个图片(只能有图片,不能有任何输出包括<html>这样的东西),
    如果能的话,就做成一个文件,作为显示图片的文件,
    然后再用html里面象显示图片一样调用这个文件
    you try
      

  8.   

    这样看看
    showimg.php
    <?php
    include("phpdb.php")
    $f_usercode="370200.0301.00001";//我直接了指定记录的ID号,没传递参数
    $sql_str="select t_lyrencai.f_photo from t_lyrencai where t_lyrencai.f_usercode='$f_usercode'";$query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
      $picdata= $rs[f_photo] ;
    }
    $fp = fopen("img.gif","wb"); //文件名自定,后缀按真实图片的类型
    fwrite($fp,$picdata);
    fclose($fp);然后查看img.gif,若不正常则查看文件信息
      

  9.   

    现在问题的关键是搞清楚图片在导入时做了什么处理,否则你根本不可能把图片显示出来。
    导入时进行处理的原因很简单,SQL语句里的都是文本内容,如果picdata里有特殊字符如:'等,就执行不了INSERT、UPDATE等语句,所以导入时进行处理是必然的。你还是先搞清楚吧。大家可以到http://www.gdjd.org/imgtemp/img.php来测试一下,有源程序。
    我不想再讨论这个问题。
      

  10.   

    今日又试了一天,
    进展如下:
    1 在php中显示本地的图片文件通过,可正常显示。
    2 将该显示图片的PHP文件钳入到HTML页中也可以正常显示。

    发现问题:
    1 ”http://www.gdjd.org/imgtemp/img.php“ 中下载文件为imagetext.rar但文件无法解压缩,程序报错:未知方式于某某文件。
            2  将数据库的图片文件往本地图片文件(gif格式)中写,文件的大小由原来的0.4K变为11k,但文件无法浏览,用ACDSEE什么也看不到,用editplus看显示为16进制的数字。
            3 尝试用BASE64_decode先解码,则网页的输出由显示16进制的数变为无显示(只有一个”X“,像是图象路径指示错误。
            4 尝试用不同的图片类型输出(header(image/gif/jpeg/png)),曾输出16进制的数字,和汉字乱码。      
            说明:进行了这么多的尝试,我逐渐的认识到确定当初输入数据库图片类型的重要性,我会想办法弄清楚的!//              涉及的原代码:
    showpic.php  //显示本地的图片,测试成功
    <?php$fp = fopen("mime.gif","r+"); //文件名自定,后缀按真实图片的类型
    $fpic=fread($fp,filesize("mime.gif"));
    header("Content-type: image/gif"); 
    echo $fpic;
    ?>showInfo.php  //显示嵌入的PHP图象文件,测试成功!

       <?
        ...
      echo "<a <img src=$rs[f_phpoto] width=150 height=200 > /a>";
      echo "f_usercode=$f_usercode";
      echo " <img src=showpic.php?f_usercode=$f_usercode width=150 height=200 > ";
       ...
       ?>showimage.php //显示数据库的图形文件,和往本地的图片文件写,在此发现很多的错误如上所说。
    <?php
    include("phpdb.php");
    $f_usercode="370200.0301.00001";
    $sql_str="select t_lyrencai.f_photo from t_lyrencai where t_lyrencai.f_usercode='$f_usercode'";$query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
      $picdata= $rs[f_photo] ;
      //$picdata= base64_decode($rs[f_photo]) ;
    }   // $picData = base64_decode($picdata); 
        header("Content-type: image/jpeg"); 
    $fp = fopen("mime.gif","w+"); //
        fwrite($fp,$picdata);
        echo $picdata;
    ?>
      

  11.   

    你把我的意思理解错了
    showimage.php //读取数据库的图形文件,在服务器上形成文件
    <?php
    include("phpdb.php");$f_usercode="370200.0301.00001";
    $sql_str="select t_lyrencai.f_photo from t_lyrencai where t_lyrencai.f_usercode='$f_usercode'";$query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
      $picdata= $rs[f_photo] ;
      //$picdata= base64_decode($rs[f_photo]) ;
    }
       // $picData = base64_decode($picdata); 
    //    header("Content-type: image/jpeg"); 
    $fp = fopen("mime.gif","wb"); //
        fwrite($fp,$picdata);
    //    echo $picdata;
        fclose($fp);
    ?>
    <img src=mime.gif>看看是否能显示
    若不能,将图片mime.gif下载下来。
    1、与原图片比较
    2、查看图片文件内容
      

  12.   

    1 今询问有关人员关于数据库的设计,知道当时照片的格式是JPEG,往数据库录入时采用的是专门的程序来做的2 将数据库的图片字段写成文件,以JPEG格式输出时,(三种方式我都试了, 可都不行)
      如果用BASE64_decode函数处理,则页面中的图片筐无法正确显示图象;
      当不用BASE64_decode函数处理,则页面中输出16进制的数字串
    3 写文件后该文件还是JPEG格式,但无法用图象程序或在网页中正确显示,用EDITPLUS打开,发现都是乱码和未写文件时的乱码风格一样!showimage.php  //将数据库中图象字段写文件
    <?php
    include("phpdb.php"); //读取数据库的图形文件,在服务器上形成文件
    $f_usercode="370200.0301.00001";
    $sql_str="select t_lyrencai.f_photo from t_lyrencai where t_lyrencai.f_usercode='$f_usercode'";
    $query=sybase_query($sql_str);
    if($rs=sybase_fetch_array($query))
    {
     1 $picdata= $rs[f_photo] ;
    //$picdata= base64_decode($rs[f_photo]) ;
    }    header("Content-type: image/jpeg"); 
        echo $picdata;
    $fp = fopen("ocean.jpg","wb"); //
        fwrite($fp,$picdata);
       // fclose($fp);
    ?>网页部分:
    <HTML>
    <BODY>
    <img src="ocean.jpg" width=150 height=200 > 
    </BODY>
    </HTML>
      

  13.   

    To: dreamwaver(dreamweaver)
    你应该向原来的人员取图片入库时的编码方法,并写出对应的还原程序,将数据还原后再显示。
    base64_decode是对经过base64_encode的数据进行还原用的,若果原数据不是经base64_encode编码,使用base64_decode是错误。
    继续努力吧,但是速度要快点,那家公司也不愿意为一个问题浪费那么多时间。
      

  14.   

    1 该数据库的照片字段曾用JAVASCRIPT成功的显示出来,但我揣摩了半天其中关键的BLOBIMAGE函数,棱时没能看透是怎样解码显示的,代码如下。
    write(rs.f_photo.blobImage("jpeg","","center","150","200","1"));
    2 录入照片时采用的ASP,代码如下,但我不懂ASP,请诸位帮我看看,谢了!<HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    </HEAD><BODY>
    <%response.buffer=true
    FormSize = Request.TotalBytes 
    FormData = Request.BinaryRead(FormSize)function ImageUp(formsize,formdata) 
    bncrlf=chrb(13) & chrb(10) 
    divider=leftb(formdata,instrb(formdata,bncrlf)-1)
    datastart=instrb(formdata,bncrlf&bncrlf)+4
    dataend=instrb(datastart+1,formdata,divider)-datastart
    imageup=midb(formdata,datastart,dataend)
    end functionImage=ImageUp (FormSize,Formdata) 
    Set strconn = server.createobject("adodb.connection")
    set rs=server.CreateObject("adodb.recordset")
    strconn.open "driver={sql server};server=;uid=userid;PWD=password;database=daoyou_db"
    sql="SELECT * FROM dy_info"
    rs.Open sql,strconn,1,3rs.AddNew 
    rs("f_photo").appendchunk Image 
    rs.Update
    rs.Closeresponse.contenttype="image/gif"
    response.binarywrite imageup(formsize,formdata)
    %>
    </BODY>
    </HTML>
      

  15.   

    我没学过ASP,但还是帮你分析一下吧:function ImageUp(formsize,formdata) 
      bncrlf=chrb(13) & chrb(10) '这是回车换行符
      divider=leftb(formdata,instrb(formdata,bncrlf)-1) '取第一个回车换行符的位置
      datastart=instrb(formdata,bncrlf&bncrlf)+4 '取接连两个回车换行符的的位置+4(即紧跟该位置后一个位)
      dataend=instrb(datastart+1,formdata,divider)-datastart '大概是取剩余的长度
      imageup=midb(formdata,datastart,dataend) '从fromdata中取出datastart到dataend之间的内容,并返回
    end function<%response.buffer=true
      FormSize = Request.TotalBytes 
      FormData = Request.BinaryRead(FormSize) '读入内容到formdata中
      Image=ImageUp (FormSize,Formdata) '取ImageUp取出需要的部分
      '下面是通过adodb引擎连接Sql的daoyou_db数据库并选取dy_info表的内容
      Set strconn = server.createobject("adodb.connection")
      set rs=server.CreateObject("adodb.recordset")
      strconn.open "driver={sqlserver};server=;uid=userid;PWD=password;database=daoyou_db"
      sql="SELECT * FROM dy_info"
      rs.Open sql,strconn,1,3  '接入取得数据并保存(与PHP不同的是,这样可以保存二进制的数据,处理适当当然PHP也可以)
      rs.AddNew 
      rs("f_photo").appendchunk Image 
      rs.Update
      rs.Close  '显示图片
      response.contenttype="image/gif" '产生文件头
      response.binarywrite imageup(formsize,formdata)
    %>
    应该说,数据库里保存的是图片的图像部分,在PHP里参照它那样读出来显示就行了:
        ..._query("select f_photo from dy_info where ...");
        rs = ..._fetch_array(..);
        pciData = rs[f_photo];
        header("Content-type: image/jpeg"); 
        echo $picData;是不是,你试试吧,我也不能保证正确
      

  16.   

    另外这涉及到gif、jpg的图像文件格式,你补补课吧。
      

  17.   

    今天又试了试,图片还是没能显示出来。通过这几天的学习,虽然问题没能最终解决,但在大家的指点下,查找相关的资料,我学到了很多的知识,我也学会了一种很重要的学习方法,及解决问题的途径。
          请帮我总结一下知识点:
          1 当图片类型的文件往远程数据库存时,肯定要进行适当的编码,在照片从数据库中要显示出来时,要进行相应的解码。
          2 php支持的图片有三种:jpeg,png,gif,图片存进数据库中时什么格式,则显示时也要同样的格式。   在公司我是新手,以前学的是VB,现在被安排做PHP的开发,而且我做的这一块用PHP显示数据库的图片的部分,公司里没人先前做过,我的老师也没给我太大的压力,我又要开始准备新的项目了,这块以后漫漫再说吧,我会补习一下相关的知识,相信一定会克服它的!
         最后特别感谢 nhconch(海风轻拂) ,(xuzuning(唠叨) ,xizi2002(☆☆戏☆子☆☆) 几位网友给我的帮助,谢谢你们!      (我会在三天以后,结贴)
      

  18.   

    今天又试了试,图片还是没能显示出来。通过这几天的学习,虽然问题没能最终解决,但在大家的指点下,查找相关的资料,我学到了很多的知识,我也学会了一种很重要的学习方法,及解决问题的途径。
          请帮我总结一下知识点:
          1 当图片类型的文件往远程数据库存时,肯定要进行适当的编码,在照片从数据库中要显示出来时,要进行相应的解码。
          2 php支持的图片有三种:jpeg,png,gif,图片存进数据库中时什么格式,则显示时也要同样的格式。   在公司我是新手,以前学的是VB,现在被安排做PHP的开发,而且我做的这一块用PHP显示数据库的图片的部分,公司里没人先前做过,我的老师也没给我太大的压力,我又要开始准备新的项目了,这块以后漫漫再说吧,我会补习一下相关的知识,相信一定会克服它的!
         最后特别感谢 nhconch(海风轻拂) ,(xuzuning(唠叨) ,xizi2002(☆☆戏☆子☆☆) 几位网友给我的帮助,谢谢你们!      (我会在三天以后,结贴)