我正在开发一个允许用户登录并在网站上上传一些图片的项目,我正在使用 php5. 我在这里有一个问题,如果 2 个不同的用户将 2 个具有相同名称的图像上传到日期库怎么办。我知道我必须在它们到达数据库后立即重命名它们,我想我可以使用当前时间值来做到这一点,但我确实知道实际代码。如果有人可以帮助我,我真的很合适
问问题
258 次
3 回答
1
最好将图像名称发送到数据库,而不是像这样使用日期库的最后一个 id 重命名图像
//////connect////////////////
include_once ("connect_to_mysql.php");
$file = $_FILES['image']['tmp_name'];
$albumid = $_POST['album_id'];
$maxfilesize = 8000000;
if($_FILES['image']['size'] > $maxfilesize ) {
echo "<br /><br />Your image was too large. Must be 8Mb or less, please<br /><br />
<a href=\"Profilepic.php\">click here</a> to try again";
unlink($_FILES['uploadedfile']['tmp_name']);
exit();
} if (!isset($file))
echo "Please select an Image.";
else
{
// Check file size, if too large exit and tell them why
$image_name = addslashes($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);
$album_id = $_POST['album_id'];
$id = mysql_insert_id();
if ($image_size==FALSE)
echo "That's Not an Image.";
else
{
if (!$insert = mysql_query("INSERT INTO image
VALUES('','$userid','$image_name')"))
echo "Problem Uploading Image Try Again Please";
else{
$id = mysql_insert_id();
//////////take the last inserted id and use as image name/////////
$file = "uploads/$userid/".$id."";
move_uploaded_file($_FILES['image']['tmp_name'], $file);
于 2013-03-14T01:58:34.563 回答
1
tmpfile() 将在临时目录中为您提供唯一的文件句柄 - 或 - tempnam() 将在临时目录中为您提供唯一的文件名
使用其中任何一个创建一个唯一的文件以供上传保存,然后您可以根据需要重命名它们。
于 2013-03-14T01:48:45.573 回答
0
由于您只需要一个概念来制作文件而不会产生任何冲突,因此我建议您使用以下选项。
选项 1:根据需要重命名 将当前用户 ID 放入变量中。
$tempName = $userID . "_" . strtotime(date('Y-m-d H:i:s')) . "_" . mt_rand();
选项 2:单独的位置如果您想保持相同的文件名用户上传。然后将文件存储在每个用户的单独目录中。
你可以使用这样的东西。
$dirPath = "path to the user's directory";
if(!file_exists($dirPath))
mkdir($dirPath,0777);
当您上传 apache 将在临时位置生成文件,因此不会重复。
于 2013-03-14T01:57:39.350 回答