Вы никогда не захотите устанавливать разрешения, чтобы они были доступны для записи во всем мире, если вы можете избежать этого или даже для чтения в этом отношении. 0770
будет лучшим вариантом, если все еще будет немного шире. Суть в том, что рассматриваемые папки должны быть доступны для записи пользователю веб-сервера. Например, на многих веб-хостах apache будет запускаться пользователем nobody
, поэтому более подходящее разрешение будет выглядеть так:
drwxrwx--- 2 nobody nobody 512 Jan 07 12:32 uploads/
Теперь существует проблема, если вы не можете получить прямой доступ к настройке разрешений самостоятельно, кроме как через PHP, потому что некоторые веб-хосты не разрешают вам запускать chmod
или другие изменения разрешений или владения изнутри PHP. Тем не менее, если вы используете cPanel (и, вероятно, другие хостинговые системы делают то же самое), вы можете использовать онлайновый файловый менеджер для достижения желаемого, перейдя в соответствующий каталог и используя change permissions
, расположенный в верхней части страницы. .
Итак, в конечном счете, вот что вам нужно: если вам нужно иметь возможность создавать каталог в определенном месте, вам нужно убедиться, что это место доступно для записи веб-сервером. В вашем примере это означает, что вам нужно сначала установить соответствующие разрешения для img/user
, прежде чем пытаться создать img/user/$id
. Это означает, что img/user
либо должен иметь разрешения 0770
и должен принадлежать nobody:nobody
(в этом контексте может работать пользователь или группа, вам не нужны оба), либо он должен иметь разрешения 0777
, Затем, когда вы создаете свой конкретный пользовательский каталог, вы можете сделать это так:
if(!is_dir('img/user/'.$id))
{
mkdir('img/user/'.$id, 0770, true);
}
... потому что он уже будет принадлежать соответствующему пользователю, и у вас уже будет доступ для записи к нему просто потому, что ваш веб-сервер создал его в первую очередь.
Если вы не можете найти способ сделать это не на PHP, тогда вам нужно будет помочь вашему веб-хосту.