我正在检索一个包含title,isbn和image等属性的图书对象数组。当我希望仅使用for循环显示标签时,它显示所有条目。但是当我尝试显示图像时,它只显示一个。此外,当我尝试同时显示标题和图像时,它表示可以
Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/BookStore/BooksResult.php:14) in /Applications/XAMPP/xamppfiles/htdocs/BookStore/BooksResult.php on line 15
。
以下是代码。
foreach($booksArr as &$book)
{
$content = $book->Image;
$title=$book->s_Title;
echo $title;
header('Content-type: image/jpg');
{
echo $content;
}
}
答案 0 :(得分:0)
尝试添加
ob_start()
在文件的开头
编辑:此外,只修改标题信息一次,在ob_start()
之后,只需在文件开始时调用标题函数一次答案 1 :(得分:0)
只能在发送任何输出之前发送标头。您正在回显标题,然后尝试设置标题。
答案 2 :(得分:0)
“无法修改标题信息...”问题在这里:
header('Content-type: image/jpg');
您的PHP脚本正在输出HTML。您无法更改输出中间流的内容类型。相反,您应该输出指向图像位置的<img>
标记。
基于评论数据的更新:
如果您需要将图像作为数据库中的blob提供,则需要创建单独的脚本来获取图像。首先修改此脚本以引用新脚本,方法是创建一个<img>
标记,其src
属性包含图像获取脚本的路径和图像ID:
<img src="/path/to/your/new/script.php?id=<?php echo $row_id; ?>" />
将$row_id
替换为唯一标识数据库中图书的字段数据。
接下来,创建新的图像提取脚本。它将包含三个元素:
从GET请求中获取id
的行:
$ id = $ _GET ['id'];
基于ID获取图像blob的SQL语句。 (记得要清理你的输入!)
header()
语句,就像您在原始脚本中使用的语句一样
在header()
行后,只输出blob,您的图像就会显示出来。
答案 3 :(得分:0)
您正尝试在一个请求中发送所有照片。 HTML不像那样工作。你需要做这样的事情:
foreach($booksArr as &$book) {
$title=$book->s_Title;
echo $title;
echo '<img src="book_image.php?id=' . $book->id . '" alt="' . $title . '"/>';
}
然后在book_image.php
的单独请求中处理这些书籍,您可以在其中打印出相应的标题和内容,如下所示:
$id = $_GET['id'];
// get the book by id from db
header('Content-type: image/jpg');
echo $book->Image;
答案 4 :(得分:0)
如果你真的想要理解这个警告,并且希望将来能够更多地使用PHP,那么你应该开始学习HTTP protocol
的工作原理。很有趣,你会在:)之后看得更清楚。
(这只是一般性建议,而不是您问题的确切答案)