Creați un folder dacă nu't există deja

Am've rula în câteva cazuri cu WordPress instalează cu Bluehost unde am'am întâlnit erori cu WordPress temă pentru upload folder wp-content/uploads nu a fost prezent.

Se pare că Bluehost cPanel WP instalare nu crea acest dosar, deși HostGator face.

Așa că am nevoie să adăugați un cod pentru tema mea, care verifică dosarul și creează o altfel.

Comentarii la întrebare (1)
Soluția

Încercați acest lucru:

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

Notă: 0777` este deja modul implicit pentru directoare și pot fi modificate de către actualul umask.

Comentarii (10)

Aici este piesa lipsă. Aveți nevoie pentru a trece 'recursiv' steag ca al treilea argument (boolean true) în mkdir suna astfel:

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

Ceva mai universal, deoarece acest lucru vine pe google. În timp ce detaliile sunt mai specifice, cu titlu de această întrebare este mai universal.

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

Acest lucru va lua o cale, eventual cu un lanț lung de necreată directoare, și să păstreze merge în sus un director până când se ajunge la un director existent. Atunci acesta va încerca să creeze următorul director în acel director, și continua până it's a creat toate directoarele. Returnează true dacă de succes.

Ar putea fi îmbunătățită prin furnizarea de o oprire de nivel, astfel că doar nu reușește dacă se merge dincolo de utilizator folder sau ceva și prin includerea permisiuni.

Comentarii (3)

Ce zici de un helper funcția de genul asta:

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

Acesta va returna "true" dacă directorul a fost creat cu succes sau există deja, și "fals" dacă directorul n't fi creat.

O bine alternativă este (ar trebui't da orice avertismente):

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

Mai rapid mod de a crea folder:

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

Recursiv a crea cale de director:

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

Inspirat de Python's os.makedirs()

Comentarii (0)

În WordPress nu's, de asemenea, foarte la îndemână funcția wp_mkdir_p care va recursiv a crea o structura de directoare.

Sursa de referință:-


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 
Comentarii (0)

Am nevoie de același lucru pentru un site de conectare. Am nevoie pentru a crea un director cu două variabile. A $director este folderul principal unde am vrut să creeze o altă sub-folder cu utilizatori, numărul de licență.

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);
}
Comentarii (0)

Acesta este cel mai up-to-data de soluție fără suprimarea eroare:

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

Puteți încerca, de asemenea,:

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

Dacă doriți, pentru a evita file_exists VS `is_dir problemă, aș sugera să se uite aici

Am încercat acest lucru și-l creează doar director, dacă director nu există. Nu-i pasă că nu există un fișier cu acest nume.

/* 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);
}
Comentarii (0)

Pentru a crea un folder, dacă nu't există deja

Având în vedere întrebarea's mediu.

  • WordPress.
  • Server De Webhosting.
  • Presupunând sale Linux nu Windows care rulează PHP.

Și cu referire la: http://php.net/manual/en/function.mkdir.php

bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursiv = FALS [, resource $context ]]] )

Manualul spune că singurul parametru necesar este $cale!

deci, putem pur și simplu codul:

<?php
error_reporting(0); 
if(!mkdir('wp-content/uploads')){
   // todo
}
?>

Explicație:

Am don't trebuie să treacă orice parametru sau verificați dacă există folderul sau chiar modul de trecere parametru doar dacă este necesar; pentru următoarele motive:

  • Comanda va crea folderul cu 0755 permisiunea (gazduire Shared folder's, default permisiunea) sau 0777 comanda's implicită.
  • mode este ignorat pe Hosting pentru Windows care rulează PHP.
  • Deja `mkdir comandă a construi în checker dacă există folderul; deci, avem nevoie pentru a verifica reveni numai Adevărat|Fals ; și nu o eroare, avertisment numai, și de Avertizare este dezactivat din serverele de hosting by default.
  • Ca pe viteza, acest lucru este mai rapid dacă avertizare cu handicap.

Acest lucru este doar un alt mod de a privi în cauză și nu pretind o mai bună sau cea mai optimă soluție.

Testat pe PHP7, Producție Server, Linux

Comentarii (0)

Ar trebui să întotdeauna modularise codul nostru și am'am scris la fel verifica de mai jos... Vom verifica în primul rând pe director, dacă directorul este absent vom crea directorul.

$boolDirPresents = $this->CheckDir($DirectoryName);

if (!$boolDirPresents) {
        $boolCreateDirectory = $this->CreateDirectory($DirectoryName);
        if ($boolCreateDirectory) {
        echo "Created successfully";
      }
  }

function CheckDir($DirName) {
    if (file_exists($DirName)) {
        echo "Dir Exists<br>";
        return true;
    } else {
        echo "Dir Not Absent<br>";
        return false;
    }
}

function CreateDirectory($DirName) {
    if (mkdir($DirName, 0777)) {
        return true;
    } else {
        return false;
    }
}
Comentarii (0)
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/newfolder';
if (! is_dir($upload_dir)) {
   mkdir( $upload_dir, 0700 );
}
Comentarii (0)
if (!is_dir('path_directory')) {
    @mkdir('path_directory');
}
Comentarii (4)

Trebuie mai întâi să verificați dacă directorul există file_exists('path_to_directory')`

Apoi, utilizați mkdir(path_to_directory) pentru a crea un director

mkdir( string $pathname [, int $mode = 0777 [, bool $recursive = FALSE [, resource $context ]]] ) : bool

Mai multe despre mkdir() aici

Cod complet aici:

$structure = './depth1/depth2/depth3/';
if (!file_exists($structure)) {
    mkdir($structure);
}
Comentarii (0)