在PHP中更改上传的图像名称

时间:2017-02-07 16:25:26

标签: php

当我上传具有相同名称的图像时,它会替换我之前的误区。我想给他编号(增加那个数字)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 {

感谢您的帮助:)

1 个答案:

答案 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的影响,但链接问题已涵盖这一点。