2012-03-21 3 views
0

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

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0777, true); 
    chmod('img/user/'.$id, 0777); 
} 

В интернете я нашел, что каталог для загрузки для httpd это needs to have write permissions так:

drwxrwxrwx 2 user  staff 512 Jan 07 12:32 uploads/ 

Где находится это разрешение? Я не направляю доступ к серверу. Есть ли альтернатива?

+0

Возможно, вы сможете установить разрешения с помощью FTP. – PeeHaa

ответ

1

Вы никогда не хотите, чтобы разрешения были доступны для записи в мире, если вы можете избежать этого или даже прочитать это. 0770 будет лучшим вариантом, если все еще немного шире. Главное, что указанная папка (ы) должна быть доступна для записи пользователем веб-сервера. Например, на многих хостингах апач будет запускаться пользователем nobody, поэтому более подходящее разрешение будет выглядеть следующим образом:

drwxrwx--- 2 nobody  nobody 512 Jan 07 12:32 uploads/ 

Теперь, есть проблема, если вы не можете получить прямой доступ для установки разрешений самостоятельно за исключением PHP, потому что некоторые веб-хосты откажутся от вашей возможности запускать chmod или другие разрешения или модификации владения с PHP. Тем не менее, если вы используете cPanel (и, вероятно, другие хостинговые системы также это сделаете), вы можете использовать онлайновый файловый менеджер, чтобы выполнить то, что вы хотите, просмотрев соответствующий каталог и используя change permissions, расположенный в верхней части страницы.

Итак, в конечном счете, вот что вам нужно: если вам нужно создать каталог в определенном месте, вам необходимо убедиться, что место доступно для записи веб-сервером. В вашем примере это означает, что перед созданием img/user/$id вам необходимо установить соответствующие разрешения на img/user. Это означает, что img/user либо должны иметь разрешения 0770 и должны принадлежать nobody:nobody (любой пользователь или группа будут работать в этом контексте, вам не нужны оба), или он должен иметь разрешения 0777. Затем, когда вы создаете определенный каталог пользователя, вы можете сделать это так:

if(!is_dir('img/user/'.$id)) 
{ 
    mkdir('img/user/'.$id, 0770, true); 
} 

... потому что это уже будет принадлежать соответствующему пользователю, и вы будете уже иметь доступ на запись к нему просто потому, что ваш webserver создал его в первую очередь.

Если вы не можете найти способ, отличный от PHP, для этого вам понадобится, чтобы помочь вашему веб-хосту.

+0

Спасибо @Jason .. –

0

PHP работает как пользователь: www-данные в группе: www-data (Ubuntu) или что-то еще в зависимости от ОС сервера. Вы можете попросить своего провайдера установить правильный доступ к картам/файлам, если вы не можете сделать это самостоятельно по FTP.

Смежные вопросы