我目前有:
$file_name = $HTTP_POST_FILES['uid']['name'];
$random_digit=rand(0000,9999);
$new_file_name=$random_digit.$file_name;
$path= "uploads/images/users/".$new_file_name;
if($ufile !=none)
{
if(copy($HTTP_POST_FILES['uid']['tmp_name'], $path))
{
echo "Successful<BR/>";
echo "File Name :".$new_file_name."<BR/>";
echo "File Size :".$HTTP_POST_FILES['uid']['size']."<BR/>";
echo "File Type :".$HTTP_POST_FILES['uid']['type']."<BR/>";
}
else
{
echo "Error";
}
}
这会在当前文件名之前生成一个随机数,即 4593example.jpg 但我只想将整个文件名重写为 4593.jpg 删除 ucrrent 名称(示例)。当我尝试这样做时,我丢失了扩展名 (.jpg) 任何帮助表示赞赏。
最佳答案
如果您只处理图像,我会考虑使用 getimagesize()
检测图像的类型并根据那个给新文件一个扩展名。
这样,您就不必依赖从用户那里获得的扩展名(这可能是错误的)。
像这样:
$extensions = array(
IMAGETYPE_JPG => "jpg",
IMAGETYPE_GIF => "gif",
IMAGETYPE_PNG => "png",
IMAGETYPE_JPEG2000 => "jpg",
/* ...... several more at http://php.net/manual/en/image.constants.php
I'm too lazy to type them up */
);
$info = getimagesize($_FILES['uid']['tmp_name']);
$type = $info[2];
$extension = $extensions[$type];
if (!$extension) die ("Unknown file type");
move_uploaded_file($_FILES['uid']['tmp_name'], $path.".".$extension);
` 还有:
正如@alex 所说,您的方法存在相当大的随机名称冲突风险。您应该添加一个
file_exists()
检查以防止这些(例如,一个循环创建一个新的随机数,直到发现一个不存在的随机数)HTTP_POST_FILES
已弃用,请改用$_FILES
我强烈建议您使用
move_uploaded_file()
而不是容易受到攻击的copy()
。
关于PHP 图片上传 - 重命名而不丢失扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5141032/