如何更改正在上传到我的服务器的图像的名称?

时间:2013-06-10 03:15:21

标签: php

当有人将图像上传到我的服务器时,它会将其上传为他们在计算机上的图像名称。我希望图像名称成为一个短号码作为名称而不是名称,因为当有人上传图像作为同一名称时,它会覆盖它。

这是我的脚本,其中定义了名称:

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 = '';

3 个答案:

答案 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()是生成文件名的好方法,因为它基于当前时间,因此不太可能产生冲突。