У меня есть следующий простой скрипт для тестирования функции 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 () Permission denied issues. Мои права доступа sample_folder в настоящее время установлены на chmod 755.
ВСЕ Я прочитал, что не следует изменять chmod на 777, поэтому, пожалуйста, не предлагайте этого.
В целях тестирования chmod 777 в каталоге 'sample_folder' решает проблему, но опять же это создает проблемы с безопасностью. Есть ли что-то еще, что мне не хватает, как заставить эту работу работать?
Обратите внимание: мои пользователи PHP в системе - «apache»;
Для справки я использую PHP 5.3. * И CentOS 5.5 на выделенном виртуальном сервере Media Temple. Я также просмотрел почти все вопросы chmod по SO и, похоже, не могу найти решение, соответствующее моей проблеме (за исключением 777 предложений).
редактировать
Запуск ls -la на моем сервере возвращает:
drwxr-xr-x 2 ftphiddenname psacln 4096 26 января, 11:24 sample_folder
окончательное обновление
Предоставленные ответы были очень полезны. Для тех, кто ищет дополнительную информацию, я наткнулся на эту статью базы знаний, и, хотя она указана в Media Temple, я считаю, что принципы применимы к любым наиболее похожим конфигурациям:
chmoding вам нужноchown, чтобы убедиться, что755подходит для изменения каталога обсуждаемый. Для этого вам понадобится7(6?) В родительском каталоге - поэтому, если родительский каталог не принадлежит пользователю, от имени которого выполняется PHP, он не позволит вам сделать это с помощью755. - person DaveRandom   schedule 26.01.2012ls -lв родительском каталоге родительского каталога, вы можете увидеть разрешения и права собственности на родительский каталог (если вы последуете этому, я бы простил вас, если вы этого не сделали). По сути, в вашем примере вы должныls -lкорень документа, вы увидите нужную информацию. На самом деле все, что вам нужно сделать (как пользователю, имеющему на это разрешение), - этоchown apache <document root>/sample_folder- person DaveRandom   schedule 26.01.2012apacheпользователь (все, что вы создаете с помощью PHP, должно делать это), илиchownих вapache, когда вы их создаете. - person DaveRandom   schedule 26.01.2012