我在Bluehost上安装WordPress时遇到过一些情况,我的WordPress主题遇到了错误,因为上传文件夹wp-content/uploads不存在。
显然Bluehost cPanel WordPress安装程序不会创建这个文件夹,但HostGator可以。
因此,我需要向我的主题添加代码,以检查文件夹并创建它。
我在Bluehost上安装WordPress时遇到过一些情况,我的WordPress主题遇到了错误,因为上传文件夹wp-content/uploads不存在。
显然Bluehost cPanel WordPress安装程序不会创建这个文件夹,但HostGator可以。
因此,我需要向我的主题添加代码,以检查文件夹并创建它。
当前回答
如果一个文件夹不存在,则创建该文件夹
考虑到问题的环境。
WordPress。 网络服务器。 假设它是Linux,而不是运行PHP的Windows。
并引用:mkdir
Bool mkdir (string $pathname [, int $mode = 0777 [, Bool $recursive = . [,资源$context]]])
手册说唯一需要的参数是$pathname!
因此,我们可以简单地编码:
<?php
error_reporting(0);
if(!mkdir('wp-content/uploads')){
// Todo
}
?>
解释:
除非需要,否则我们不需要传递任何参数或检查文件夹是否存在,甚至不需要传递mode参数;原因如下:
该命令将创建具有0755权限(共享主机文件夹的默认权限)或0777权限(该命令的默认权限)的文件夹。 mode在运行PHP的Windows主机上被忽略。 mkdir命令已经有一个内置的检查器,用于检查文件夹是否存在;所以我们需要检查返回的只有True|False;这不是错误;它只是一个警告,默认情况下,警告在主机服务器上是禁用的。 至于速度,这是更快,如果警告禁用。
这只是研究问题的另一种方式,而不是声称有更好或最优的解决方案。
它在PHP 7、生产服务器和Linux上进行了测试
其他回答
这是缺失的部分。你需要在mkdir调用中传递'recursive'标志作为第三个参数(布尔值true),如下所示:
mkdir('path/to/directory', 0755, true);
对于你关于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()
试试这个,使用mkdir:
if (!file_exists('path/to/directory')) {
mkdir('path/to/directory', 0777, true);
}
请注意,0777已经是目录的默认模式,并且仍然可能被当前umask修改。
如果您想避免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);
}
给你。
if (!is_dir('path/to/directory')) {
if (!mkdir('path/to/directory', 0777, true) && !is_dir('path/to/directory')) {
throw new \RuntimeException(sprintf('Directory "%s" was not created', 'path/to/directory'));
}
}