Why can't PHP create a directory with 777 permissions?

Sjwdavies picture Sjwdavies · Oct 22, 2010 · Viewed 80.5k times · Source

I'm trying to create a directory on my server using PHP with the command:

mkdir("test", 0777);

But it doesn't give full permissions, only these:

rwxr-xr-x

Answer

paxdiablo picture paxdiablo · Oct 22, 2010

The mode is modified by your current umask, which is 022 in this case.

The way the umask works is a subtractive one. You take the initial permission given to mkdir and subtract the umask to get the actual permission:

  0777
- 0022
======
  0755 = rwxr-xr-x.

If you don't want this to happen, you need to set your umask temporarily to zero so it has no effect. You can do this with the following snippet:

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);

The first line changes the umask to zero while storing the previous one into $oldmask. The second line makes the directory using the desired permissions and (now irrelevant) umask. The third line restores the umask to what it was originally.

See the PHP doco for umask and mkdir for more details.