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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Kazzi
Сообщения: 63
Зарегистрирован: 2020.05.05, 19:23

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

Сообщение Kazzi »

На локальном сервере все работает, но когда перенес сайт на хостинг, при загрузке картинок выдает ошибку: 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]);
    }
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

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

Сообщение skynin »

Код: Выделить всё

if(!empty($curImages)) // используйте empty везде, если вам надо проверить на "есть что-то полезное, или нет"
        {
            foreach ($curImages as $img) //удаляем существующие картинки
            {
                if(empty($img)) continue; // $img может быть пустым
                
                if(file_exists($this->getFolder() . $img))

и думаю вопрос не связан с Yii третьей версии
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Ответить