769 Stimmen

Erstellen Sie einen Ordner, wenn er noch nicht existiert

Ich habe ein paar Fälle mit WordPress-Installationen erlebt, bei denen Bluehost wo ich mit meinem WordPress-Theme auf Fehler gestoßen bin, weil der Uploads-Ordner wp-content/uploads war nicht anwesend.

Offenbar ist der Bluehost cPanel Der WordPress-Installer erstellt diesen Ordner jedoch nicht HostGator tut.

Ich muss also Code zu meinem Thema hinzufügen, der den Ordner sucht und ihn andernfalls erstellt.

17 Stimmen

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

3voto

joaorodr84 Punkte 1181

Wenn Sie vermeiden möchten, dass die file_exists vs. is_dir Problem, würde ich Ihnen empfehlen, sich aquí .

Ich habe das ausprobiert und das Verzeichnis wird nur erstellt, wenn das Verzeichnis existiert nicht . Es ist egal, ob es eine Datei mit diesem Namen gibt.

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

2voto

Mayur Kukadiya Punkte 994
if (!is_dir('path_directory')) {
    @mkdir('path_directory');
}

4 Stimmen

Bei der Fehlerunterdrückung muss nicht geprüft werden, ob das Verzeichnis existiert.

5 Stimmen

Es ist besser, Fehler zu behandeln als sie zu unterdrücken. Wenn dies fehlschlägt, werden Sie nie erfahren, warum das so ist, und müssen es erforschen

0 Stimmen

In stark konkurrierenden/Multithreading-Umgebungen ist es ratsam, den Fehler zu unterdrücken. Es könnte eine Wettlaufsituation auftreten, in der zwei oder mehr Threads is_dir() auf false auswerten und versuchen, das Verzeichnis zu erstellen. Der erste Thread kann das Verzeichnis problemlos erstellen, aber die anderen Threads scheitern, weil das Verzeichnis bereits existiert. Um eine tatsächlich fehlgeschlagene Verzeichniserstellung nicht zu verpassen, sollten Sie die Existenz des Verzeichnisses nach dem Aufruf von @mkdir() erneut überprüfen.

0voto

Aditya Punkte 1690

Wir sollten unseren Code immer modularisieren, und ich habe dasselbe geschrieben, siehe unten...

Wir überprüfen zunächst das Verzeichnis. Wenn das Verzeichnis nicht vorhanden ist, erstellen wir das Verzeichnis.

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

0voto

Jens Törnell Punkte 20500

Als Ergänzung zu den derzeitigen Lösungen eine Nutzenfunktion.

function createDir($path, $mode = 0777, $recursive = true) {
  if(file_exists($path)) return true;
  return mkdir($path, $mode, $recursive);
}

createDir('path/to/directory');

Sie gibt zurück true falls bereits vorhanden oder erfolgreich erstellt. Andernfalls wird false zurückgegeben.

-1voto

Nasir Khan Punkte 653

Sie müssen zunächst prüfen, ob das Verzeichnis existiert file_exists('path_to_directory')

Dann verwenden Sie mkdir(path_to_directory) um ein Verzeichnis zu erstellen

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

Mehr über mkdir() hier

Vollständiger Code hier:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X