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

4voto

ULIDU THEERAKE Punkte 59

Hier ist es.

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

0 Stimmen

PHPStorm (mit PHP Inspections) gibt genau diesen Vorschlag ;-) btw. man kann das äußere if in das innere einfügen: if (!is_dir(...) && !mkdir(...) && !is_dir(...)) ...

0 Stimmen

@aProgger If sieht besser aus, wenn man sie trennt. Viele Programmierer werden die if-Anweisungen nicht zusammenführen.

0 Stimmen

Das ist eine Frage des Geschmacks. Ich würde sie zusammenlegen und sogar die Hosenträger weglassen, um einen One-Liner zu bekommen. Aber ich bin neugierig. Würdest du nur das erste !is_dir oder auch das letzte trennen?

4voto

Usman Ahmed Punkte 2245

Für Ihre spezielle Frage zu WordPress verwenden Sie den folgenden Code:

if (!is_dir(ABSPATH . 'wp-content/uploads')) wp_mkdir_p(ABSPATH . 'wp-content/uploads');

Funktion Referenz: WordPress wp_mkdir_p . ABSPATH ist die Konstante, die den Pfad zum Arbeitsverzeichnis von WordPress zurückgibt.

Es gibt eine weitere WordPress-Funktion namens wp_upload_dir() . Es gibt den Pfad des Upload-Verzeichnisses zurück und erstellt einen Ordner, wenn dieser noch nicht existiert.

$upload_path = wp_upload_dir();

Der folgende Code ist für PHP im Allgemeinen .

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

Referenz der Funktion: PHP is_dir()

1 Stimmen

Für die Verwendung von WordPress ist der sicherere Weg die Verwendung von wp_get_upload_dir() Funktion.

0 Stimmen

@IvijanStefanStipic Können Sie erklären, warum Sie meinen, dass mein Code unsicher ist? Ich habe absichtlich die Funktion wp_get_upload_dir() nicht verwendet. So kann der Benutzer jeden beliebigen Ordner erstellen, nicht nur den Uploads-Ordner.

1 Stimmen

Diese Funktion gibt das Basisverzeichnis und die Basisurl des Upload-Ordners zurück. Wenn jemand Sicherheits-Plugin oder CDN verwenden und wollen, dass zu ändern, wird es Relais zu dieser Funktion. Ich entwickle WP pligins arround 8 Jahre und vertrauen Sie mir, in der Produktion müssen Sie im Voraus zu denken. Sie müssen nur Ihre benutzerdefinierten Ordner hinzufügen und erstellen, wenn nicht vorhanden.

3voto

simhumileco Punkte 26451

Sie können auch versuchen:

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

3voto

WPDev Punkte 161

So erstellen Sie einen Ordner, wenn er noch nicht vorhanden ist

Berücksichtigen Sie das Umfeld der Frage.

  • WordPress.
  • Webhosting-Server.
  • Vorausgesetzt, es ist Linux und nicht Windows, auf dem PHP läuft.

Und ich zitiere aus: mkdir

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

Im Handbuch heißt es, dass der einzige erforderliche Parameter die $pathname !

Wir können also einfach kodieren:

<?php
    error_reporting(0); 

    if(!mkdir('wp-content/uploads')){
        // Todo
    }
?>

Erläuterung:

Aus den folgenden Gründen müssen wir keinen Parameter übergeben oder prüfen, ob der Ordner existiert, oder sogar den Modus-Parameter übergeben, wenn er nicht benötigt wird:

  • Der Befehl erstellt den Ordner mit 0755 (die Standardberechtigung des gemeinsamen Hosting-Ordners) oder 0777 die Standardeinstellung des Befehls.
  • mode wird ignoriert bei Windows-Hosting mit PHP .
  • Bereits die mkdir Befehl hat einen eingebauten Checker, der überprüft, ob der Ordner existiert; wir müssen also nur die Rückgabe True|False überprüfen; und es ist kein Fehler; es ist nur eine Warnung, und Warnung ist auf den Hosting-Servern standardmäßig deaktiviert.
  • Was die Geschwindigkeit betrifft, so ist diese schneller, wenn die Warnung deaktiviert ist.

Dies ist nur eine andere Art und Weise, die Frage zu betrachten, und kein Anspruch auf eine bessere oder optimale Lösung.

Es wurde auf PHP 7, einem Produktionsserver und Linux getestet.

3voto

Nikunj Kathrotiya Punkte 853
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/newfolder';
if (! is_dir($upload_dir)) {
   mkdir( $upload_dir, 0700 );
}

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