Невозможно сохранить файл из-за прав доступа к файлу

Я пытаюсь загрузить и сохранить файл изображения. Раньше это работало нормально, но теперь возвращает ошибку.

Предупреждение: move_uploaded_file(//home/bitnami/htdocs/lookgram/photos/1/22.jpeg): не удалось открыть поток: Отказано в доступе к /opt/bitnami/apache2/htdocs/ lookgram/build/classes/Photo.php в строке 138

Предупреждение: move_uploaded_file(): невозможно переместить '/tmp /phpAyWyw4' в '//home/bitnami/htdocs/lookgram/photos/1/22.jpeg' в /opt/bitnami/apache2/htdocs/lookgram/build/classes/Photo.php на строка 138

Это похоже на ошибку прав доступа к файлу, поэтому вот права доступа к папке:

drwxrwxr-x 6 bitnami bitnami 4096 Mar 15 01:02 photos

Любые идеи?


person Don P    schedule 15.03.2013    source источник
comment
Когда вы ищете значения прав, у вас есть drwxrwxr-x. Так что для вас (битнами) rwx, для группы rwx а для остальных просто r-x. Таким образом, пользователь, не входящий в группу, может просто читать и выполнять, ничего не записывая. Я предполагаю, что пользователь, используемый вашим PHP, не входит в группу.   -  person MatRt    schedule 15.03.2013
comment
Если PHP просто выполняется моим веб-сервером, кто является «пользователем»?   -  person Don P    schedule 15.03.2013
comment
Попробуйте это: <?php echo exec('whoami'); ?> в своем сценарии скажите нам, кто это   -  person MatRt    schedule 15.03.2013
comment
Он возвращает демон. В какого пользователя попадут демоны?   -  person Don P    schedule 15.03.2013
comment
Проверьте, что входит в группу битнами (вы) с groups bitnami. Затем вы можете добавить своего пользователя-демона в свою группу useradd -G group_name daemons. Затем вы сможете сделать свой файл move_file. Вы также можете решить изменить группу каталога с помощью chgrp.   -  person MatRt    schedule 15.03.2013


Ответы (1)


Это связано с тем, что photos/1/ доступен для записи только пользователю root. Чтобы загрузка работала, нам нужно сделать владельца этой папки таким же, как владелец процесса httpd ИЛИ сделать их глобально доступными для записи (плохая практика).

  1. Проверьте владельца процесса apache: $ps aux | grep httpd. Первый столбец будет владельцем, обычно это будет nobody

  2. Измените владельца photos/1/ на nobody или любого другого владельца, которого вы нашли на шаге 1.

    $sudo chown nobody /home/bitnami/htdocs/lookgram/photos/1/

  3. Chmod photo/1/ теперь доступен для записи владельцем, если это необходимо [Кажется, у вас уже есть это на месте].

    $ sudo chmod -R 0755 /home/bitnami/htdocs/lookgram/photos/1/

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

person Sumit Bijvani    schedule 15.03.2013
comment
Это потрясающе, спасибо, Сумит. Я использую «демон». Поэтому я внесу эти изменения для этого пользователя. - person Don P; 15.03.2013