我知道这个话题被广泛讨论。我已经完成了我的研究,并决定将图像文件存储到服务器而不是数据库作为blob文件。我遇到的问题是试图找出上传文件的最佳方法,将其存储在指定的文件夹中,然后将目的地存储在db..say ../ img / something.jpg中 - 我试过翻阅许多资源,但大多数资源缺少一些重要的步骤。
问题:
我正在使用PHP和MySQL。
答案 0 :(得分:1)
不知道你的所有观点,但你真正需要关注的是
检查文件扩展名。
从文件名中提取并与允许的文件进行比较
由于一些奇怪的Apache行为,检查文件名只有一个点,或者至少它没有像name.html.jpg
这样的名称也是一件好事。
检查文件内容。最好的方法是从上传的图像中创建一个全新的图像。
在使用DB时采取常规预防措施。
答案 1 :(得分:0)
在这里,您将了解您想要做的基本想法:
<?php
$allowedTypes = array("image/jpg", "image/jpeg", "image/png");
$maxSize = 3 * 1024 * 1024; // 3Mb
$fileType = $_FILES["file"]["type"];
$fileSize = $_FILES["file"]["size"];
// check if there was an error
if ($_FILES["file"]["error"] > 0)
{
die($_FILES["file"]["error"]);
}
// check if the filetype is valid
if (!in_array($fileType, $allowedTypes))
{
die("Invalid file type: $fileType");
}
// check if the size doesn't exceed the limitations
if ($fileSize > $maxSize)
{
die("The file was too big: $fileSize");
}
$name = $_FILES["file"]["name"];
$tmpfile = $_FILES["file"]["tmp_name"];
// check if the filename is valid
if (preg_match("/[\w-]+\.(jpg|jpeg|png)$/", $name) != 1)
{
die("Invalid file name: $name");
}
// create unique name if needed
$path = "/var/www/images/" . $name;
move_uploaded_file($tmpfile, $path);
// add the filepath to mysql
mysql_connect("localhost", "username", "password");
mysql_select_db("imagedb");
mysql_query("INSERT INTO images (Location, Size) VALUES ('$path', '$size');");
?>
这是为了说明如何做到这一点。
答案 2 :(得分:-2)