php数据库图像显示问题

时间:2010-04-05 07:50:41

标签: php mysql

这是代码

<?php
 session_start();

 if(!isset($_SESSION['user_name']))
 {
  header('Location: login.php');
 }

 $conn = mysql_connect("localhost", "root", "") or die("Can no connect to Database Server");
?>

<html>
<head>

</head>
<body>
<center>
<div id="ser">
<form action="" method="post">


<label for="file">Card No:</label>
<input type="text" name="card_no" id="card_no" class="fil" onKeyUp="CardNoLength()" onKeyDown="CardNoLength()" onKeyPress="CardNoLength()"/>
<input type="submit" name="search" value="Search" class="btn" onClick="return CardNoLengthMIN()"/>
</form>
</div>
</center>
<br/><hr style="border: 1px solid #606060 ;" />
<center><a href="index.php">Home</a></center>
<br/>

<center>
<?php

 if(isset($_POST['card_no']))
 {
  if($conn)
  {
   if(mysql_select_db("img_mgmt", $conn))
   {
    $sql = "select * from temp_images where card_no='".trim($_POST['card_no'])."'";
    $result = mysql_query($sql);
    $image = mysql_fetch_array($result);

    if(isset($image['card_no']))
    {

      //echo "<img src=\"".$image['file_path']."\" alt=\"".$image['card_no']."\" width=\"250\" height=\"280\"/>";
      header("Content-type: image/jpeg");
      echo $image['img_content'];

    }
    else
    {
      echo "<p style=\"color:red;\">Sorry, Your search came with no results ! <br/> Try with different card number";
    }
   }
   else
   {
    echo "Database selection error: ".mysql_error();
   }
  }
  else
  {
   echo "Could not connect: ".mysql_error();
  }
 }
?>
</center>

</body>
</html>

但是在执行完脚本后它会显示:

  

无法修改标头信息 -   已经发送的标题(输出   开始于   C:\ xampp \ htdocs \ img \ search.php:61)in   C:\ xampp \ htdocs \ img \ search.php在线   77

9 个答案:

答案 0 :(得分:3)

如果您已将图像内容保存在数据库中,则可以使用data: uri在<img />标记中显示此内容。这允许您在不同内容中嵌入不同mime类型的内容,请参阅data URI scheme

但是你不应该真正保存数据库中的任何文件(无论图像与否)。文件属于文件系统,正如名称所示。在数据库中保存文件会产生巨大的开销。特别是对于你需要(可能)加载图像的php脚本的图像,例如。如果您使用<img src="showimage.php?id=5" alt="..." />之类的内容。对于每个图像,您需要调用一个额外的PHP脚本,而您什么也得不到。 Everyone会告诉你最好将文件保存在文件系统中并正常通过文件系统加载它。所以你使用像<img src="images/foobar/xyz.png" alt="..." />这样的标签。即使“我不希望任何'断开链接'到我的数据库中的图像”参数也不算数,因为您只需使用路径中的ID并使用file_exists()来检查是否图片链接是否有效。

$path = 'images/useravatars/'.$row['ID'].'.png'; // as an example
if (file_exist($path)) {
     echo '<img src="'.$path.'" alt="username" />';
} else {
     echo '<img src="images/noimage.png" alt="No Image found" />';
}

答案 1 :(得分:2)

您收到该错误的原因是因为您尝试发送标头指示该文件是图像,但在输出内容后无法发送标头(在这种情况下,PHP标签外的HTML是违规输出)。

然而,这不是你的主要问题。您遇到的真正问题是您不能简单地将图像输出到HTML文件中以显示它(实际上,您可以将它们编码为图像标记,但不建议这样做)。您现在要做的是,您发送一些HTML,然后尝试告诉浏览器该页面实际上是一个图像,然后发送图像内容。那是行不通的。你必须像常规的HTML文件一样。图像必须是<img>标记链接到的单独文件。

换句话说,您需要输出页面的脚本和<img>标记链接到的另一个脚本,该脚本从数据库中提取单个图像并对其进行显示。因此,您应该输出一个标记为show_image.php?id=123的标记,而不是尝试在该页面上输出图像,该标记链接到使用数据库中相应ID输出图像的脚本。

答案 2 :(得分:0)

你还不知道HTML吗?这段代码应该如何工作?

如果您甚至不知道如何从数据库中显示图像,为什么不将图像存储在文件系统中?

答案 3 :(得分:0)

你不能混合匹配html和图像数据,你必须创建两个脚本。一个生成带有<img />标签的html和一个将创建实际图像的HTML。

您收到的错误是因为在脚本输出内容后无法设置标题,您可以使用ob_start来解决此问题

答案 4 :(得分:0)

在页面顶部使用ob_start()。这会清理缓冲区

例如

&LT; ?PHP的

ob_start();

在session_start();

答案 5 :(得分:0)

您正在获取标题erorr,请尝试将以下内容放在您的文件之上:

ob_start();

如果问题仍然存在,您可以使用javascript重定向到新页面,但这不是最好的方法:

 if(!isset($_SESSION['user_name']))
 {
  ?>
      <script>
        document.location.href = 'login.php';
      </script>
  <?php
 }

答案 6 :(得分:0)

  1. 您的脚本C:\xampp\htdocs\img\search.php正在第61行生成输出。必须先将HTTP标头放在首位,不能在文档中间发送。

  2. 设置HTTP标头不会停止当前脚本。您必须明确调用exit()。

答案 7 :(得分:0)

所有ob_start答案都是错误的。你的代码永远不会像这样工作。您可以在HTML页面中放置图像链接,但不能将图像数据直接放入其中。您必须创建一个HTML页面,以及另一个显示图像的脚本,您将在第一页上使用<image src="imagescript.php">标记来调用它。

答案 8 :(得分:0)

将您的代码移动到另一个脚本,然后使用类似:

<img src="myimg_genarator_script.php" />

请考虑使用框架,即使它是一个小项目,也有很多框架对您有所帮助,不会造成太大的开销(尝试codeigniter