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

显然Bluehost cPanel WordPress安装程序不会创建这个文件夹,但HostGator可以。

因此,我需要向我的主题添加代码,以检查文件夹并创建它。


当前回答

作为现有解决方案的补充,一个效用函数。

function createDir($path, $mode = 0777, $recursive = true) {
  if(file_exists($path)) return true;
  return mkdir($path, $mode, $recursive);
}

createDir('path/to/directory');

如果已经存在或成功创建,则返回true。否则返回false。

其他回答

递归创建目录路径:

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

灵感来自Python的os.makedirs()

这是缺失的部分。你需要在mkdir调用中传递'recursive'标志作为第三个参数(布尔值true),如下所示:

mkdir('path/to/directory', 0755, 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);
}

你还可以试试:

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