2012-01-05 2 views
3

ПРОБЛЕМАPHP MkDir() и апач вопрос собственности

Я пытаюсь загрузить файлы на собственный сервер через PHP. Если папка не существует, сначала я пытаюсь создать папки;

mkdir($folder, 0700); 

Мой скрипт создает папки, но апач является владельцем папки (и файл), так что я не могу получить доступ к файлу, который я загрузил.

У меня есть safe_mode на моем сервере. Я все еще не мог найти пути для этого.

Я был бы рад, если бы кто-нибудь мог помочь мне с этим.

ПРИМЕЧАНИЕ: Я пробовал 0755, 0777 ничего не меняет. Apache является владельцем созданной папки.

+0

Права доступа 700 являются очень строгими. Как в * только *, владелец может делать что-либо с каталогом. Итак, то, что вы описываете, ожидается. –

+0

Вы проверили http://stackoverflow.com/questions/2560762/php-mkdir-and-apache-ownership? – j08691

+0

@ j08691; Да, я проверил все. Как я уже говорил, safe_mode отключен. @Jason McCreary, даже если я изменяю разрешение, ничего не меняется, все еще 'apache' является владельцем папки. – Revenant

ответ

2

Я предлагаю переконфигурировать веб-сервер для использования suEXEC или suPHP. Недостатком этого подхода является то, что вы вынуждены использовать PHP в режиме CGI, а не как мод Apache. Однако я не видел, чтобы это стало проблемой на сайтах с низким и средним трафиком. Главное преимущество заключается в том, что ваши скрипты будут работать как те, кто их владеет, и поэтому любые новые каталоги или файлы, созданные вашим скриптом, будут автоматически принадлежать указанному пользователю.

В конечном счете, если ваша проблема просто с созданием новых каталогов и файлы не, и вы ничего, что не должно быть прочитаны посторонние глаза не хранящими, то chmod($path, 0755); бы устранить проблему.

+0

Я пробовал chown(), насколько я понял из этого, это может привести к высоким проблемам безопасности. Я скорее придерживаюсь безопасности. – Revenant

+0

Мне пришлось изменить свой ответ, я не понимал, что 'chown()' требует от вас запускать скрипт как root для работы. – Crontab

+0

Я понятия не имею, как бороться с сервером в таких деталях. Я предполагаю, что нет другого пути вокруг этого. – Revenant

0

Конечно. Реж загрузки должен быть доступен для записи other/доступным, то есть: xx7:

// fill APPPATH with a suitable directoy name 

if (! file_exists(APPPATH . 'uploads')) 
{ 
    mkdir(APPPATH . 'uploads', 0757, TRUE); 
} 

7: owner permissions, ie: rwx 
5: group permissions, ie: rx 
7: other permissions, ie: rwx 
+0

Он создает папки, у меня нет проблем с ним. Проблема заключается в том, что apache является владельцем папок. – Revenant

+0

Да, apache также будет владельцем загруженных файлов.Просто создайте директорию/папку, доступную для записи и доступную «другим пользователям». –

+0

Если это не работает, я думаю, что проблема должна быть в другой части вашего скрипта. Как вы получаете доступ к загруженным файлам? –

0

Почему вы установите разрешения на 700 в первую очередь? 755 позволит «кому угодно» читать ваши файлы и папки, и в большинстве случаев это действительно приемлемо.

+0

Обновляет мой вопрос. Я пробовал 755, 777 без успеха. Apache является владельцем каждой созданной папки. – Revenant

1

Следующий фрагмент кода создает каталоги с разрешениями 777 (или любых указанных разрешений):

$oldumask = umask(0); 
mkdir($path, 0777); 
umask($oldumask);