function.fopen: не удалось открыть поток: в PHP отказано в разрешении - PullRequest
5 голосов
/ 10 марта 2011

Я пытаюсь создать карты сайта XML для моего сайта из моего приложения PHP.Идея состоит в том, чтобы либо создать новый файл, либо перезаписать существующий файл.Когда я вызываю fopen, я получаю следующую ошибку:

[function.fopen]: failed to open stream: Permission denied

Я пытаюсь выполнить запись в webroot, и его разрешения: 755. Это означает, что владелец имеет разрешение на запись, верно?Что мне нужно сделать, чтобы мой скрипт мог писать в эту папку?777 было бы плохо, верно?Могу ли я как-нибудь запустить свой скрипт как владелец?

Спасибо.

Ответы [ 7 ]

5 голосов
/ 15 сентября 2011

Я новичок, и у меня тоже была эта проблема.Я использую Ubuntu linux с php и apache

  • . Пишем скрипт php со следующим: <?php exec('whoami'); ?> и запускаем его на вашем сервере.Это говорит вам, кто является текущим пользователем скрипта
  • SSH к вашему серверу.
  • Создайте группу, которая имеет права на чтение и запись нужных вам файлов.
  • MakeГруппа прочитала, записала и выполнила нужные папки.
  • Сделайте текущего пользователя, которого вы нашли на первом шаге, частью группы, которая имеет доступ к нужным файлам.
  • Перезапустите Apache: sudo apachectl restart

основные команды, которые вам нужны:

  • groupadd: создать новую группу
  • usermod: добавить пользователя в новую группу
  • chgrp: изменяет файлы / папки на указанную вами группу
  • chmod: изменяет права доступа к указанным вами файлам / папкам.Все необходимые вам команды находятся здесь: http://www.yolinux.com/TUTORIALS/LinuxTutorialManagingGroups.html
5 голосов
/ 10 марта 2011

Да, как вы сказали, использование 777 может быть огромной ошибкой.Веб-сервер не запускается с тем же пользователем, которым вы пользуетесь для создания файлов и папок.

У вас есть несколько вариантов:

  • Запустить создание карты сайта как cronjob, используя пользователяс правами на запись, кроме пользователя apache.
  • Поместите карту сайта в другой каталог и установите 302 Redirect или символическую ссылку.В этом случае, если у вас есть проблемы с безопасностью, которые позволят кому-то написать ваши sitemap.xml, по крайней мере, они не смогут создать другой файл с более опасными расширениями (например, PHP, который может привести к вторжению на сайт).
  • Создайте правило перезаписи для перенаправления любого попадания в sitemap.xml, в скрипт php, который выводит соответствующий XML.

Удачи!

1 голос
/ 29 августа 2014

была такая же проблема

Похоже, что Apache работает как nobody в группе nobody

так что если вы делаете

useradd -G nobody youruser

chown -R youruser:nobody .

Затем измените разрешение на 0775

chmod -R 0775 .

или вы не можете добавлять никого в свою группу пользователей

useradd -G nobody yourgroup

это будет лучшее решение

1 голос
/ 09 июня 2011

Если у вас включен ACL на разделе webroot, просто предоставьте полному пользователю имя пользователя веб-сервера

setfacl -m u:apache:rwx /var/www/html

Замените apache на имя пользователя веб-сервера, а /var/www/html - на местоположение вашего рута.

0 голосов
/ 16 июня 2015

Как сказал Паскаль!просто найдите своего пользователя Apache

<?php exec'whoami'; ?>

, а затем

useradd -G username username2
chown -R username:username2 .
chmod -R 0775 .

И все готово!Спасибо Паскаль!

0 голосов
/ 11 марта 2011

Работает ли он с включенной групповой записью (т.е. 775)? Проверьте права доступа вашей группы к каталогу, в котором находится файл. Пока ваш пользователь PHP (обычно www-data) является частью этой группы и является единственным пользователем, у вас должно получиться 775 (или даже 774).

0 голосов
/ 10 марта 2011

777 вполне нормально, потому что PHP работает не как вы, а как пользователь PHP, Apache и т. Д. Дело в том, что ваш веб-хост должен иметь более высокий набор разрешений, который не позволяет другим пользователям писать / удалять ваши файлы .

...