首页 文章

图像库使用文件系统,描述存储在数据库中

提问于
浏览
0

好的,所以我正在尝试为客户创建一个库,并希望它更容易为他们更新 . 我有上传和工作,让他们上传图像,它存储在一个名为“img”的文件夹中 . 此外,当他们上传图像时,他们必须输入我当前存储在数据库中的表中的图像的 Headers 和描述 .

数据库的组织方式如下:

ID(AI)  |  Name  |  Description  |  Image  |  Date(timestamp)

图像字段是图像名称和扩展名,例如:

$image = $_FILES["file"]["name"];

并保存在DB中 .

如果那部分是不必要的或多余的我可以删除它我只是觉得它会让事情变得更容易?

所以现在我正在尝试从文件夹中检索图像并显示每个图像的相应名称和描述 . 最好的办法是什么?

现在我用以下方式显示所有图片:

$dirname = "img/";
$images = glob($dirname."*.jpg");
foreach($images as $image) {
echo '<img src="'.$image.'" width="200" height="200"/>
'; }

我一直在搜索谷歌和这里,似乎无法找到任何东西..任何帮助将不胜感激,谢谢:)

1 回答

  • 3

    最佳做法是将您的OWN文件名分配给实际的磁盘文件,例如:使用数据库中的记录ID,所以你最终得到 1.jpg2,jpg 等....这可以防止许多问题,如文件名冲突,包含路径信息的恶意文件名,带有"naughty"单词的文件名等等...任何人绕过你的直接访问图像文件的gallery系统只能看到"1.jpg",而不是原来上传的"really_nasty_swear_words.jpg" .

    另一方面,当实际提供这些图像时,您总是可以使用简单的PHP脚本作为中介,然后在那里包含原始文件名 . 例如

    http://example.com/image.php?id=42
    
    <?php
    if (user_can_access_image($_GET['id'])) {
        $filename = get_name_from_db($_GET['id']);
        header("Content-disposition: attachment; filename=$filename");
        readfile("/path/to/images/$_GET[id].jpg");
    } else {
        readfile("/path/to/unauthorized.jpg");
    }
    

    请注意,此代码不是完全安全的,并且就像用作示例一样 .

相关问题