我使用以下脚本。它基本上检查上传文件的名称是否已经存在,如果是,它应该将其重命名为其他内容并上传。到目前为止,它不起作用。要么重命名所有文件,要么当我尝试通过网页打开文件时,它会显示损坏的文件。
代码:
$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 '';
答案 0 :(得分:2)
鉴于您已经在使用数据库,请让我尽可能地说明:永远不要使用用户提供的FILENAME。相反,将每个上载的文件存储在其相应的DB记录的主键ID号中(您使用自动递增的整数表示ID,对吧?)。将文件的名称存储在数据库中,现在您可以拥有任意数量的“text.txt”文件,因为每个实际文件都将命名为“1”,“53”和“207”等... < / p>
答案 1 :(得分:1)
这里没有太多代码可供使用。我怀疑$filename
未正确初始化。所以在你的if ( $filename === $existing )
中真正说if(undefined === undefined)
总是如此。
我不明白为什么文件会被破坏。这可能完全是一个不同的问题。
另外,请注意那里的sql语句。这是一个等待发生的SQL注入。如果您使用预准备语句或至少使用mysql_escape_string
,那将会好得多。当然,这已被弃用,有利于准备好的陈述。
更好的工作流程是首先使用文件的元数据在数据库中插入一行,然后使用您返回的主键重命名该文件。它保证永远是唯一的。