创build一个文件夹,如果它不存在

我已经遇到一些与WordPress安装WordPress的情况下,我遇到了我的WordPress主题的错误,因为上传文件夹wp-content/uploads不存在。

显然Bluehost的cPanel WP安装程序不会创build这个文件夹,虽然HostGator的。

所以我需要添加代码到我的主题,检查文件夹,否则创build它。

尝试这个:

 if (!file_exists('path/to/directory')) { mkdir('path/to/directory', 0777, true); } 

请注意, 0777已经是目录的默认模式,可能仍然会被当前的umask修改。

这是缺less的一块。 您需要在mkdir调用中将“recursion”标志作为第三个参数(boolean true)传递,如下所示:

 mkdir('path/to/directory', 0755, true); 

有一点更普遍,因为这在谷歌出现。 虽然细节更具体,但这个问题的标题更为普遍。

 /** * recursively create a long directory path */ function createPath($path) { if (is_dir($path)) return true; $prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 ); $return = createPath($prev_path); return ($return && is_writable($prev_path)) ? mkdir($path) : false; } 

这将采取一个path,可能有一个长的未创build的目录链,并继续上去一个目录,直到它到达一个现有的目录。 然后它将尝试创build该目录中的下一个目录,并继续创build所有目录。 如果成功则返回true。

可以通过提供一个停止级别来改进,所以如果它超出了用户文件夹或某些东西,并且包含权限,它就会失败。

那么这样的帮手function呢:

 function makeDir($path) { $ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors return $ret === true || is_dir($path); } 

如果目录已成功创build或已经存在,它将返回true如果无法创build目录,则返回false

更好的select是(不应该给出任何警告):

 function makeDir($path) { return is_dir($path) || mkdir($path); } 

recursion创build目录path:

 function makedirs($dirpath, $mode=0777) { return is_dir($dirpath) || mkdir($dirpath, $mode, true); } 

受Python的os.makedirs()启发

更快地创build文件夹的方法:

 if (!is_dir('path/to/directory')) { mkdir('path/to/directory', 0777, true); } 

在WordPress内部还有非常方便的函数wp_mkdir_p ,它将recursion地创build一个目录结构。

资料来源: –

 function wp_mkdir_p( $target ) { $wrapper = null; // strip the protocol if( wp_is_stream( $target ) ) { list( $wrapper, $target ) = explode( '://', $target, 2 ); } // from php.net/mkdir user contributed notes $target = str_replace( '//', '/', $target ); // put the wrapper back on the target if( $wrapper !== null ) { $target = $wrapper . '://' . $target; } // safe mode fails with a trailing slash under certain PHP versions. $target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency. if ( empty($target) ) $target = '/'; if ( file_exists( $target ) ) return @is_dir( $target ); // We need to find the permissions of the parent folder that exists and inherit that. $target_parent = dirname( $target ); while ( '.' != $target_parent && ! is_dir( $target_parent ) ) { $target_parent = dirname( $target_parent ); } // Get the permission bits. if ( $stat = @stat( $target_parent ) ) { $dir_perms = $stat['mode'] & 0007777; } else { $dir_perms = 0777; } if ( @mkdir( $target, $dir_perms, true ) ) { // If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod() if ( $dir_perms != ( $dir_perms & ~umask() ) ) { $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) ); for ( $i = 1; $i <= count( $folder_parts ); $i++ ) { @chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms ); } } return true; } return false; } 

我需要一个login网站相同的东西。 我需要创build一个两个variables的目录。 $目录是我想用用户许可证编号创build另一个子文件夹的主要文件夹。

 include_once("../include/session.php"); $lnum = $session->lnum; //Users license number from sessions $directory = uploaded_labels; // Name of directory that folder is being created in if (!file_exists($directory."/".$lnum)) { mkdir($directory."/".$lnum, 0777, true); } 

这是没有错误抑制的最新解决scheme:

 if (!is_dir('path/to/directory')) { mkdir('path/to/directory'); } 
 if (!is_dir('path_directory')) { @mkdir('path_directory'); } 

你也可以尝试:

 $dirpath = "path/to/dir"; $mode = "0777"; is_dir($dirpath) || mkdir($dirpath, $mode, true); 

我结束了

 //if(!is_dir($path) || !is_file($path) || !file_exists($path)){ // still erroring??? try{ mkdir($path); } catch (\ErrorException $e){ } 

在评论部分保持失败后