我目前有:
$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() http://www.php.net/manual/en/function.getimagesize.php并据此给新文件一个扩展名。
这样,您就不必依赖从用户那里获得的扩展名(这可能是错误的)。
Like so:
$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);
`
Also:
正如@alex所说,你的方法有相当大的随机名称冲突的风险。你应该添加一个file_exists()
检查以防止出现这些情况(例如,创建一个新的随机数的循环,直到发现尚不存在的随机数)
HTTP_POST_FILES
已弃用,请使用$_FILES
instead
我强烈建议你使用move_uploaded_file() http://php.net/move_uploaded_file代替copy()
容易受到攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)