如果文件夹不存在,则创建一个文件夹
我遇到了一些使用 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_p 。 ABSPATH是返回 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插件为长文章添加自动目录功能,以提升用户体验和SEO效果。针对技术教程、产品测评等结构化内容,推荐使用Easy Table of Contents插件(免费/4.8星),详细讲解从安装到定制的全流程:包括基础

**** 本文详细介绍了如何在WordPress中通过插件实现文章自动目录生成,以提升长文阅读体验和SEO效果。推荐使用免费插件Easy Table of Contents,支持智能识别标题层级,兼容多数主题。操作步骤包括插件安装、基础配置

本文详细介绍了在WordPress中实现文章自动目录跳转的完整方案。针对长文阅读体验差的痛点,教程推荐使用Easy Table of Contents等插件,从安装配置、外观调整到移动端适配逐步讲解。重点说明如何通过标题层级优化(H2/H3结

//codex.wordpress.org/Editing_wp-config.php#Enabling_SSH_Upgrade_Access通常你可以将你的插件上传到目录。

本文详细解析了WordPress附件上传路径错误的常见原因及系统解决方案。当出现"上传目录不可写"等错误时,主要涉及服务器权限设置不当、目录结构变更或配置文件出错等问题。文章从基础设置检查入手,指导用户验证媒体默认路径、调整目录权限(建议75

"css/colors-classic.css"。第一步,在当前主题中新建名称为css文件夹,复制一份wordpresswp-admincsscolors目录任意文件夹中的colors.css到这个css文件夹中。添加后台配色wp_admin

例子:-用于使用函数(用于显示页面的主要内容)用于使用函数(用于显示页面的摘录短内容)用下面的代码替换php。只是为了帮助,如果有人想限制帖子长度..然后可以使用下面的代码来做到这一点..下面的代码只是对先生的修改我知道这篇文章有点旧,但我想

如何利用WordPress创建自定义404错误页面 当用户访问不存在的页面时,默认的404错误页面往往缺乏吸引力且错失用户留存机会。本文详细介绍了如何通过简单方法打造个性化404页面,提升用户体验并降低跳出率。教程涵盖两种主流方案:使用El