这是代码
<?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
答案 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)
您的脚本C:\xampp\htdocs\img\search.php
正在第61行生成输出。必须先将HTTP标头放在首位,不能在文档中间发送。
设置HTTP标头不会停止当前脚本。您必须明确调用exit()。
答案 7 :(得分:0)
所有ob_start
答案都是错误的。你的代码永远不会像这样工作。您可以在HTML页面中放置图像链接,但不能将图像数据直接放入其中。您必须创建一个HTML页面,以及另一个显示图像的脚本,您将在第一页上使用<image src="imagescript.php">
标记来调用它。
答案 8 :(得分:0)
将您的代码移动到另一个脚本,然后使用类似:
<img src="myimg_genarator_script.php" />
请考虑使用框架,即使它是一个小项目,也有很多框架对您有所帮助,不会造成太大的开销(尝试codeigniter)