Назад | Перейти на главную страницу

Копирование файла от одного пользователя к другому с помощью PHP

Я уверен, что ответ на этот вопрос довольно прост и может не быть специфичным для 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-код написан и не защищен должным образом, эти Плохие Вещи ™ могут включать компрометацию сервера и значительную потерю времени / дохода.
(Другими словами, будь абсолютно уверен вам нужно сделать это, прежде чем вы это сделаете :-)