如果文件夹不存在,则创建一个文件夹

更新于 2021年12月25日 wordpress教程

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

如果文件夹不存在,则创建一个文件夹

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

所以我需要在我的主题中添加代码来检查文件夹并以其他方式创建它。

解决方案

试试这个,使用mkdir

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

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

这是缺失的部分。 您需要在mkdir调用中将“递归”标志作为第三个参数(布尔值为真)传递,如下所示:

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;
}

这将采用一个路径,可能带有一长串未创建的目录,并继续向上一个目录,直到到达现有目录。 然后它将尝试在该目录中创建下一个目录,并继续直到创建所有目录。 如果成功则返回真。

可以通过提供停止级别来改进它,因此如果它超出用户文件夹或其他内容并包含权限,它就会失败。

使用这样的辅助函数:

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

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

一个更好的选择是这样的(不应该给出任何警告):

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

创建文件夹的更快方法:

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

递归创建目录路径:

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

受 Python 的os.makedirs()启发

最好的方法是使用wp_mkdir_p函数。 此函数将递归地创建一个具有正确权限的文件夹。

此外,您可以跳过文件夹存在条件,因为该函数返回:

  • 当目录在之前创建或存在时为true
  • 如果您无法创建目录,则为false

例子:

$path = 'path/to/directory';
if ( wp_mkdir_p( $path ) ) {
    // Directory exists or was created.
}

更多:https ://developer.wordpress.org/reference/functions/wp_mkdir_p/

在 WordPress 中,还有一个非常方便的函数wp_mkdir_p ,它将递归地创建一个目录结构。

参考来源:

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;
}

对于登录站点,我需要同样的东西。 我需要创建一个包含两个变量的目录。

$directory 是我想用用户许可证号创建另一个子文件夹的主文件夹。

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);
}

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

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

对于您关于WordPress的具体问题,请使用以下代码:

if (!is_dir(ABSPATH . 'wp-content/uploads')) wp_mkdir_p(ABSPATH . 'wp-content/uploads');

函数参考:WordPress wp_mkdir_pABSPATH是返回 WordPress 工作目录路径的常量。

还有另一个名为wp_upload_dir() WordPress 函数。 它返回上传目录路径并创建一个文件夹(如果尚不存在)。

$upload_path = wp_upload_dir();

以下代码适用于一般的 PHP

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

函数参考: PHP is_dir()

你可能还喜欢下面这些文章

蜂集采集器,一款全自动的wordpress采集插件蜂集采集器,一款全自动的wordpress采集插件

imwprobot(蜂集)是一款wordpress采集插件。
有什么功能1. 全自动无人值守,支持定时采集2. 可自动同步目标站的更新3. AI自动关键词、自动摘要生成4. 直接发布到wordpress,不需要额外的接口支持5. 正文图片和缩略图均可本地化6. 每个任务中的文章图片均可设置独立水印7. 采集到的内容均支持正则和css选择器替换可以采集哪些站1. 新闻资讯站2. 文章范文站3. BBS论坛4. 博客站点5. 资源站、下载站支持哪些采集规则1. 正则表达式2. XPath规则3. JQuery选择器(CSS选择器)代理支持1. HTTP代理 2. Socks5代理 哪些主机可以运行没有环境限制,虚拟主机都可以运行蜂集特色

wordpress智能自动摘要插件:wpaewordpress智能自动摘要插件:wpae

目前wordpress的摘要大多数由主题提供。
一直以来没有一款插件可以智能提取正文的关键内容作为摘要,于是自己动手做了一个,命名为wpae(wordpress auto excerpt)。

wordpress站长工具箱插件imwpf,必装插件wordpress站长工具箱插件imwpf,必装插件

为了让wordpress更好用,我们开发了一款wp工具箱插件。
imwpf提供 免登录发布接口、优化工具箱(定时任务开关,修订版开关,wp-json开关,缩略图开关)、防垃圾评论、后台文章分类标签ID显示、百度推送、收录快捷查看 功能,并且还在持续增加中。

wordpress如何禁用wp-jsonwordpress如何禁用wp-json

wp-json可以很方便获取wordpress的内容,但也让采集变得容易起来,很容易被恶意抓取。
imwpf可以很方便关闭关闭wp-json接口并且不影响后台使用,并且其他更强大的优化功能,推荐使用。

wordpress关注微信公众号查看隐藏内容插件:北冥wordpress关注微信公众号查看隐藏内容插件:北冥

北冥插件是imwpweb开发的一款关注可复制、可查看隐藏内容的插件,想要为公众号涨粉不可错过哦~

想要流量私域化,成本最低的方式就是让用户关注你的公众号,手段就是通过关注可以查看隐藏内容,复制内容。

wordpress文章自动配图插件wordpress文章自动配图插件

现在写点文章不配图总觉得文章质量不太高。
于是萌生了写一款文章自动配图的插件的想法。
文章页自动加一张图比较简单,从候选集中选择一张图片拼接在正文中即可。
又比如在图片中添加文章标题,摘要或者自定义的文字。

wordpress自定义url路由于自定义载入模板wordpress自定义url路由于自定义载入模板

wordpress强大的hook能够让我们去自定义路由,在使用框架的时候一般路由是写在一个配置文件中,wordpress作为一个cms系统,自然是不能这么干,实际上,wordpress路由规则是写在数据库中,自定义路由其实就是修改这个数据库的值。
默认这个tpl_page查询是不会加入到$GLOBALS[‘wp_query’]中的query_var变量中,默认wordpress的public_query_vars有这么一些

如何避免cli模式下wordpress内存耗尽如何避免cli模式下wordpress内存耗尽

在有些场景下,会写一些脚本在cli模式下跑,比如刷数据之类的任务。
其原因在于wordpress的wpdb类会保存query,每一条query都会保存在内存中,随着查询越来越多,这个变量得不到释放,于是内存最终会被耗尽。
另外一个原因在于wordpress的object cache,这也会将查询的结果保存在内存!

好看 (0) 很好看 (0) 非常好看 (0)
赞赏

微信赞赏支付宝赞赏