Начну сразу по сути. У меня Os X Yosemite. Включил встроенный Apache и разблокировал встроенный же PHP.
При выполнении скриптов, работающих с файлами на компьютере, выскакивает ошибка доступа. Она благополучно лечится, если в папке, с которой работаю, указать права на чтение и запись (если второй требуется).
Скрипт запускаю из браузера Mozilla последней версии (хотя в Safari тоже самое).
Опытным путем было замечено, что скрипт запускается от имени Любых Пользователей. (собственно их права и переназначаю)
Отсюда суть вопроса. Как мне запускать php скрипт от имени меня, пользователя данной системы, у которого по умолчанию стоят права на чтение и запись, чтобы вручную не приходилось постоянно менять права доступа Любых Пользователей, от чьего имени запускается скрипт?
И почему он запускается от имени Любых Пользователей, ведь я его в системе запускаю через браузер вручную? (наверняка, это связано с политикой безопасности, но я пока не проникся всеми нюансами, если не сложно, кратко расскажите)
На данный момент есть решение, просто в нужных мне папках вручную прописать права доступа, но это не верно, ведь есть пользователь в системе, Я, под которым свободно все файлы меняю. Мне кажется логичным под ним производить все изменения.
Заранее спасибо за ответы и теплого Вам солнца.
UPD - раскрытое решение для не посвященных
Мне сложно было применить все то, что ниже описали, так как я видимо еще совсем нуб.
Оба решения были верные, я выбрал запуск сервера Apache от имени пользователя
Для этого я в конфигурации php посмотрел под каким именем пользователя запускается мой сервер Apache (создаем файл php c функцией phpinfo() и открываем его в браузере, в таблице Configuration ищем колонку User/Group, в ней прописано имя пользователя, в моем случае это был _www)
Далее заходим в файл /etc/apache2/httpd.conf и ищем там ваше имя пользователя. У меня это была строка 181 User _www
строка 182 Group _www
Значение _www изменил на свое имя пользователя, сохранил и перезагрузил Apache.
Все, теперь он работает с правами read/write
ВНИМАНИЕ 1 - пишите имя пользователя без лишних знаков, так, как оно есть, моя первая ошибка была, прописать _имяпользователя. Разумеется сервер даже не запустился. Убрав подчеркивание, все получилось.
ВНИМАНИЕ 2 - осознавайте, что вы делаете. Дело в том, что ниже правильно написали, данные права, в моем случае администратора, дают вам запись и чтение почти всех файлов на компьютере, и если вас взломают, то злоумышленник получит почти полный доступ к компьютеру. У меня локальный сервер, и мне это нужно, плюс после конца работы, я выключаю Apache. Однако, безопасность Unix систем в первую очередь гарантируется жестким разграничением чего можно, а чего нельзя. Не стоит лишний раз нарушать это правило.
Браузер к серверу не имеет никакого отношения, запрос принимает Apache. Посмотрите в конфиге Apache (предположительно файл envvars) параметры APACHE_RUN_USER и APACHE_RUN_GROUP.
Указывать там root категорически не рекомендую, так как скачанная тема WP с вирусом сможет форматнуть вам систему или ещё чего поинтересней.
Файлы вы копируете от имени своего пользователя - то есть права изначально стоят вашего пользователя. Вообще-то можете поставить в конфиге своего пользователя, но вновь таки, у скрипта будет доступ к вашей домашней папке и созданным вами файлам, так что думать что запускать всё равно нужно.
Если кратко, то сейчас я разрабатываю скрипт, который будет в автоматическом режиме выдергивать ссылки из определенных сообщений. Потом, разумеется, я размещу уже готовую версию на внешней машине. Мен жутко не удобно каждый раз копировать пришедшие письма в другую папку, менять у них права и запускать скрипт. Решил сразу делать поиск в каталоге mail.
Столкнулся с тем, что там есть доступ только у меня, пользователя. И скрипт, разумеется, выдает ошибку доступа. В данном случае вижу только такое решение "проблемы". Ибо в противном случае скрипт просто не работает. Попробую ваше решение, заранее спасибо.
Ваша задача аналогичная той, что решают разработчики сайтов на PHP, меняя файлы по ftp/sftp. И здесь есть два пути:
Позволить всем пользователям записывать в папки и файлы сайта
Работать под тем пользователем, что и PHP/Apache
Как выяснить под каким пользователем работает PHP у вас зависит от конфигурации. Где нужно смотреть конфиги Apache, где php-fpm. Обычно, если об Apache разговор, PHP работает по тем же пользователем, что и Apache (но есть разные способы, типа http-itk, это изменить).
Промежуточный варианта здесь - работать от имени той же группы, что и PHP. Тогда на запись нужно давать доступ не всем подряд, а только владельцу и группе.
Ваша ситуация отличается от типовой тем, что у Вас хостинг расположен на той же машине, что и средства разработки. Но сути это не меняет. Решение тоже самое.
Я понимаю что это не самая умная затея, но вопрос, как так вести разработку скриптов для работы с файлами? Вот мне на почту приходят письма (в стандартный mail клиент). В этих письма есть ссылка, которую мне нужно выдернуть, и скрипт ее выдергивает. Но для этого ему нужно прочитать файл. А стандартные права у пришедших писем это без доступа всем, либо на запись и чтение только мне(пользователю).
Чтобы скрипт в автоматическом режиме брал письма из папки входящие, мне нужно что у него был доступ, В противном случае мне приходится копировать эти письма оттуда, куда нибудь, и для их чтения, все равно приходится давать права на чтение папке LIbrary/mail/... /42-565754-3452-456/.../data и каждой папке и письму в папке дата...
Зачем действия выше, если проще дать скрипту права на чтение, или прям права моего пользователя, если у меня апач работает, только когда я запускаю этот скрипт, и этот скрипт запускается только мной в ручном режиме?