我从w3schools获得了这个代码,并根据这个代码进行了调整:Rename an uploaded file with PHP but keep the extension
请帮助,我该怎么办,以便文件扩展名不是.tmp 当我将其上传到服务器上的文件夹时。
<?php
$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 100000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("../img/user_uploaded/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($filename,
"../img/user_uploaded/" . $newfilename);
echo "Stored in: " . "../img/user_uploaded/" .$newfilename;
}
}
}
else
{
echo "Invalid file, File must be less than 100Kb in size with .jpg, .jpeg, or .gif file extension";
}
?>
答案 0 :(得分:7)
$filename=$_FILES["file"]["tmp_name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;
在上面的代码中,您试图获取临时文件的扩展名。相反,您可以使用用户上传的原始文件名的扩展名。
$filename=$_FILES["file"]["name"];
$extension=end(explode(".", $filename));
$newfilename=$prod .".".$extension;
这将使用实际的文件扩展名上传您的文件。
答案 1 :(得分:4)
尝试使用这个库进行图像处理......可能是offtopic,但对处理图像非常有用。
WideImage:http://wideimage.sourceforge.net/
例如:
include('path to WideImage.php');
$filename = $_FILES["file"]["name"];
$ext = strtolower(substr(strrchr($filename, '.'), 1)); //Get extension
$image_name = $name . '.' . $ext; //New image name
$image = WideImage::load($_FILES['file']['tmp_name']); //Get image
$image->saveToFile('path/to/image/' . $image_name); //Save image
答案 2 :(得分:1)
rename('path/to/file/file.ext', 'path/to/file/newname.ext');
此功能是复制和取消链接的连接。
答案 3 :(得分:1)
此部分会重命名该文件。
move_uploaded_file($ filename,“.. / img / user_uploaded /”。$ newfilename);
所以问题是如何设置$ newfilename的值。 如果你有一个方法来产生这个,那么问题就解决了。
答案 4 :(得分:1)
我不同意@ Alexander.Plutov的回答。 您不必保存文件,然后将其复制,然后取消链接。
由于您在代码中指定了目标文件名:
move_uploaded_file($filename, "../img/user_uploaded/" . $newfilename);
echo "Stored in: " . "../img/user_uploaded/" .$newfilename;
您只需指定另一个名称而不是$newfilename
。如果你的目标是用其他东西替换.tmp扩展名,你可以删除最后四个字符(总是.tmp,由PHP设置),然后添加你自己的扩展名。
如果您只想保留用户提供的扩展名,请使用:
$friendlyName = $_FILES["file"]["name"];
$extension = substr($friendlyName, strrpos($friendlyName, '.') + 1);
当然,您必须意识到使用用户发布的内容的风险。如果根本没有扩展,或者它太长,或者它与真实文件类型不匹配(deadly-virus.exe重命名为pretty-image.jpg)会怎么样?
答案 5 :(得分:1)
您可以使用 rand()函数创建随机文件名的小例子。
$min_rand=rand(0,1000);
$max_rand=rand(100000000000,10000000000000000);
$name_file=rand($min_rand,$max_rand);//this part is for creating random name for image
$ext=end(explode(".", $_FILES["file"]["name"]));//gets extension
move_uploaded_file($_FILES["file"]["tmp_name"],"/new folder/" . $name_file.".".$ext);//actually reponsible for copying file in new folder
$filenameimage="../upload_image/" . $name_file.".".$ext;
$actualimageurl="../upload_image/" . $_FILES["file"]["name"];
答案 6 :(得分:0)
您可以将日期时间添加到上传目录的目录中。示例:
$date = date("Y-m-d H:i:s");
../img/user_uploaded/$date
但最后不要/
,因为它改变了目录
答案 7 :(得分:0)
最佳方式使用 pathinfo()
$filename=$_FILES["file"]["name"];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$image_name = $yours_new_name.'.'.$ext;
答案 8 :(得分:-1)
未初始化的变量$ prod!这是一个重大的安全漏洞。在使用之前始终初始化变量。