19.10. Making New Directories
Problem
You want to create a directory.
Solution
Use mkdir( )
:
mkdir('/tmp/apples',0777) or die($php_errormsg);
Discussion
The second argument to mkdir( )
is the permission
mode for the new directory, which must be an octal number. The
current umask is taken away from this permission value to create the
permissions for the new directory. So, if the current umask is
0002
, calling
mkdir('/tmp/apples',0777)
sets the permissions on
the resulting directory to 0775
(user and group
can read, write, and execute; others can only read and execute).
PHP’s built-in mkdir( )
can make
a directory only if its parent exists. For example, if
/tmp/a doesn’t exist, you
can’t create /tmp/a/b until
/tmp/a is created. To create a directory and its
parents, you have two choices: you can call your
system’s mkdir
program, or you
can use the pc_mkdir_parents( )
function, shown in Example 19-3. To use your
system’s mkdir program, on
Unix, use this:
system('/bin/mkdir -p '.escapeshellarg($directory));
On Windows do:
system('mkdir '.escapeshellarg($directory));
You can also use the pc_mkdir_parents( )
function
shown in Example 19-3.
Example 19-3. pc_mkdir_parents( )
function pc_mkdir_parents($d,$umask = 0777) { $dirs = array($d); $d = dirname($d); $last_dirname = ''; while($last_dirname != $d) { array_unshift($dirs,$d); $last_dirname = $d; $d = dirname($d); } foreach ($dirs as $dir) { if (! file_exists($dir)) { if (! mkdir($dir,$umask)) { error_log("Can't make directory: $dir"); return ...
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.