我有一些图像上传的代码。我在互联网上找到了这个,也没有对代码的解释。我从代码中可以理解的是,php上传某个文件使其成为临时文件,然后移动临时文件到原始位置
代码看起来像这样
$filename = $_FILES["img"]["tmp_name"];
list($width, $height) = getimagesize( $filename );
move_uploaded_file($filename, $imagePath . $_FILES["img"]["name"]);
现在发生的事情是,当我尝试使用move_uploaded_file
移动图像时为图像提供唯一的名称,然后文件确实出现在文件夹内,但是它表示文件无效并且带有扩展名类型file
。
我的代码尝试实现相同但上传图像的唯一名称/ ID。
$uniquesavename=time().uniqid(rand());
$filename = $_FILES["img"]["tmp_name"];
list($width, $height) = getimagesize( $filename );
move_uploaded_file($filename, $imagePath . $uniquesavename);
如何实现与以前相同的功能,请您解释一下以前的代码?
答案 0 :(得分:4)
示例代码:
// 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: 要以两种方式获取图像类型:
// Get details of image
list($width, $height, $typeCode) = getimagesize($filename);
$imageType = ($typeCode == 1 ? "gif" : ($typeCode == 2 ? "jpeg" : ($typeCode == 3 ? "png" : FALSE)));
答案 1 :(得分:2)
$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";
}
}
这里,location是目录内的文件夹,我主要创建文件夹“uploads” time()添加时间戳,它始终是唯一的,直到两个人同时上传,这很少见。
此外,为其添加4位数随机数,使组合最稀有
之后添加实际文件名,使组合成为唯一。
为什么我使用它:
让我们说,我们如此独特的组合无论如何都会失败, 然后,无论生成随机数,php实例都会等待1到5秒。并使用最新的时间戳和重新生成的随机数重命名。
这是你能想到的最好的,而不是资源匮乏。
答案 2 :(得分:1)
你可以使用
$strtotime = strtotime("now");
$filename = $strtotime.'_'.$_FILES['file']['name'];