ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> phpdoc
phpdoc
[PHP-DOC] #37027 [Opn]: mkdir($dir, 0777, true) does NOT chmod created directory
by tony2001 other posts by this author
Apr 9 2006 1:38PM messages near this date
[PHP-DOC] #37028 [NEW]: odbc_execute docs say single quotes can be quoted; this is not possible | [PHP-DOC] #37023 [NEW]: German documentation for filemtime() is outdated
ID:               37027
 Updated by:       tony2001@[...].net
 Reported By:      mateusz at heleniak dot net
 Status:           Open
-Bug Type:         Directory function related
+Bug Type:         Documentation problem
 Operating System: Apache, Unix
 PHP Version:      5.1.2
 New Comment:

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`.


Previous Comments:
------------------------------------------------------------------------

[2006-04-09 20:20:48] mateusz at heleniak dot net

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

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved