Почему не сохраняются картинки на сервере хостинкга
На локальном сервере все работает, но когда перенес сайт на хостинг, при загрузке картинок выдает ошибку: 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);//Удаляем файлы
}
}