我在Bluehost上安装WordPress时遇到过一些情况,我的WordPress主题遇到了错误,因为上传文件夹wp-content/uploads不存在。
显然Bluehost cPanel WordPress安装程序不会创建这个文件夹,但HostGator可以。
因此,我需要向我的主题添加代码,以检查文件夹并创建它。
我在Bluehost上安装WordPress时遇到过一些情况,我的WordPress主题遇到了错误,因为上传文件夹wp-content/uploads不存在。
显然Bluehost cPanel WordPress安装程序不会创建这个文件夹,但HostGator可以。
因此,我需要向我的主题添加代码,以检查文件夹并创建它。
当前回答
最好的方法是使用wp_mkdir_p函数。此函数将递归地创建具有正确权限的文件夹。
此外,你可以跳过文件夹存在条件,因为函数返回:
当目录已创建或以前存在时,为 如果不能创建目录,则为False。
例子:
$path = 'path/to/directory';
if ( wp_mkdir_p( $path ) ) {
// Directory exists or was created.
}
更多:https://developer.wordpress.org/reference/functions/wp_mkdir_p/
其他回答
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/newfolder';
if (! is_dir($upload_dir)) {
mkdir( $upload_dir, 0700 );
}
这里有一些更通用的东西,因为它出现在谷歌上。虽然细节更具体,但这个问题的标题更具有普遍性。
/**
* 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;
}
这将采用一条路径,可能包含一长串未创建的目录,并继续向上移动一个目录,直到到达一个现有目录。然后,它将尝试在该目录中创建下一个目录,直到创建所有目录为止。如果成功则返回true。
它可以通过提供一个停止级别来改进,这样它就会在超出用户文件夹或其他地方时失败,并包括权限。
我们可以使用mkdir创建文件夹。我们也可以为它设置权限。
价值的许可 0不能读、写或执行 1只能执行 2 .只会写字 3 .可以写入和执行 4 .只能阅读 5 .可以读取和执行 6 .会读会写 7能读、写和执行
<?PHP
// Making a directory with the provision
// of all permissions to the owner and
// the owner's user group
mkdir("/documents/post/", 0770, true)
?>
作为现有解决方案的补充,一个效用函数。
function createDir($path, $mode = 0777, $recursive = true) {
if(file_exists($path)) return true;
return mkdir($path, $mode, $recursive);
}
createDir('path/to/directory');
如果已经存在或成功创建,则返回true。否则返回false。
如果您想避免file_exists vs. is_dir问题,我建议您看一下这里。
我尝试了这一点,它只创建目录,如果目录不存在。它不关心是否有同名的文件。
/* Creates the directory if it does not exist */
$path_to_directory = 'path/to/directory';
if (!file_exists($path_to_directory) && !is_dir($path_to_directory)) {
mkdir($path_to_directory, 0777, true);
}