Не могу получить правильные разрешения для mkdir () в PHP - PullRequest
4 голосов
/ 26 января 2012

У меня есть следующий простой скрипт для тестирования функции mkdir () в PHP:

<?php
  $id = rand();

  $targetPath = $_SERVER['DOCUMENT_ROOT'] . '/sample_folder/' . $id .'/';
  mkdir(str_replace('//','/',$targetPath), 0755, true);
?>

В идеале это создаст случайную папку каждый раз, когда скрипт запускается в моем веб-каталоге / sample_folder.Sample_folder имеет 755 разрешений.

Проблема, с которой я сталкиваюсь, заключается в том, что я продолжаю сталкиваться с PHP: mkdir () Проблемы с отказом в разрешении.В настоящее время мои права для sample_folder установлены на chmod 755.

ВСЕ Я прочитал состояния, не относящиеся к chmod на 777, поэтому, пожалуйста, не предлагайте его.

В целях тестированияchmod 777, каталог «sample_folder» решает проблему, но опять же это создает проблемы безопасности.Есть ли что-то еще, что мне не хватает, как заставить это работать?

Обратите внимание: мои пользователи PHP в системе - это "apache";

Я использую PHP 5.3. * И CentOS 5.5на выделенном виртуальном сервере Media Temple для справки.Я также просмотрел почти каждый вопрос chmod по SO и, похоже, не могу найти решение, соответствующее моей проблеме (за исключением 777 предложений).

edit

Запуск ls -la на моемсервер возвращает:

drwxr-xr-x 2 ftphiddenname psacln 4096 26 января 11:24 sample_folder

окончательное обновление

Ответы были очень полезны,Для тех, кто ищет дополнительную информацию, я наткнулся на эту статью базы знаний, и хотя она включена в Media Temple, я уверен, что принципы применимы к любым наиболее похожим конфигурациям:

(dv): разрешение Apache Resolveошибки

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Причина этого в том, что скрипту нужны разрешения на запись в sample_folder.

Я не знаю, какие у вас действительные настройки, но я предполагаю, что ваш сценарий работает с правами доступа world или group, равным 5 (read 4 + execute 1), поскольку текущие разрешения - 755 (7для владельца, 5 для группы и 5 для мира).Чтобы записать каталоги в эту папку, вашему сценарию потребуется доступ для записи.Вы можете установить это более безопасно, чем 777, если у вас есть доступ к каталогам chown.Мой совет - создать группу под названием «веб-группа» или аналогичную и поместить в нее пользователя вашего веб-сервера.Затем, дайте группе права на запись (770), которые будут подходящими, как только вы это настроите.Если вам немного неясно, как работают разрешения, окончательная настройка будет выглядеть так:

sample_folder: принадлежит пользователю root, групповой веб-группе, 770 разрешений добавляет любой пользовательский apache (или другой веб-сервер), который работаетwebgroup

EDIT:

Более подробная информация доступна в первом посте, это означает, что вы добавите пользователя 'apache' в веб-группу.Если вы находите это слишком трудным для установки или у вас нет полных разрешений на сервере, чтобы установить эту настройку, то с помощью chown, как это было предложено в другом месте, чтобы дать Apache возможность владеть каталогом, также будет работать.sample_folder

Это сделает apache владельцем папки, предоставив ему доступ к разрешениям на запись (при условии, что оно все еще 755)

1 голос
/ 26 января 2012

Вы проверили разрешения файловой системы для папки, в которой вы пытаетесь создать каталог?

Вы должны cd в каталог и ls -la, чтобы увидеть текущее право владения и файловую систему:

paulbain@test ~/test $ ls -la
total 8
drwxr-xr-x  2 paulbain apache 4096 Jan 26 17:38 .

В моем примере выше его владелец - Чтение, запись, выполнение, групповое чтение и выполнение, а также все чтение и выполнение.

Если бы это было так, и ваш Apache работает под пользователем из группы apache, PHP не сможет создать каталог.

...