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:)所以现在我要偷走你的答案:砰!欢迎您使用它,我希望它能很好地为您服务,干杯;-)您应该使用notcopy()
将文件放入其最终位置。此代码也不考虑您希望允许使用哪种类型的名称,因此可能会使用精心编制的输入留下安全漏洞。@IMSoP有效是的,谢谢。我会用这个编辑我的答案。我最初的剧本是为了考虑其他因素而写的。Cheers@IMSoP我只是回答了OP最初的问题。问题中没有提到接受哪种文件类型。但是,我同意你说的。你应该使用notcopy()
将文件放入最终位置。这段代码也没有考虑您希望允许使用什么类型的名称,因此可能会使用精心编制的i