#37027 [Bgs]: mkdir($dir, 0777, true) does NOT chmod created directory
| From: | spambox at gery dot pl | Date: | Sat, 24 May 2008 09:47:40 +0000 |
| Subject: | #37027 [Bgs]: mkdir($dir, 0777, true) does NOT chmod created directory | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-846@lists.php.net to get a copy of this message | ||
ID: 37027
User updated by: spambox at gery dot pl
-Reported By: mateusz at heleniak dot net
+Reported By: spambox at gery dot pl
Status: Bogus
Bug Type: Documentation problem
Operating System: Apache, Unix
PHP Version: 5.1.2
New Comment:
Email update (because of spam).
Previous Comments:
------------------------------------------------------------------------
[2006-04-10 14:15:23] vrana@php.net
It is already documented: "The mode is also modified by the current
umask, which you can change using umask()."
------------------------------------------------------------------------
[2006-04-09 20:37:58] tony2001@php.net
Reclassified as docu problem.
mkdir(dir, mode) actualy sets permissions to (mode & ~umask & 0777).
So you have to use umask() to
1) unset the correct umask;
2) create the directory with mode 0777;
3) reset umask to it's old value.
OR you can use chmod() to change the permissions.
See also
man 2 mkdir.
------------------------------------------------------------------------
[2006-04-09 20:20:48] spambox at gery dot pl
Description:
------------
Directory files/tmp/ has 777 chmod. Script creates files/tmp/tpl-cache/
with 755 chmod!
I use recursive because $foo can be 'admin/asf.tpl' too - then there
are 2 directory to create.
I have seen this bug on PHP Version 5.0.4. It wasn't reported here so
probably newest version of PHP has this bug too.
PHP5 is installed as CGI or something similar.
Please help!
I see now this: http://bugs.php.net/bug.php?id=19757 But I can reed
on
php.net/umask that: "Avoid using this function in multithreaded
webservers. It is better to change the file permissions with chmod()
after creating the file. Using umask() can lead to unexpected behavior
of concurrently running scripts and the webserver itself because they
all use the same umask."
So.. maybe we can change something to easier using mkdir()?
Reproduce code:
---------------
define('ROOT', dirname(__FILE__).'/');
$foo = 'asf.tpl'; // sample data
$dir = dirname(ROOT.'files/tmp/tpl-cache/'.$foo.'.html');
if(!is_dir($dir) && !mkdir($dir, 0777, true))
{
die('Can not create directory structure for cached files.');
}
Expected result:
----------------
Directory with 777 chmod.
Actual result:
--------------
Directory with 755 chmod.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37027&edit=1