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

Php 使用存储在数据库中描述的文件系统的图像库,php,mysql,Php,Mysql,好的,所以我正在尝试为客户创建一个图库,并希望它能够方便地为他们更新。 我有上传下来并工作,让他们上传一个图像,它存储在一个名为“img”的文件夹中。此外,当他们上传图像时,他们必须输入我当前存储在数据库表中的图像的标题和描述 数据库的组织方式如下: ID(AI) | Name | Description | Image | Date(timestamp) 图像字段是图像名称和扩展名,例如: $image = $_FILES["file"]["name"]; 并保存在数据

好的,所以我正在尝试为客户创建一个图库,并希望它能够方便地为他们更新。 我有上传下来并工作,让他们上传一个图像,它存储在一个名为“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 />';
}
$dirname=“img/”;
$images=glob($dirname.*.jpg”);
foreach($images作为$image){
回声“
”; }

我一直在谷歌和这里搜索,似乎什么也找不到。。任何帮助都将不胜感激,谢谢:)

最佳做法是将您自己的文件名分配给实际的磁盘文件,例如,使用数据库中的记录ID,这样您就可以得到
1.jpg
2,jpg
,等等。。。。这可以防止许多问题,如文件名冲突、包含路径信息的恶意文件名、带有“顽皮”字样的文件名等。。。任何绕过gallery系统直接访问图像文件的人只会看到“1.jpg”,而不会看到最初上传的“really_asthy_sword_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");
}
http://example.com/image.php?id=42

最佳做法是将您自己的文件名分配给实际的磁盘文件,例如使用数据库中的记录ID,这样您就可以得到
1.jpg
2,jpg
,等等。。。。这可以防止许多问题,如文件名冲突、包含路径信息的恶意文件名、带有“顽皮”字样的文件名等。。。任何绕过gallery系统直接访问图像文件的人只会看到“1.jpg”,而不会看到最初上传的“really_asthy_sword_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");
}
http://example.com/image.php?id=42

最佳做法是将您自己的文件名分配给实际的磁盘文件,例如使用数据库中的记录ID,这样您就可以得到
1.jpg
2,jpg
,等等。。。。这可以防止许多问题,如文件名冲突、包含路径信息的恶意文件名、带有“顽皮”字样的文件名等。。。任何绕过gallery系统直接访问图像文件的人只会看到“1.jpg”,而不会看到最初上传的“really_asthy_sword_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");
}
http://example.com/image.php?id=42

最佳做法是将您自己的文件名分配给实际的磁盘文件,例如使用数据库中的记录ID,这样您就可以得到
1.jpg
2,jpg
,等等。。。。这可以防止许多问题,如文件名冲突、包含路径信息的恶意文件名、带有“顽皮”字样的文件名等。。。任何绕过gallery系统直接访问图像文件的人只会看到“1.jpg”,而不会看到最初上传的“really_asthy_sword_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");
}
http://example.com/image.php?id=42

如果将图像信息存储在DB中,为什么要在目录中查找图像?只需从数据库中获取所有记录并对其进行迭代。我建议您使用另一种方法。请记住,我不知道您的代码,但是最好从数据库中获取文件名,甚至路径并读取文件(仅在必要时)。这样,如果有黑客进入ftp并上传奇怪的东西,这将有助于你不要把自己放得太多。好吧,你们说只需在整个表中添加一个循环,当涉及到图像时,可以放一些类似或类似的东西??是的,我建议Noelll,它更安全,更有意义。如果您将图像信息存储在数据库中,为什么要在您的目录中查找图像?只需从数据库中获取所有记录并对其进行迭代。我建议您使用另一种方法。请记住,我不知道您的代码,但是最好从数据库中获取文件名,甚至路径并读取文件(仅在必要时)。这样,如果有黑客进入ftp并上传奇怪的东西,这将有助于你不要把自己放得太多。好吧,你们说只需在整个表中添加一个循环,当涉及到图像时,可以放一些类似或类似的东西??是的,我建议Noelll,它更安全,更有意义。如果您将图像信息存储在数据库中,为什么要在您的目录中查找图像?只需从数据库中获取所有记录并对其进行迭代。我建议您使用另一种方法。请记住,我不知道您的代码,但是最好从数据库中获取文件名,甚至路径并读取文件(仅在必要时)。这样,如果有黑客进入ftp并上传奇怪的东西,这将有助于你不要把自己放得太多。好吧,你们说只需在整个表中添加一个循环,当涉及到图像时,放一些类似或类似的东西??是的,我建议Noelll,这样更安全,更有意义。