Почему не сохраняются картинки на сервере хостинкга

На локальном сервере все работает, но когда перенес сайт на хостинг, при загрузке картинок выдает ошибку: PHP Warning – yii\base\ErrorException unlink(img/product_img/): Is a directory

Я не могу понять, что не так, подскажите пожалуйста((

Модель:

    <?php
namespace app\models;

use Yii;
use yii\base\Model;
use app\models\Products;

/**
 *Класс загрузки картинок 
 */
class ProductImageUpload extends Model
{
    
    public $img_arr;

    public function rules()
    {
        return [
            [['img_arr'], 'required'],
            [['img_arr'], 'default', 'value' => 'default_img.jpg'],
            [['img_arr'], 'file', 'extensions' => 'png, jpg', 'maxFiles' => 8],
        ];
    }
    
    public function uploadFiles($files, $curImagesStr)
    {
        $curImages = explode(',', $curImagesStr);//получаем из строки массив с именами существующих картинок.
        
        if($curImages !== '')
        {
            foreach ($curImages as $img)//удаляем существующие картинки
            {
                if(file_exists($this->getFolder() . $img))//Проверка на существование файлов
                {
                    unlink($this->getFolder() . $img);//Удаляем файлы
                }
            }
        }
        
        $fileName_arr = array();//Объявляем массив с именами картинок. Он пока пуст.
        foreach ($files as $file) //Прогоняем через форич каждый элемент массива с картинками.
        {
            $fileName = strtolower(md5(uniqid($file->baseName))) . '.' . $file->extension; //Создаем уникальное имя для картинки
            $file->saveAs($this->getFolder() . $fileName); //Сохраняем файл на сервер.
            $fileName_arr[] = $fileName; //Добваляем новое имя файла в массив с именами файлов
        }
        $fileName_str = implode(',', $fileName_arr); //Превращаем массив с именами файлов в стрку.

        return $fileName_str; //Возвращаем строку с именами файлов.
    }
    
    private function getFolder()
    {
        return Yii::getAlias('@web') . 'img/product_img/';
    }
}

Контроллер:

public function actionSetImage($id) //Если используем КамелКейс, то в html пишем название через дифис
    {
        $model = new ProductImageUpload;
        
        if(Yii::$app->request->isPost)
        {
            $product = $this->findModel($id);
            $files = UploadedFile::getInstances($model, 'img_arr');
            
            $product->saveImagesDB($model->uploadFiles($files, $product->img_arr));
            
            return $this->redirect(['view', 'id' => $product->id]);
        }
        
        return $this->render('images', ['model' => $model]);
    }

Ответы (1 шт):

Автор решения: delikates

Сам текст ошибки PHP Warning – yii\base\ErrorException unlink(img/product_img/): Is a directory говорит Вам о том, что Вы пытаетесь удалить папку вместо файла.

Ошибка явно вот в этом куске кода:

foreach ($curImages as $img)//удаляем существующие картинки
{
    if(file_exists($this->getFolder() . $img))//Проверка на существование файлов
    {
        unlink($this->getFolder() . $img);//Удаляем файлы
    }
}

Решение 1 (грубое) - добавить перед unlink символ @ - это "погасит" вывод ошибок о попытке удалить папку.

Решение 2 - проверять, что же именно Вы удаляете - файл или папку

foreach ($curImages as $img)//удаляем существующие картинки
{
    if( !is_null( $img ) && trim( $img ) != '' && $img != '..' && $img != '.' && !( realpath( $this->getFolder() . $img ) !== false AND is_dir( realpath( $this->getFolder() . $img ) ) ))
    {
        unlink($this->getFolder() . $img);//Удаляем файлы
    }
}

→ Ссылка