Я уверен, что ответ на этот вопрос довольно прост и может не быть специфичным для PHP, но я пытаюсь использовать функцию PHP copy () для копирования изображения от одного пользователя к другому в рамках настраиваемой настройки CMS.
Например:
copy('/home/user1/public_html/images/image.png', '/home/user2/public_html/images/image.png');
Что возвращает обычный:
[function.copy]: failed to open stream: Permission denied
Я пробовал:
-CHMOD user2 папку "images" на 777 (просто для тестирования, не сработало)
-Создайте новую системную группу, поместите в нее обоих пользователей и CHGRP папку с идентификатором этой группы. Также попытался поместить пользователей «apache» и «никто» в одну группу, но безрезультатно.
open_basedir не включен / не настроен (не уверен, имеет ли это значение), а PHP не в безопасном режиме. Обработчик PHP5 - suPHP, suEXEC - включен. Запуск WHM 11.3 на CentOS 5.6 VPS. Я уверен, что решение не такое уж сложное, но я обыскал все вокруг и не нашел ответа. Спасибо!
Хороший способ устранить подобные проблемы с разрешениями - это sudo -u apache (или любой другой apache, под которым работает) и попытаться скопировать файл самостоятельно:
sudo -u apache cp -a /home/user1/public_html/images/image.png /home/user1/public_html/images/image.png
Это работает?
Сценарии PHP обычно запускаются от имени пользователя веб-сервера. Убедитесь, что у пользователя веб-сервера есть разрешение на читать исходный файл и записывать в целевой каталог.
Кроме того, если вы используете Linux, убедитесь, что ваши настройки SELinux не препятствуют тому, чтобы веб-сервер возился за пределами корневого веб-сервера (см. первая добавленная пользователем заметка о copy()
страница руководства по функциям).
Также обратите внимание, что в общем случае это плохой идея - Причина, по которой настройки SELinux настолько анальны, что не позволяют веб-серверу работать вне корневого веб-сервера, заключается в том, что он содержит ущерб, если в вашем PHP-скрипте есть ошибка.
Плохие вещи ™ могут случиться, если веб-сервер может читать / записывать в случайные места файловой системы. Если ваш PHP-код написан и не защищен должным образом, эти Плохие Вещи ™ могут включать компрометацию сервера и значительную потерю времени / дохода.
(Другими словами, будь абсолютно уверен вам нужно сделать это, прежде чем вы это сделаете :-)