You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP图片显示异常求助:点击仅显示文件名,echo输出img标签存疑

问题排查与解决方法

我来帮你梳理下问题所在,你现在点击后只显示文件名,主要是两个核心原因:HTML标签输出错误,以及图片的访问路径配置不对。下面一步步给你修正:

1. 先解决HTML标签的输出问题

你代码里写的是:

echo "<img src='$path' height='200' width='200'/>";

这里的&lt;和&gt;是HTML实体字符,浏览器会把它们解析成文本形式的<和>,而不是真正的HTML标签,所以根本不会渲染出图片,只会显示类似<img src=xxx...>的文本(或表现为点击后跳转文件名)。

修正方法:直接输出原生的HTML标签就行,PHP的echo可以直接输出HTML内容:

echo "<img src='正确路径' height='200' width='200' alt='上传的图片'/>";

2. 修正图片的访问路径

你现在把图片存在了本地磁盘路径D:\zak/,但Web服务器(比如Apache、Nginx)没办法直接让浏览器访问本地磁盘的绝对路径,浏览器只能访问Web根目录(比如XAMPP的htdocs、WAMP的www)下的文件。

正确的上传路径设置

把上传目录放到Web根目录里,比如创建一个uploads文件夹,然后用$_SERVER['DOCUMENT_ROOT']来获取Web根目录的绝对路径,确保跨环境兼容:

// 设置Web可访问的上传目录
$target_path = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
// 先检查目录是否存在,不存在就创建
if (!file_exists($target_path)) {
    mkdir($target_path, 0755, true);
}

这样上传的文件会被放到htdocs/uploads/(或对应Web根目录)下,浏览器就能通过/uploads/文件名的路径访问到。

拼接正确的图片URL

在输出img标签时,要使用Web可访问的相对路径:

$img_url = '/uploads/' . $row['image'];
echo "<img src='$img_url' height='200' width='200' alt='上传的图片'/>";

完整修正后的代码

整合所有修正点后的代码(还修复了日期格式的小错误,原来的H:m:sa里m是月份,应该用i表示分钟):

<?php
// 创建数据库连接并选择库
$conn = mysqli_connect("localhost", "root", "", "upload_images");

if (isset($_POST["submit"])) {
    $file_name = $_FILES['fileToUpload']['name'];
    $file_tmp = $_FILES['fileToUpload']['tmp_name'];
    $file_size = $_FILES['fileToUpload']['size'];
    $file_error = $_FILES['fileToUpload']['error'];
    $datetime = date("Y-m-d H:i:s"); // 修正日期格式

    // 设置Web可访问的上传目录
    $target_path = $_SERVER['DOCUMENT_ROOT'] . '/uploads/';
    // 确保目录存在
    if (!file_exists($target_path)) {
        mkdir($target_path, 0755, true);
    }

    if (move_uploaded_file($file_tmp, $target_path . $file_name)) {
        echo "文件上传成功<br>";
    } else {
        echo "文件上传失败<br>";
    }

    // 注意:这里建议用预处理语句防止SQL注入,下面是修正后的写法
    $stmt = mysqli_prepare($conn, "INSERT into image_upload (image, created) VALUES (?, ?)");
    mysqli_stmt_bind_param($stmt, "ss", $file_name, $datetime);
    
    if (mysqli_stmt_execute($stmt)) {
        echo "图片信息已成功存入数据库<br>";
    } else {
        echo "存入数据库失败,请重试..<br>";
    }
    mysqli_stmt_close($stmt);

    $sql1 = "SELECT image FROM image_upload order by Id desc limit 1";
    $result = mysqli_query($conn, $sql1);
    
    if (!$result) {
        echo "查询错误: " . mysqli_error($conn) . "<br>";
    } else {
        echo "已获取最新上传的图片<br>";
    }

    while ($row = mysqli_fetch_assoc($result)) {
        $img_url = '/uploads/' . $row['image'];
        echo "<img src='$img_url' height='200' width='200' alt='上传的图片'/>";
    }
}
?>

额外重要提醒:SQL注入风险

你原来的代码直接把用户上传的文件名拼接到SQL语句里,存在严重的SQL注入风险,上面的修正代码已经改用了mysqli的预处理语句,这是更安全的写法,一定要注意。

内容的提问来源于stack exchange,提问作者Hameed Basha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:06:52