Создайте папку, если она еще не существует.

Я столкнулся с несколькими случаями с установками WordPress с Bluehost, где я столкнулся с ошибками в моей теме WordPress, потому что папка uploads wp-content/uploads отсутствовала.

По-видимому, установщик Bluehost cPanel WP не создает эту папку, хотя HostGator делает.

Поэтому мне нужно добавить код к моей теме, который проверяет папку и создает ее в противном случае.

Попробуй это:

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

Обратите внимание, что 0777 уже является режимом по умолчанию для каталогов и все еще может быть изменен текущей umask.

Вот недостающая часть. Вы должны передать флаг «рекурсивный» в качестве третьего аргумента (логическое значение true) в mkdir, например:

 mkdir('path/to/directory', 0755, true); 

Что-то более универсальное, так как это появляется на google. Хотя детали более конкретны, название этого вопроса является более универсальным.

 /** * 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 в случае успеха.

Может быть улучшено путем обеспечения уровня остановки, поэтому он просто терпит неудачу, если он выходит за пределы папки пользователя или что-то еще, и включив разрешения.

Как насчет вспомогательной функции:

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

Рекурсивно создать путь к каталогу:

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

Вдохновленный os.makedirs() Python os.makedirs()

Более быстрый способ создания папки:

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

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

Мне нужно то же самое для сайта входа. Мне нужно было создать каталог с двумя переменными. Каталог $ – это основная папка, в которой я хотел создать другую подпапку с номером лицензии пользователей.

 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); } в 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'); } 
 if (!is_dir('path_directory')) { @mkdir('path_directory'); } 

Вы также можете попробовать:

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

Я закончил

 //if(!is_dir($path) || !is_file($path) || !file_exists($path)){ // still erroring??? try{ mkdir($path); } catch (\ErrorException $e){ } 

после того, как прокомментированная часть не сработала