我正在使用以下脚本。它基本上检查被上传文件的名称是否已经存在,如果它应该将其重命名为其他内容并上传它。到目前为止,它不起作用。要么重命名所有文件,要么当我尝试通过网页打开文件说它损坏的文件。如果名称已经存在,如何重命名文件?
代码:
$sql="SELECT filename FROM doc_u WHERE person_id= '$pid'";
$result=mysql_query($sql);
$query = mysql_query($sql) or die ("Error: ".mysql_error());
if ($result == "")
{
echo "";
}
echo "";
$rows = mysql_num_rows($result);
if($rows == 0)
{
print("");
}
elseif($rows > 0)
{
while($row = mysql_fetch_array($query))
{
$existing = $row['filename'];
print("");
}
}
if ($filename === $existing) {
$filename = $uniqueidgenerator.strrchr($_FILES['filename']['name'], ".");
} else {
$filename = $_FILES['filename']['name'];;
}
//After checking it will move the files
if(move_uploaded_file($_FILES['filename']['tmp_name'],$upload_path . $filename))
echo '';
else
echo '';
这是如此重要。如果你让别人上传somejpeg.php到你的服务器,它可以验证为JPEG格式,但它本身仍然有恶意代码。有人可以使用这种方法基本上接管你的服务器。 – dqhendricks
好,所以你要说取文件名并存储在数据库中,然后重命名正在上传的文件。当你把它提供给用户时,它将拥有我们给它的唯一文件名。但并不是那么糟糕,用户无法通过他们上传的名称获取文件... – KPO
当然,您只需通过PHP提供文件并输出'header('Content-disposition:attachment; filename = ORIGINAL_FILENAME_HERE') ;'并且用户永远不会在服务器上看到它真的被称为'207'。 –