我目前有:
$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删除不同的名称(例子)。当我尝试这样做时,我失去了扩展名(.jpg) 任何帮助表示赞赏。
答案 0 :(得分:4)
如果您只处理图像,我会考虑使用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
已弃用,请改用<{1}}
我强烈建议您使用move_uploaded_file()
代替易受攻击的$_FILES
。
答案 1 :(得分:3)
您可以使用以下代码获取原始扩展程序:
$extension = strrchr($HTTP_POST_FILES['uid']['tmp_name'], '.');
然后您可以将扩展名添加到变量$new_file_name
,如下所示:
$new_file_name = $random_digit . $file_name . '.' . $extension;
答案 2 :(得分:3)
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$newFilename = $random_digit . '.' . $ext;
顺便说一下,如果随机数发生冲突(可能发生在接下来或10年内)会发生什么?
有很多更好的方法来命名它们 - 例如,文件名的哈希值和time()
理论上应该永远不会发生冲突(尽管实际上会发生哈希冲突)。
答案 3 :(得分:1)
您可以使用此代码:
$file_name = $HTTP_POST_FILES['uid']['name']; $random_digit=rand(0000,9999);
$extension= end(explode(".", $HTTP_POST_FILES['uid']['name']));
$new_file_name=$random_digit.'.'.$extension; $path= "uploads/images/users/".$new_file_name; if($ufile !=none) { if(copy($HTTP_POST_FILES['uid']['tmp_name'], $path)) { echo "Successful
"; echo "File Name :".$new_file_name."
"; echo "File Size :".$HTTP_POST_FILES['uid']['size']."
"; echo "File Type :".$HTTP_POST_FILES['uid']['type']."
"; } else { echo "Error"; } }
享受!!!!!!!!!