1

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

这是我定义名称的脚本:

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

3 回答 3

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";

我编写的原始脚本是在具有旧 PHP 版本的旧服务器上使用的。

但是,copy()仍然会工作。

于 2013-06-10T03:31:29.477 回答
0

我做这样的事情:

我只是在文件名的开头添加一些随机字符串

$new=generate_name(10);
$name=$new.$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 文件。

于 2013-06-10T03:28:20.633 回答
0

您不仅不必在上传文件时使用提供的名称,而且您不应该这样做 - 就像任何用户输入一样,它是不受信任的并且可能被用作安全漏洞。

因此,您需要做的就是生成一个随机图像名称,并确保它不是您已经使用过的图像名称(例如,通过检查file_exists()并使用do ... while循环来不断生成随机名称,直到它返回 false)。然后将其用作 的参数move_uploaded_file(),这是用于将文件放入最终位置的正确函数。

如果您不太在意长度和格式,uniqid()这是生成文件名的好方法,因为它是基于当前时间的,因此不太可能产生冲突。

于 2013-06-10T03:55:29.897 回答