Php 为上载的图像创建唯一的名称
我有一个特定的图像上传代码。我在互联网上找到了这个,也没有对代码进行解释。从代码中我可以理解的是,php上传某个文件使其成为临时文件,然后将临时文件移动到原始位置 代码看起来像这样Php 为上载的图像创建唯一的名称,php,Php,我有一个特定的图像上传代码。我在互联网上找到了这个,也没有对代码进行解释。从代码中我可以理解的是,php上传某个文件使其成为临时文件,然后将临时文件移动到原始位置 代码看起来像这样 $filename = $_FILES["img"]["tmp_name"]; list($width, $height) = getimagesize( $filename ); move_uploaded_file($filename, $imagePath . $
$filename = $_FILES["img"]["tmp_name"];
list($width, $height) = getimagesize( $filename );
move_uploaded_file($filename, $imagePath . $_FILES["img"]["name"]);
现在发生的情况是,当我尝试在使用move\u uploaded\u file
移动图像时为图像提供唯一名称时,文件夹中确实出现了一个文件,但它表示一个无效文件,扩展名类型为file
。
我的代码用于尝试实现相同的目标,但上载的图像具有唯一的名称/id
$uniquesavename=time().uniqid(rand());
$filename = $_FILES["img"]["tmp_name"];
list($width, $height) = getimagesize( $filename );
move_uploaded_file($filename, $imagePath . $uniquesavename);
如何实现与以前相同的功能,请您也解释一下前面的代码好吗?示例代码:
// Get file path from post data by using $_FILES
$filename = $_FILES["img"]["tmp_name"];
// Make sure that it's a valid image which can get width and height
list($width, $height) = getimagesize( $filename );
// Call php function move_uploaded_file to move uploaded file
move_uploaded_file($filename, $imagePath . $_FILES["img"]["name"]);
请试试这个:
// Make sure this imagePath is end with slash
$imagePath = '/root/path/to/image/folder/';
$uniquesavename=time().uniqid(rand());
$destFile = $imagePath . $uniquesavename . '.jpg';
$filename = $_FILES["img"]["tmp_name"];
list($width, $height) = getimagesize( $filename );
move_uploaded_file($filename, $destFile);
编辑1:
要以两种方式获取图像类型:
- 从上载文件名获取文件类型
- 使用php函数如下
$strtotime = strtotime("now");
$filename = $strtotime.'_'.$_FILES['file']['name'];
您需要为获取唯一名称添加扩展解决方案是将时间戳添加到name@Mihai谢谢。这很有效。你能解释一下代码吗?@stig js whaaaaaaaaaaaaaaat?@stig js没有
time()
也是这样做的?如果原始文件不是jpg怎么办?取而代之的是原始文件的扩展名。@Mihai yeah可以使用类似这样的方法获得扩展名:$temp=explode(“.”,$u FILES[“img”][“name”]);$extension=end($temp)
@BobGao更新的答案不只是使用.jpg
,而是更一般的答案。我会认为它是正确的。这对其他操作会有帮助。如果你愿意,可以使用我的函数。@itzmukeshy7是的,你可以从这个链接看一看,uniqid返回一个唯一的标识符,我们附加时间戳,因此,生成两个相同ID的概率非常低。我们不确定您所说的,因此生成两个相同ID的概率非常低两个ID可能是相同的;不,当这个方法在一个涉及大量用户的大型网站上使用时,可能会显示相同的名称,因为在某个时间许多用户可能正在上传图像,最终会使用相同的名称,因为时间戳是相同的。所以说时间戳总是唯一的,是错误的。哈哈,阅读整个代码,4位随机数,u可以增加到6或任何数字,然后一个else on失败,并带有新的时间戳
$name = $_FILES['file']['name'];
$tmp_name = $_FILES['file']['tmp_name'];
$location = "uploads/";
$new_name = $location.time()."-".rand(1000, 9999)."-".$name;
if (move_uploaded_file($tmp_name, $new_name)){
echo "uploaded";
}
else{
sleep(rand(1,5));
$new_name = $location.time()."-".rand(1000, 9999)."-".$name;
if (move_uploaded_file($tmp_name, $new_name)){
echo "uploaded";
}
else{
echo"failed, better luck next time";
}
}
$strtotime = strtotime("now");
$filename = $strtotime.'_'.$_FILES['file']['name'];