Unlink и разрешение запрещено в php - PullRequest
2 голосов
/ 17 апреля 2011

Я пытаюсь удалить файл. Я знаю, в чем проблема, я просто не знаю, как правильно установить разрешения.

Моя текущая настройка - Ubuntu 10.10 Netbeans и загрузка по FTP на мой сервер разработки.

Это шаги, которые я сделал, чтобы получить Apache2 и VSTPD

  1. настроить vsftpd для umask 0027 (/etc/vsftpd.conf) [local_umask = 0027]
  2. создать группу www-users (groupadd www-users)
  3. добавить linux_server_user в группу (usermod -a -G group linux_server_user)
  4. Установить apache для запуска в качестве группы www-пользователей (httpd.conf)
  5. chgrp www-users / var / www
  6. chmod 2775 / var / www

Полагаю, мне нужно дать разрешение apache для записи поверх файлов, которые я загружаю с FTP. Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2011

Давайте посмотрим ваш режим доступа:

2775
 ^^^
 ||'- read/exec by everyone in different groups
 |'-- read/write/exec by group only
 '--- read/write/exec by user only

Этот последний флаг должен быть не менее 6 (чтение / запись другими группами).

Тем не менее, существуют угловые случаи, когда это абсолютно невозможно (chmod, unlink и т. Д. Все терпят неудачу).

Именно по этой причине крупные новые системы (например, WordPress и Joomla) предлагают вносить изменения в файлы (программно) через FTP.

Это делается путем предоставления DSN для отмены связи:

unlink('ftp://user:pass@host/absolute/path/to/file');

В некоторых случаях allow_url_fopen можно отключить, и в этом случае вам придется stream_wrapper_register() свой собственный класс FTP.

Я обнаружил, что FTP-функции PHP довольно проблематичны и, кажется, работают лучше всего, когда я использую CURL.

0 голосов
/ 17 апреля 2011

Возможно, вам придется проверить своего пользователя ftp и посмотреть, есть ли у него разрешение на удаление файлов, некоторым пользователям предоставляются только разрешения только на чтение. Если вы пытаетесь unlink() через PHP, то вам может потребоваться CHMOD для файла до 777, прежде чем это можно будет сделать.

...