почему при переименовании файла добавляется слово "products"

Рейтинг: -1Ответов: 1Опубликовано: 02.06.2023

PHP 8.0. при загрузке нового изображения в режиме администратора, файл должен переименовываться под id продукта, но добавляется слово "products", в переменную $item передается значение Id товара, в данном случае 16, по при переименовании файла, файл не добавляется в папку, а сохраняется рядом с ней и меняет название на products16.jpg, хотя должен менять на 16.jpg

AdminController.php
function uploadAction(){
    $maxSize = 5 *  2048 * 2048;
    
    $itemId = $_POST['itemId'];

    //получаем расширение загружаемого файла
    $ext = pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);

    //создаем имя файла
    $newFileName = $itemId.'.'.$ext;
    
    if($_FILES["filename"]["size"] > $maxSize){
        echo ('Размер файла превышает пять мегабайт');
        return;
    }
    
    //Загружен ли файл
    if(is_uploaded_file($_FILES['filename']['tmp_name'])){  
        
        //если файл загружен то перемещаем его из временной директории в конечную 
        $res = move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/images/products' . $newFileName);
        if($res){
            $res = updateProductImage($itemId, $newFileName);
            if($res){
                redirect('/admin/products/');
            }
        }        
    } else{
        
        echo ("Ошибка загрузки файла");
    }
}

ProductsModel.php
function updateProduct($itemId, $itemName, $itemPrice, 
                        $itemStatus, $itemDesc, $itemCat, $newFileName = null)
{
    global $db;
    
    $set = array();
    
    if($itemName){
        $set[] = "`name` = '{$itemName}'";
    }
    
    if($itemPrice > 0){
        $set[] = "`price` = '{$itemPrice}'";
    }
    if($itemStatus !== null){
        $set[] = "`status` = '{$itemStatus}'";
    }
    if($itemDesc){
        $set[] = "`description` = '{$itemDesc}'";
    }
    if($itemCat){
        $set[] = "`category_id` = '{$itemCat}'";
    }
    if($newFileName){
        $set[] = "`image` = '{$newFileName}'";
    }
    
    $setStr = implode(", ", $set);
    $sql = "UPDATE products
            SET {$setStr}
            WHERE id = '{$itemId}'";
     
    $rs = mysqli_query($db, $sql);
    d($itemId);
    return $rs;
}        

 

function updateProductImage($itemId, $newFileName)
{        
    $rs = updateProduct($itemId, null, null,
                                null, null, null, $newFileName);
    
    return $rs;
}

adminProducts.tpl

                <td>
                    {if $item['image']} {*выводит изображение*}
                        <img src='/images/products/{$item['image']}' width='100' />
                    {/if}
                    <form action='/admin/upload/' method='post' enctype='multipart/form-data'>
                        <input type="file" name="filename"><br>
                        <input type='hidden' name='itemId' value='{$item['id']}'>
                        <input type='submit' value='Загрузить'><br>
                    </form>    
                </td>    

Ответы

▲ 1Принят

У вас пропущен слэш после products в строке $res = move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/images/products' . $newFileName);

Должно быть так:

$res = move_uploaded_file($_FILES['filename']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/images/products/' . $newFileName);