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

时间:2014-01-03 14:52:11

标签: php mysql

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

数据库的组织方式如下:

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

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

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

并保存在数据库中。

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

最佳做法是将您的OWN文件名分配给实际的磁盘文件,例如:使用数据库中的记录ID,因此最终得到1.jpg2,jpg等....这可以防止许多问题,如文件名冲突,包含路径信息的恶意文件名,以及“淘气”的文件名“等等......任何绕过你的画廊系统直接访问图像文件的人只能看到”1.jpg“,而不是最初上传的”really_nasty_swear_words.jpg“。

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

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");
}

请注意,此代码并非完全安全,只是用作示例。