2013-04-17 72 views
1

我目前想要使用w3schools图片上传代码,直到找到我编码的图片为止。总之:在上传过程中重命名图片

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$extension = end(explode(".", $_FILES["file"]["name"])); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/png")) 
&& ($_FILES["file"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) 
{ 
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("upload/" . $_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } 
else 
    { 
    move_uploaded_file($_FILES["file"]["tmp_name"], 
    "upload/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
    } 
} 
} 
else 
{ 
echo "Invalid file"; 
} 
?> 

基本上我希望发生的是,当用户上传它重命名的文件名$用户名,而不是原来的名字等等都将是被username.png什么,而不是我目前拥有的文件username-38474.png

任何帮助?

+0

曾听说过W3Fools?你的(他们的)代码可以通过发送虚假的'mime-type'很容易被黑客入侵。请注意这一点。 –

+0

@TomášZato这就是为什么我只使用它,直到我可以再次找到我的代码,无法打扰重新编码:P – Laim

+0

@TomášZato是的,它可以是假的,但它不是危险的:文件扩展名是检查并且apache通过扩展注册它的处理程序。 – bwoebi

回答

8
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 

这行代码的图像基本上重命名为一个新的位置:到"upload/".$_FILES["file"]["name"],所以通过更换这行:

move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$username.".".$extension); 
+0

非常感谢:D – Laim

0

所以只是不同的参数传递给move_uploaded_file

$extension = explode("/", $_FILES["file"]["type"]); //Use proper mime type here, $_FILES contents can be faked by remote user 
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $username.".".$extension[1]); 
+0

我不认为你可以在这里伪造扩展名,因为它已经针对数组进行了检查。 – bwoebi

+0

我的警告更多的是关于实际检查。如果简单地说,我会说他必须首先知道它**是正确的mime类型。 –