图像链接更改为已存在的图像


Image links change to an image that exists

这是我遇到的一个非常奇怪的问题。

这种情况发生在那些似乎有一个类似于其他东西的名字的图像上
例如,如果我有一个名为image0001.png的图像,并且我试图显示一个源为image0010.png的图像,但该图像不存在,那么该图像不会显示为空,也不会显示为错误图像,而是显示为确实存在的image0001.png

我不知道如何解决这个问题,因为我真的不知道发生了什么。

我使用以下代码从数据库中获取结果,并生成一个包含项目详细信息的表。

<?php while ($row = $retval->fetch_array()) { ?>
    <tr>
        <td>
            <a href="/path/to/item/<?= $row['id']; ?>.php"><?= $row['id']; ?></a>
        </td>
        <td>{$row['name']}</td>
        <td>
            <a href="/path/to/item/<?= $row['id']; ?>.php">
                <img src="/images/<?= $row['id']; ?>.jpg" onerror="this.src='/images/error.png';">
            </a>
        </td>
        <td><?= $row['description']; ?></td>
    </tr>
<?php } ?>

听起来你的服务器上启用了mod_speling。

对文档的请求有时无法由核心apache服务器提供,因为请求拼写错误或大写错误。此模块通过尝试查找匹配的文档来解决此问题,即使在所有其他模块都放弃之后也是如此。

文档

您可以尝试在.htaccess文件中禁用此apache模块:

CheckSpelling Off

显而易见的另一种选择是使用file_exists,消除对JavaScript的依赖,并确保在存在图像的情况下显示图像,如果不存在则显示错误图像。

<?php while ($row = $retval->fetch_array()) { ?>
    <tr>
        <td>
            <a href='/path/to/item/<?= $row['id']; ?>.php'><?= $row['id']; ?></a>
        </td>
        <td>{$row['name']}</td>
        <td>
            <a href='/path/to/item/<?= $row['id']; ?>.php'>
                <?php if (file_exists("/images/{$row['id']}.jpg")) { ?>
                    <img src="/images/<?= $row['id']; ?>.jpg" />
                <?php } else { ?>
                    <img src="/images/error.png" />
                <?php } ?>
            </a>
        </td>
        <td><?= $row['description']; ?></td>
    </tr>
<?php } ?>