从SQLite数据库加载图片后页面无法显示其他内容求助
Hey Andreas, 我来帮你搞定这个问题!
你的问题根源很清晰:当你在get_icon函数里设置header("Content-Type: image/png")并直接echo图片二进制内容后,整个HTTP响应的内容类型就被强制设定为图片了。浏览器收到这个响应后,会把所有返回的内容都当作PNG图片的一部分来解析——后面的<p>Show further content...</p>自然就被当成无效的图片数据忽略掉了,所以看不到任何其他内容。
下面给你两种解决方案,优先推荐第一种(行业标准做法):
方案一:将图片作为独立资源引用(推荐)
这种方式性能更好,还能利用浏览器缓存,同时避免SQL注入风险(你的原始代码存在这个隐患!):
- 先修改
get_image.php,让它可以直接通过URL参数处理图片请求:
<?php function get_icon($id){ $db = new PDO('sqlite:rdb.db3'); // 重点:用预处理语句防止SQL注入,绝对不要直接拼接ID到SQL里! $sql = "SELECT * FROM icons WHERE _id = ?"; $stmt = $db->prepare($sql); $stmt->execute([$id]); $result = $stmt->fetch(PDO::FETCH_ASSOC); if($result){ header("Content-Type: image/png"); echo $result["bytes"]; } else { // 找不到图片时返回404或默认图 header("HTTP/1.1 404 Not Found"); echo "Icon not found"; } } // 直接处理外部请求 if(isset($_GET['id'])){ get_icon($_GET['id']); } ?>
- 然后修改
show.php,用<img>标签引用这个独立的图片接口:
<?php ini_set('display_errors',"1"); $id = $_GET['id']; ?> <!-- 用img标签加载图片,浏览器会单独请求get_image.php --> <img src="get_image.php?id=<?php echo htmlspecialchars($id); ?>" alt="User Icon"> <p>Show further content...</p>
方案二:使用Data URI嵌入图片(适合小图标)
如果非要在同一个响应里同时输出图片和HTML,可以把图片转成Data URI格式嵌入到页面中,但这种方式不适合大图片(会让HTML体积变大,影响加载速度):
- 修改
get_image.php,让它只返回图片二进制数据,不输出header:
<?php function get_icon_data($id){ $db = new PDO('sqlite:rdb.db3'); $sql = "SELECT * FROM icons WHERE _id = ?"; $stmt = $db->prepare($sql); $stmt->execute([$id]); $result = $stmt->fetch(PDO::FETCH_ASSOC); return $result ? $result["bytes"] : false; } ?>
- 然后在
show.php中将二进制数据转成Data URI:
<?php ini_set('display_errors',"1"); require_once 'get_image.php'; $id = $_GET['id']; $iconData = get_icon_data($id); if($iconData){ $base64Data = base64_encode($iconData); $imageUri = "data:image/png;base64," . $base64Data; } else { $imageUri = "path/to/default-icon.png"; // 替换成你的默认图路径 } ?> <img src="<?php echo $imageUri; ?>" alt="User Icon"> <p>Show further content...</p>
内容的提问来源于stack exchange,提问作者Andreas B
相关产品推荐
相关产品推荐

