Операции с файловой системой не работают из моего PHP-скрипта; мне нужно что-то chmod?

У меня проблемы с правами доступа к mkdir в PHP. Я пытаюсь просто переместить некоторые файлы (и создать папку для их размещения), но получаю эту ошибку:

mkdir() [function.mkdir]: Permission denied in

На моем старом сайте мои папки были установлены на 755, и все, казалось, работало нормально. Кажется единственный раз, когда я могу заставить mkdir или связанные с ним функции работать на этом сервере, это когда папки имеют 777 в качестве режима.

Является ли веб-браузер «Другим»? Я не думаю, что оставлять свои папки на 777 — отличная идея, верно?


person johnnietheblack    schedule 21.01.2010    source источник
comment
хорошее редактирование, Джим... не знал, как правильно это выразить :)   -  person johnnietheblack    schedule 22.01.2010


Ответы (4)


Если вам нужно создать на сервере папки, в которые вы затем сможете писать из веб-браузера, вам может потребоваться использовать как минимум 775. Обратите внимание, что это не обязательно относится к созданию файлов. На самом деле, вы, вероятно, вообще не хотите, чтобы ваши файлы были 777.

Вы также можете использовать команды bash в php-коде, если вы не хотите, чтобы ваш сервер (также известный как www-data) создавал каталоги, но вам все равно нужно установить правильные разрешения для папок, чтобы разрешить www-data затем писать файлы в каталоги.

Проверьте свои права собственности. Вышеприведенное основано на том, что папка принадлежит некоторому пользователю и группе, принадлежащей www-data. Вы также можете попытаться установить для папки право собственности на www-data, но разрешение по-прежнему будет rwx для этого конкретного пользователя.

Надеюсь, это не слишком запутанно.

Команды, которые могут помочь вам узнать, кто запускает apache на вашем сервере:

#top

ищите что-то вроде:

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                          
20610 www-data  20   0 36772  10m 4380 S    4  0.1   0:04.03 apache2 

or

#ps aux | grep "apache"

искать что-то вроде

www-data 26898  0.0  0.0  34248  4076 ?        S    17:59   0:00 /usr/sbin/apache2 -k start
person Patrick    schedule 21.01.2010
comment
патрик... www-data обычный пользователь? я еще не видел. на данный момент пользователь, которому принадлежит файл, является моим пользователем plesk... johnnie - person johnnietheblack; 22.01.2010
comment
... и ... я буду позволять людям загружать фотографии и т. д. на сайт, поэтому веб-сервер должен разрешить браузеру добавлять / редактировать / и т. д. - person johnnietheblack; 22.01.2010
comment
www-data является обычным пользователем в Ubuntu и подобных системах. Вы также можете распознать его как http или apache. Я не знаю, сколько у вас доступа к вашему серверу, но вы можете попробовать пару вещей, чтобы узнать, чей работает apache. попробуйте запустить top в командной строке, а затем запросить веб-страницу на вашем сервере. Вы, вероятно, увидите строку, быстро переходящую вверх, которая помечена как команда: apache. Вы также можете проверить файл /etc/group, чтобы получить представление о пользователях системы. Еще одна вещь, которую вы можете попробовать в командной строке, это ps aux | грэп апач. - person Patrick; 22.01.2010

Веб-браузер — это не объект, рассматриваемый как «другие», а скорее пользователь, от имени которого запускается веб-сервер, например httpd или apache.

Обычный метод состоит в том, чтобы разделить файлы, чтобы установить пользователя и / или группу для пользователя веб-сервера, тем самым разрешив такие разрешения, как 755.

Пример:

chown apache:apache ./example/

person tanerkay    schedule 21.01.2010
comment
Возможно ли что-то подобное на общем хосте, когда вы загружаете папку через FTP-клиент и хотите, чтобы PHP писал в нее? Если да, то как определить, что такое пользователь/группа сервера? PS: я знаю о suPHP и тому подобном, но, боюсь, не все общие хосты предлагают это. - person Decent Dabbler; 22.01.2010
comment
хорошо...@enbuy...скажем, веб-сервер работает под моим пользователем Plesk johnnie. когда я проверяю разрешения и т. д., он говорит: пользователь - johnnie, группа - psacln. разве это не должно означать, что браузер должен быть крутым? ...кстати, спасибо за ваше время - person johnnietheblack; 22.01.2010
comment
@johnnietheblack: я опоздал :), кажется, теперь все готово - person tanerkay; 26.01.2010

Это может быть применимо или не применимо, в зависимости от ОС, на которой вы используете веб-сервер, у вас могут быть другие механизмы безопасности, которые мешают тому, что вы пытаетесь сделать. Одним из ярких примеров (который какое-то время приводил меня в замешательство) является система безопасности SELinux. Попробуйте проверить, можете ли вы писать в /tmp. Если вы не можете искать другие проблемы. Как правило, удаление разрешений 777 может привести к дырам в безопасности.

person Bill    schedule 21.01.2010

вы уверены, что проблема не во владении папкой?

возможно, chown - правильная команда для решения этой проблемы

person Eric    schedule 21.01.2010
comment
Эрик, хороший вопрос... я указал папку своему пользователю plesk и группе psacln... должно ли это работать? - person johnnietheblack; 22.01.2010
comment
Я не уверен, какую роль должен играть ваш пользователь plesk, но просто помните, что именно веб-сервер запускает команду mkdir, а не браузер конечного пользователя. Если вы используете apache, я думаю, что apache создает пользователя с этим именем - person Eric; 22.01.2010
comment
хороший момент, я проверю это ... так что, возможно, пользователь действительно должен быть apache. - person johnnietheblack; 22.01.2010