当我上传具有相同名称的图像时,它会替换我之前的误区。我想给他编号(增加那个数字)1_name.png,2_name.png。这是我的代码:
if(isset($_POST['submit_im'])) {
$name = $_FILES['file']['name'];
$tmp_name = $_FILES['file']['tmp_name'];
$location = 'uploads/';
$target = 'uploads/'.$name;
if(file_exists('uploads/'.$name)) {
$i = 1;
while(file_exists('uploads/'.$i."_".$name)) {
$i++;
}
$name = $i."_".$name;
}
if(move_uploaded_file($tmp_name,$location.$name)) {
$title = $_POST['title'];
$query = "INSERT INTO obrazky(img,title) VALUES ('".$target."','$title')";
$result = mysqli_query($connection, $query);
} else {
感谢您的帮助:)
答案 0 :(得分:2)
您可以更简单地做到这一点,只需计算目录中的文件数量并将其增加1。
$cntFiles = count(array_diff( scandir("/uploads"), array(".", "..") ));
$cntFiles++; // Increase by 1 for the next number
$name = $cntFiles."_".$name;
我们执行array_diff()
删除来自文件系统的.
和..
条目,但不代表该目录中的文件。
此外,您的代码中存在一些问题
$target = 'uploads/'.$name;
if(file_exists('uploads/'.$name)) {
$i = 1;
while(file_exists('uploads/'.$i."_".$name)) {/*...*/}
首先,您要检查2个不同的文件名。此时不太可能使用该名称,因为您正在检查文件上传的名称。
其次,您已使用文件名定义了一个变量,但您没有使用它。
$target = 'uploads/'.$name;
if(file_exists($target)) {/*...*/}
此外,您的代码容易受到SQL Injection的影响,但链接问题已涵盖这一点。