Я осуществляю загрузку файлов в symfony2. Объект My File принадлежит пользователю и представляет загруженный файл. Загруженные файлы не должны быть доступны никому, кроме администраторов и владельцев. Для решения этой проблемы (кроме защиты контроллера) я сохраняю их в каталоге, который не находится в / web /. Я назвал этот каталог / private_files / (и находится в корне проекта).
Чтобы разрешить веб-серверу писать в этот каталог, я запустил это (я на Mac OS X Mavericks):
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" private_files/
$ sudo chmod +a "www allow delete,write,append,file_inherit,directory_inherit" private_files/
Загрузка работает нормально. Однако при попытке удалить файлы через контроллер, с
unlink($path)
Я получаю сообщение об ошибке «Предупреждение: отсоединить (путь / к / файлу): Отказано в доступе».
При перечислении файлов на терминале с ls -al
, Я получил
drwxr-xr-x+ 3 myuser staff 204 Mar 23 11:59 .
drwxr-xr-x 24 myuser staff 816 Mar 21 19:51 ..
-rw-r--r-- 1 _www wheel 7395585 Mar 23 11:59 uploaded_file_1
где я заметил, что загруженные файлы не имеют разрешения на выполнение и «+», который представляет ACL.
Как правильно разрешить удаление этих файлов методом unlink? Должны ли файлы наследовать списки ACL (и если да, то как)? Или следует применить chmod к каталогу? Большое спасибо.
Я думаю, это потому, что ваша папка не принадлежит пользователю apache, который обрабатывает php.
поскольку вы создали папку / private_files / с другим пользователем, а не с пользователем apache, для приложения / кеш создается программно, поэтому он владеет им и может создавать / удалять. я обновлю это как ответ
Других решений пока нет …