如何将图像存储到文件系统(在Internet上)并将路径存储到数据库?

时间:2013-09-30 18:52:11

标签: php mysql database filesystems

我们正在尝试为壁纸创建一个网站,以便以某种方式显示大文件(2mb-5mb),因此我们需要将图像存储在磁盘空间而不是数据库中,而只存储到数据库的路径。所以,如果你能提供一些关于如何做到这一点的想法(我们现在知道的方法是创建一个带有上传功能的PHP脚本,并通过手动选择要上传的PC中的图像),除非你们有其他建议。教程将非常感谢。非常感谢!

这是为管理员添加不是为用户添加图像。 注意:我们还没有开发任何脚本,所以这是为了从你们那里得到一些关于我们可以使用它的想法,如果没有人猜测我们会使用php脚本。

2 个答案:

答案 0 :(得分:6)

对于上传的每个文件,生成一个UUID并将其用于磁盘上的文件名。这可以避免冲突,清理文件名和路径遍历漏洞。

您将拥有这样的表:(id, description, filename),其值为(1, "Green field", "0D729DCD-5116-4480-81CE-90A0380B557A.png")

接下来,您要避免在一个文件夹中包含太多文件的问题 - 您将遇到许多FS的文件系统限制。

要解决此问题,请根据文件名的前几个字母创建目录。对于0D729DCD-5116-4480-81CE-90A0380B557A.png,您可以将其存储在/0/D/7/0D729DCD-5116-4480-81CE-90A0380B557A.png

答案 1 :(得分:6)

您的表单

<form action="PHP_FILE_PATH.php" method="post" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="submit" name="submit" value="Upload" />
</form>

PHP部分

<?php
if($_FILES['image']['name'])
{
  $save_path="FOLDER_PATH_TO_SAVE_UPLOADED_IMAGE"; // Folder where you wanna move the file.
  $myname = strtolower($_FILES['image']['tmp_name']); //You are renaming the file here
  move_uploaded_file($_FILES['image']['tmp_name'], $save_path.$myname); // Move the uploaded file to the desired folder
}

$inser_into_db="INSERT INTO `database`.`table` (`folder_name`, `file_name`) VALUES('$save_path', '$myname'))";

?>