Не могу сохранить изображение

211
01 декабря 2018, 04:50

Работаю с yii2-advanced, пытаюсь сохранить изображение.

move_uploaded_file(uploads/31082018.png): failed to open stream: Permission denied

экшн контроллера:

public function actionCreate()
{
    $model = new Categories();
    if ($model->load(Yii::$app->request->post())) {
        $model->image = UploadedFile::getInstance($model, 'image');
        $model->upload($model->image);
        if ($model->save()){
            return $this->redirect(['view', 'id' => $model->id]);
        }
    }
    return $this->render('create', [
        'model' => $model,
    ]);
}

upload

public function upload($image)
{
    $newName = date("dmY");
    if($this->validate()){
        $image->saveAs("uploads/{$newName}.{$image->extension}");
        $this->imageName = "uploads/$newName.$image->extension";
    }
    else return false;
}

что делать? раньше, когда делал так же, на винде, все работало.

Answer 1

Это связано с тем, что изображения и tmp_file_upload доступны только для пользователей root. Для загрузки на работу нам необходимо сделать владельца этих папок таким же, как владелец процесса httpd, или сделать их доступными для всего мира (плохая практика).

Проверьте владельца процесса apache: $ ps aux | grep httpd. Первый столбец будет владельцем, как правило, никого не будет Измените владельца изображений и tmp_file_upload, чтобы стать никем или кем-либо владельцем, которого вы нашли на шаге 1.

 $ sudo chown nobody / var / www / html / mysite / images /
$ sudo chown nobody / var / www / html / mysite / tmp_file_upload /

Изображения Chmod и tmp_file_upload теперь будут доступны для записи владельцем, если это необходимо [По-видимому, у вас уже есть это место].

$ sudo chmod -R 0755 / var / www / html / mysite / images /
$ sudo chmod -R 0755 / var / www / html / mysite / tmp_file_upload /

Для получения дополнительной информации о том, почему это происходит, проверьте руководство http://php.net/manual/en/ini.core.php#ini.upload-tmp-dir, обратите внимание, что он также говорит об директиве open_basedir.

Answer 2

Мое решение состояло в том, чтобы предоставить разрешение на папку изображений и файл php, перейдя в file > Right click > Get info >, а затем измените все разрешения на чтение и запись в качестве следующего изображения.

READ ALSO
Несколько таблиц MySQL одним запросом SQL

Несколько таблиц MySQL одним запросом SQL

Друзья подскажите как можно одним запросом SQL создать несколько таблицБез использование PHP ООП

379
Данные формы не отправляются в БД

Данные формы не отправляются в БД

Данные из формы не отправляются в MySQL датабазуВот код:

216
Вставить ролик с ютуба в mp3 плеер

Вставить ролик с ютуба в mp3 плеер

На входе ролик - https://wwwyoutube

204
Не работает функция отправки отзыва

Не работает функция отправки отзыва

Данные в базу не отправляются,поля не подсвечиваютсяС бд все нормально,если добавить отзыв напрямую через нее,то все выводится

284