当有人将图像上传到我的服务器时,它会将其上传为他们在计算机上的图像名称。我希望图像名称成为一个短号码作为名称而不是名称,因为当有人上传图像作为同一名称时,它会覆盖它。
这是我的脚本,其中定义了名称:
if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) {
$uploadpath = $uploadpath . basename( $_FILES['fileup']['name']);
$sepext = explode('.', strtolower($_FILES['fileup']['name']));
$type = end($sepext);
list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']);
$err = '';
答案 0 :(得分:1)
这是我几年前写的一段(工作)代码,至今仍在使用。
您可能需要修改它以适应您的脚本以及脚本和路径中的位置。
但是,我确实用您的photo
名称替换了我自己的原始名称(fileup
)。
另外还有一些你可能会使用的好东西,在某个地方。
$file_name = $HTTP_POST_FILES['fileup']['name'][0];
// should there be spaces in the uploaded file, replace them with an underscore
$file_name = str_replace(" ","_",$file_name);
$random_digit = substr(number_format(time() * rand(),0,'',''),0,10);
$new_file_name=$random_digit._.$file_name;
$path1= "./uploads/".$new_file_name;
// you can also use (my original write):
// copy($HTTP_POST_FILES['fileup']['tmp_name'][0], $path1);
move_uploaded_file($HTTP_POST_FILES['fileup']['tmp_name'][0], $path1);
$path_to_file_web = "http://www.example.com/uploads/$new_file_name";
我编写的原始脚本用于旧版本的旧版本服务器上。
但是,copy()
仍然可以使用。
答案 1 :(得分:0)
我这样做:
我只是在文件名开头添加一些随机字符串
$new=generate_name(10);
$name=$new.$name;
函数generate_name();
function generate_name($long){
$cadena="[^A-Z0-9]";
return substr(eregi_replace($cadena, "", md5(rand())) .
eregi_replace($cadena, "", md5(rand())) .
eregi_replace($cadena, "", md5(rand())),
0, $long);
}
并生成此名称:
03f396a35902-06-2013.csv 从02-06-2013.csv文件。
答案 2 :(得分:0)
您不仅不必使用上传文件时提供的名称,不应该这样做 - 就像任何用户输入一样,它是不受信任的,可以用作安全漏洞。
所以你需要做的就是生成一个随机图像名称,并确保它不是你已经使用过的图像名称(例如,通过检查file_exists()
并使用do ... while
循环继续生成随机名称,直到返回false)。然后将其用作move_uploaded_file()
的参数,这是用于将文件放入最终位置的正确函数。
如果您不太关注长度和格式,uniqid()
是生成文件名的好方法,因为它基于当前时间,因此不太可能产生冲突。