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

Php 如何更改正在上载到服务器的图像的名称?,php,Php,当有人将图像上载到我的服务器时,它会以他们在计算机上的图像名称进行上载。我希望图像名称成为一个短数字作为名称而不是名称,因为当有人以相同的名称上载图像时,它会覆盖它 以下是我的脚本,其中定义了名称: if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) { $uploadpath = $uploadpath . basename( $_FILES['fileup']['name'])

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

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

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

我是这样做的:

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

$new=generate_name(10);
$name=$new.$name;
函数generate_name()

并生成此名称:

03f396a35902-06-2013.csv
从02-06-2013.csv文件。

我做了如下操作:

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

$new=generate_name(10);
$name=$new.$name;
函数generate_name()

并生成此名称:

03f396a35902-06-2013.csv 来自02-06-2013.csv文件。

这是我几年前编写的一段(工作)代码,至今仍在使用

您可能需要修改它以适应脚本以及脚本中的位置和路径

但是,我确实用您的
文件名替换了我自己的原始名称(
photo

此外,还有一些其他的好东西在那里,你可能会使用,在未来的某个地方

$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()
仍能工作。

这是我几年前写的一段(工作)代码,至今仍在使用

您可能需要修改它以适应脚本以及脚本中的位置和路径

但是,我确实用您的
文件名替换了我自己的原始名称(
photo

此外,还有一些其他的好东西在那里,你可能会使用,在未来的某个地方

$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()
仍然有效。

上传文件时不仅不需要使用提供的名称,而且不应该这样做-与任何用户输入一样,它是不可信的,可能会被用作安全漏洞

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


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

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

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



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

只使用不同的名称保存文件有什么问题?有很多方法,这取决于您希望使用的命名约定。即:添加新词、随机数、日期和时间。这个列表还在继续。我只希望它是一个随机数。你可以生成一个由几个字符组成的随机字符串,就像imgur和Youtube(视频id)所做的那样。是的,这就是我要问的。我该怎么做?用不同的名称保存它有什么错?有很多方法,这取决于您希望使用哪种命名约定。即:添加新词、随机数、日期和时间。这个列表还在继续。我只希望它是一个随机数。你可以生成一个由几个字符组成的随机字符串,就像imgur和Youtube(视频id)所做的那样。是的,这就是我要问的。我该怎么做呢?我没有说你的答案有什么不好,这是一个好答案,但是
eregi\u replace
已经被弃用,并被
preg\u replace
取代
eregi_replace
可能不会在所有服务器上运行,具体取决于PHP版本。只是说;-)附言:你也可以使用
str\u replace
。这是我几年前写的一些代码,我不更新它。。。tnx:)所以现在我要偷走你的答案:砰!欢迎您使用它,我希望它能很好地为您服务,干杯;-)我没有说你的答案有什么不好,这是一个好答案,但是
eregi\u replace
已经被弃用,并被
preg\u replace
取代
eregi_replace
可能不会在所有服务器上运行,具体取决于PHP版本。只是说;-)附言:你也可以使用
str\u replace
。这是我几年前写的一些代码,我不更新它。。。tnx:)所以现在我要偷走你的答案:砰!欢迎您使用它,我希望它能很好地为您服务,干杯;-)您应该使用not
copy()
将文件放入其最终位置。此代码也不考虑您希望允许使用哪种类型的名称,因此可能会使用精心编制的输入留下安全漏洞。@IMSoP有效是的,谢谢。我会用这个编辑我的答案。我最初的剧本是为了考虑其他因素而写的。Cheers@IMSoP我只是回答了OP最初的问题。问题中没有提到接受哪种文件类型。但是,我同意你说的。你应该使用not
copy()
将文件放入最终位置。这段代码也没有考虑您希望允许使用什么类型的名称,因此可能会使用精心编制的i