24.09.2024
Heim / Linux-Übersicht / PHP funktioniert – Erstellen Sie einen Ordner, falls dieser noch nicht vorhanden ist. Mkdir-Funktion in PHP, Beschreibung und Beispiele. PHP erstellt einen Ordner, wenn dieser nicht existiert

PHP funktioniert – Erstellen Sie einen Ordner, falls dieser noch nicht vorhanden ist. Mkdir-Funktion in PHP, Beschreibung und Beispiele. PHP erstellt einen Ordner, wenn dieser nicht existiert

Die Funktion mkdir() erstellt einen neuen Ordner im angegebenen Verzeichnis. Wenn die Erstellung erfolgreich ist, wird True zurückgegeben. Beim Erstellen eines neuen Ordners können Sie mithilfe des Parameters $mode Zugriffsrechte darauf festlegen. Indem Sie $recursive auf True setzen, können Sie mehrere Unterordner erstellen.

PHP-Version 4 und höher.

Funktion bool mkdir(string $pathname [, int $mode [, bool $recursive [, resources $context]]])

mkdir-Funktionsparameter

$pfadnamePfad zum zu erstellenden Verzeichnis.
$modeRechte für den erstellten Ordner werden als Oktalwert mit einer obligatorischen Null an erster Stelle zugewiesen (0777). Abgesehen von der ersten Null stellen die Zahlen Zugriffsebenen für den Eigentümer, für die Gruppe des Eigentümers und für alle anderen dar.
Die Zugriffsebene wird durch die Zahlen bestimmt:
0 – Zugriff verweigert;
1 – Lesezugriff;
2 – Schreibzugriff;
4 – Ausführungszugriff.
Am häufigsten werden Rechte als zusammengesetzter Betrag angegeben, zum Beispiel:
7 – voller Zugriff (1+2+4);
5 – Lesen und Ausführen (1+4).
Der Standardwert ist 0777.
$rekursivEin boolescher Parameter, der bestimmt, ob verschachtelte Unterverzeichnisse erstellt werden können.
$KontextWird beim Arbeiten mit Streams verwendet. Hinzugefügt in PHP 5.0.0.

Beispiele für die Verwendung der mkdir-Funktion

mkdir( "neuer Ordner" );

mkdir( "../newfolder" ); // eine Ebene tiefer

mkdir("/folder1/folder2/newfolder" ); // vollständiger Pfad

mkdir( „neuer Ordner“, 0777); // Einen Ordner mit zugewiesenen Rechten erstellen

Wenn Sie mehrere Unterordner erstellen müssen, müssen Sie $recursive = True festlegen.

mkdir("folder1/folder2/newfolder" , 0777, True ); // Erstellen eines Ordners im aktuellen Verzeichnis


Die Veröffentlichung dieses Artikels ist nur mit einem Link zur Website des Autors des Artikels gestattet

In diesem Artikel beschreibe ich eine Möglichkeit, das Problem der Ordnererstellung zu umgehen mit PHP im abgesicherten Modus.
Um einen Ordner in PHP zu erstellen, gibt es eine Standardfunktion mkdir(), aber in den meisten Fällen erweist sie sich als nutzlos und viele Leute wissen davon, aber nicht viele wissen, dass man dieses Problem umgehen kann.
Alles ist sehr einfach, Sie müssen Ordner mit der integrierten Funktion erstellen PHP-Funktionen FTP.
Im Folgenden schreibe ich ausführlicher darüber.

Probleme mit mkdir() beim Erstellen eines Ordners.
Wie Sie wissen, wenn in PHP aktiviert Abgesicherter Modus(safe_mode = on), dann funktioniert das Erstellen von Ordnern (Verzeichnissen) mit mkdir() nicht. Genauer gesagt können Sie ihn erstellen, eine weitere Verwendung dieses Ordners ist jedoch nicht möglich. Sie können keine Dateien in diesen Ordner hochladen, ihn nicht umbenennen und ihn nicht löschen, selbst wenn Sie sich über FTP anmelden (in einigen Fällen können Sie ihn über FTP löschen).

Der abgesicherte Modus ist standardmäßig auf allen Servern und allen Hosting-Anbietern aktiviert. Wenn Sie nicht die Möglichkeit haben, den abgesicherten Modus zu deaktivieren, gibt es einen anderen Ausweg.

Ordner in PHP per FTP erstellen.
Fast alle Server und Hosting-Anbieter verfügen über eine aktivierte FTP-Unterstützung in PHP.
Mit Hilfe dieser Funktionen umgehen wir das Problem der Erstellung des mkdir()-Ordners.
Ein Beispiel für die Erstellung eines Ordners per FTP.

$conn_id = @ ftp_connect ("ftp.server.ru" , 21 , 5 ); // Verbindung zum FTP-Server herstellen
if($conn_id) // Wenn die Verbindung zum Server erfolgreich war, fahren Sie fort
{
$login_result = @ftp_login($conn_id, "user", "pass"); // Geben Sie Ihren Benutzernamen und Ihr Passwort für FTP ein
if($login_result) // Wenn der Server das Anmeldekennwort akzeptiert hat, fahren Sie fort
{
// Jetzt müssen Sie mit dem passiven Modus spielen, ihn ein- oder ausschalten (TRUE, FALSE)
// Wenn weitere FTP-Funktionen nicht korrekt funktionieren, versuchen Sie, diesen Parameter zu ändern (TRUE oder FALE)
ftp_pasv($conn_id, TRUE); // in diesem Fall ist der passive Modus aktiviert
ftp_mkdir($conn_id, "1/2/3"); // und die Ordnererstellung selbst
}
}
ftp_close($conn_id); // und schließen Sie die FTP-Verbindung
?>
Nun, kein großer Kommentar zum Code.
Die erste Zeile stellt eine Verbindung zum FTP-Server her. Um eine Verbindung zu einem lokalen FTP-Server herzustellen, reicht es normalerweise aus, localhost als Server anzugeben, Sie können jedoch auch die vollständige Adresse angeben.
Ob der Passivmodus aktiviert oder deaktiviert ist, hängt von den FTP-Einstellungen ab.

Seien Sie beim Erstellen eines Ordners vorsichtig, der Ordner wird aus dem FTP-Anmeldestammverzeichnis erstellt. Das heißt, die Pfade hier unterscheiden sich von den Pfaden Dateisystem und der Ordner wird so erstellt, wie er über FTP angezeigt wird.
Wenn Sie beim Erstellen eines Ordners mehrere Anhänge angeben, wie in meinem Beispiel „1/2/3“, dann werden in diesem Fall alle fehlenden Ordner erstellt. Wenn kein Ordner „1“ vorhanden ist, wird dieser erstellt und darin der Ordner „2“ und darin der Ordner „3“. Wenn bereits Zwischenordner vorhanden sind, werden nur die fehlenden erstellt.
Bevor Sie einen Ordner erstellen, können Sie ihn beispielsweise in einen Ordner verschieben


Und nach dieser Funktion können Sie einen Ordner erstellen. Wenn der Pfad zum Ordner „2/3“ ohne den führenden Schrägstrich angegeben ist, wird der Ordner relativ zu dem Ordner erstellt, in dem wir uns gerade befinden. Das heißt, der Ordner „1/2/3“ wird erstellt


Wenn Sie beim Erstellen eines Ordners einen führenden Schrägstrich (/1/2/3) angeben, wird der Ordner aus dem FTP-Stammverzeichnis erstellt, unabhängig davon, in welchen Ordner Sie verschoben haben.

Kommentare

14.10.2009 Sergej
alles Geniale ist einfach :)

12.12.2009 Viktor
Vielen Dank, alles funktioniert, aber im FTP-Client sind die erstellten Ordner nicht sofort sichtbar, man muss ihn neu starten, d.h. Trennen Sie nicht einfach die Verbindung zum Server und stellen Sie die Verbindung erneut her, sondern schließen Sie das Programm und führen Sie es erneut aus (ich verwende den FileZilla-Client).

14.12.2009 Admin
Ich denke, das ist alles FTP-Clients Zwischenspeichern von Dateien und Ordnern. Beispielsweise gibt es im Total Commander einen speziellen „Update“-Button für solche Dinge; schade, dass FileZilla diesen nicht hat.

24.01.2010 Alexander
Wie kommt es, dass es in FileZilla so etwas nicht gibt, ich habe die Version 3.2.2, die ist schon etwa ein Jahr alt und es gibt so eine Funktion und soweit ich mich erinnere, war sie das schon immer!!!

27.08.2010 Vitaly
Ordner werden mit 755 auf der rechten Seite erstellt, Sie benötigen jedoch 777.
Kann man bei der Erstellung irgendwie konfigurieren, mit welchen Rechten der Ordner per FTP erstellt wird?

27.08.2010 Admin
Vitaly, dafür gibt es eine Funktion
ftp_chmod($conn_id, 0777, $file)
Nachdem Sie einen Ordner oder eine Datei erstellt haben, verwenden Sie diese

28.08.2010 Vitaly
Danke, Admin!

12.09.2010 Andrej
Entschuldigung, warum erstelle ich nicht mehrere Verzeichnisse, nämlich:

12.06.2011 Ilja
Etwas läuft nicht gut. Die Serverprobleme:
Warnung: ftp_close() erwartet, dass Parameter 1 eine Ressource ist, ein boolescher Wert, der in /home/bos/p/h/p/phpscripts/public_html/formf.php in Zeile 19 angegeben wird

15.06.2011 Viktor
Ilya, er schreibt, dass der erste Parameter, den Sie an die Funktion ftp_close übergeben, nicht korrekt ist

29.06.2011 Alexey
Gleiches Problem wie Andrey
(Mehrere Verzeichnisse werden nicht erstellt)
ftp_mkdir ($conn_id, "1"); // so funktioniert es
aber so funktioniert ftp_mkdir ($conn_id, "1/2/3"); // nicht.
???

27.07.2011 Viktor
Alexey, seltsam, ich habe nachgesehen, es werden mehrere Ordner für mich erstellt.
Möglicherweise ist auf dem Server ein kniffliger Modus aktiviert. Dann müssen Sie Ordner einzeln erstellen. Erstellen Sie zuerst Ordner 1, geben Sie ihn dann ein und erstellen Sie Ordner 2 darin, geben Sie dann Ordner 2 ein und erstellen Sie Ordner 3 darin ...

07.11.2011 k1-801 (Dmitry ist möglich)
Und um Ordner zu löschen, soweit ich weiß, durch
rmdir_ftp($conn_id, $dir);
Also?

Und übrigens, aus irgendeinem Grund wird für mich kein Ordner erstellt (und es werden keine Fehler geschrieben ... seltsam ...)

10.03.2012 YA
Danke, sonst habe ich mich mit dieser Frage gequält.
und du verzeihst alles und Hauptsache es funktioniert

29.05.2012 Michail
Natürlich tut es mir leid. Wo soll ich diesen Code schreiben, sonst bin ich überhaupt nicht gut darin, aber ich muss unbedingt einen Ordner erstellen))

04.07.2012 Nomaq
Bei mir stimmt etwas nicht... beim ersten Mal überspringt der Code, beim zweiten Mal heißt es, dass ein solcher Ordner bereits existiert... es scheint, als würde er erstellt, ist aber auch nach einem Neustart von FTP nicht sichtbar((((
Außerdem muss ich einen Ordner erstellen, der sich nicht im selben Ordner befindet, in dem sich die PHP-Datei befindet, sondern einen Schritt zurückgehen und dann einen anderen Ordner eingeben und ihn dort erstellen. Etwas in der Art:
../folder1/new Ordner hier
Bitte helfen Sie, wenn es nicht schwierig ist) Danke)

04.07.2012 Nomaq
Ich habe die Wege herausgefunden))) Vielen Dank im Allgemeinen für den Artikel, es kommt selten vor, dass jemand richtig erklärt, was wie geht)))

27.01.2013 CiliZ
Gut gemacht, Respekt für den Artikel

05.06.2013 Wassili
Der Unternehmensordner ist das Hauptelement Unternehmensidentität Unternehmen. Es handelt sich um ein Produkt zum Anbringen einer kleinen Menge an Dokumenten und Papiermaterialien. Ordner werden sowohl innerhalb eines Unternehmens zum Aufbewahren und Verschieben von Dokumentationen als auch zu Werbezwecken verwendet. Weitere Details auf der Website: www.logodesigner.ru/papki

Tags entfernen (12)

Ich bin bei WordPress-Installationen von Bluehost auf mehrere Fälle gestoßen, in denen Fehler in meinem WordPress-Theme aufgetreten sind, weil der Ordner „uploads wp-content/uploads“ fehlte.

Anscheinend erstellt das Bluehost cPanel WP-Installationsprogramm diesen Ordner nicht, obwohl HostGator dies tut.

Daher muss ich meinem Theme Code hinzufügen, der nach dem Ordner sucht und ihn andernfalls erstellt.

Antworten

Versuchen Sie Folgendes:

If (!file_exists("path/to/directory")) ( mkdir("path/to/directory", 0777, true); )

Beachten Sie, dass 0777 bereits der Standardmodus für Verzeichnisse ist und durch die aktuelle umask noch geändert werden kann.

WordPress verfügt außerdem über eine sehr praktische Funktion wp_mkdir_p, die rekursiv eine Verzeichnisstruktur erstellt.

Referenzquelle:-

Funktion wp_mkdir_p($target) ( $wrapper = null; // das Protokoll entfernen if(wp_is_stream($target)) ( list($wrapper, $target) = explosion("://", $target, 2); ) // von php.net/mkdir vom Benutzer beigesteuerte Notizen $target = str_replace("//", "/", $target); // den Wrapper wieder auf das Ziel setzen if($wrapper !== null) ( $target ); = $wrapper . $target; // Abgesicherter Modus schlägt unter bestimmten PHP-Versionen fehl. if (empty($target)) $target = "/"; if (file_exists($target)); das existiert und erbt das $target_parent = dirname($target); " != $target_parent && ! is_dir($target_parent)) ( $target_parent = dirname($target_parent); ) // Berechtigungsbits abrufen. if ($stat = @stat($target_parent)) ( $dir_perms = $stat[ "mode"] & 0007777; ) else ( $dir_perms = 0777; ) if (@mkdir($target, $dir_perms, true)) ( // Wenn eine umask festgelegt ist, die $dir_perms ändert, müssen wir erneut setze die $dir_perms korrekt mit chmod() if ($dir_perms != ($dir_perms & ~umask())) ( $folder_parts = explosion( "/", substr($target, strlen($target_parent) + 1));<= count($folder_parts); $i++) { @chmod($target_parent . "/" . implode("/", array_slice($folder_parts, 0, $i)), $dir_perms); } } return true; } return false; }

für ($i = 1; $i

Ich benötige dasselbe für die Anmeldeseite. Ich musste ein Verzeichnis mit zwei Variablen erstellen. Das $-Verzeichnis ist der Hauptordner, in dem ich einen weiteren Unterordner mit der Lizenznummer des Benutzers erstellen wollte.

Include_once("../include/session.php"); $lnum = $session->lnum; //Benutzerlizenznummer aus Sitzungen $directory = uploaded_labels; // Name des Verzeichnisses, in dem der Ordner erstellt wird if (!file_exists($directory."/".$lnum)) ( mkdir($directory."/".$lnum, 0777, true); )

Etwas allgemeineres, wie es bei Google angezeigt wird. Während die Details spezifischer sind, ist der Titel dieser Frage allgemeiner.

/** * rekursiv einen langen Verzeichnispfad erstellen */ 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)) : false;

Könnte verbessert werden, indem eine Stoppebene bereitgestellt wird, sodass es einfach fehlschlägt, wenn es den Ordner des Benutzers oder etwas anderes verlässt, und Berechtigungen aktiviert werden.

Um einen Ordner zu erstellen, falls dieser noch nicht vorhanden ist

Berücksichtigung des Umweltproblems.

  • WordPress.
  • Webhosting-Server.
  • Vorausgesetzt, Linux führt kein PHP aus.

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

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

also können wir einfach codieren:

Erläuterung:

Wir müssen keinen Parameter übergeben oder prüfen, ob der Ordner vorhanden ist, und auch nicht den Parameter für den Übertragungsmodus, falls erforderlich. aus folgenden Gründen:

  • Der Befehl erstellt einen Ordner mit der Berechtigung 0755 (die Standardberechtigung für einen öffentlichen Ordner) oder 0777, der Standardberechtigung für den Befehl.
  • Der Modus wird ignoriert Windows-Host, auf dem PHP ausgeführt wird .
  • Der Befehl mkdir verfügt über eine integrierte Prüfung, ob der Ordner vorhanden ist. Wir müssen also nur prüfen, ob True | zurückgegeben wird FALSCH; Dabei handelt es sich nicht um einen Fehler, sondern nur um eine Warnung. Die Warnung ist auf Hosting-Servern standardmäßig deaktiviert.
  • Abhängig von der Geschwindigkeit geht es schneller, wenn die Warnung deaktiviert ist.

Dies ist eine andere Art, die Frage zu betrachten und nicht die beste oder optimale Lösung zu behaupten.

Getestet auf PHP7, Produktionsserver, Linux

Sie können auch Folgendes versuchen:

$dirpath = "Pfad/zu/Verzeichnis"; $mode = "0777"; is_dir($dirpath) || mkdir($dirpath, $mode, true);

If (!is_dir("path_directory")) ( @mkdir("path_directory"); )

Eine schnellere Möglichkeit, einen Ordner zu erstellen:

If (!is_dir("path/to/directory")) ( mkdir("path/to/directory", 0777, true); )

Du wirst es tun

Printf("Hallo %s,
", $name);

vor der Installation Kekse, was verboten ist. Sie können vor den Headern keine Daten senden, nicht einmal eine Leerzeile.

PHP verfügt über eine einzige Funktion – mkdir(), mit der Sie Verzeichnisse auf dem Website-Server erstellen können, die im Haushalt manchmal so notwendig sind. Wenn Sie beispielsweise ein neues Material erstellen, müssen Sie einen Ordner dafür erstellen, in den Sie wiederum mithilfe Ihres CMS alle erforderlichen Dateien hochladen.

Mkdir("/path/to/my/dir", 0700);

Diese. In einem bestimmten Verzeichnis erstellen wir einen neuen Ordner und stellen beispielsweise dessen Modus auf Modus 0700 ein. Um beispielsweise Dateien in den Ordner schreiben zu können, ändern wir den Modus auf 0777.

Aber hier entsteht das Problem mit mkdir(). Dabei PHP-Skript Wenn die Serverfunktion „safe_mode“ aktiviert ist, wird der Eigentümer (UID) überprüft. Wenn der Eigentümer des Skripts und des Ordners nicht übereinstimmen, können Sie möglicherweise beispielsweise keine Datei in das erstellte Verzeichnis schreiben oder eine Datei löschen Datei darin oder beispielsweise per FTP können Sie den Ordner selbst nicht löschen.

Es gibt jedoch eine elegantere Lösung für dieses Problem, ohne den Hoster bitten zu müssen, die Funktion „safe_mode“ für Sie zu deaktivieren (diese Funktion ist aus Sicherheitsgründen auf absolut allen Hosting-Sites standardmäßig aktiviert). Grundsätzlich bieten kostenpflichtige Hosting-Dienste auch Zugang zu FTP, und damit beginnen wir.

$conn_ftp = @ftp_connect("your_ftp_server", 21, 5);

Die erste Variable in der Funktion ist die Adresse Ihres FTP-Servers, die zweite ist der Port, über den Sie eine FTP-Verbindung herstellen, und die letzte ist das zulässige Verbindungs-Timeout. Ein wenig zum Timeout, es ist für nachfolgende Netzwerkvorgänge erforderlich; wenn Sie es nicht eingeben, wird der Standardwert auf 90 Sekunden eingestellt. Nach der Verbindung prüfen wir, ob die Verbindung erfolgreich war und senden den Login und das Passwort:

If($conn_ftp) // Verbindung war erfolgreich ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // Geben Sie Ihren Login und Ihr Passwort für FTP ein if($login_result) // Login- und Passwortüberprüfung erfolgreich success(ftp_pasv($conn_ftp, TRUE);))

Nach Überprüfung des Logins und Passworts müssen wir uns für den Passivmodus entscheiden und diesen auf TRUE oder FALSE setzen – dies ist notwendig, wenn weitere FTP-Funktionen nicht korrekt funktionieren. Nachdem wir nun den passiven Modus definiert haben, können wir unsere Ordner erstellen. Ich werde alle Funktionen beschreiben, die für Sie in Zukunft nützlich sein könnten:

$file = ftp_mkdir($conn_ftp, "public_html/materials/345"); //Verzeichnis 345 im Ordner „Materialien“ erstellen, wenn der Ordner „Materialien“ nicht existiert, //wird er auch erstellt, das Gleiche gilt für den Ordner „public_html“ (dieses Verzeichnis //wird angezeigt, damit Sie den gesamten Pfad sehen können, andernfalls ist es so). nur ein Ordner mit der Site) ftp_chdir($conn_ftp, "public_html/materials"); //Wenn Sie definitiv einen Materialordner haben, müssen Sie nicht den gesamten //Pfad schreiben, Sie können einfach zuerst dorthin gehen und dann einen Ordner 345 darin erstellen, indem Sie //den folgenden Code verwenden: ftp_mkdir ($conn_ftp, "345") ftp_chmod($ conn_ftp, 0777, $file); //Alle Ordner werden standardmäßig mit dem Modus 0755 erstellt. Mit diesem Befehl können Sie ihn //in 0777 ändern, wodurch Sie Dateien zum erstellten Ordner hinzufügen können.

Jetzt gebe ich ein vollständiges Beispiel für den Arbeitscode, damit Sie sehen können, wie alles aussieht, zum Beispiel meiner:

$dir_name = time(); //Hier erstelle ich den Ordnernamen basierend auf dem Zeitpunkt, zu dem das Skript gestartet wurde $conn_ftp = @ftp_connect("your_ftp_server", 21, 5); if($conn_ftp) // Verbindung war erfolgreich ( $login_result = @ftp_login($conn_ftp, "user", "pass"); // Geben Sie Ihren Login und Ihr Passwort für FTP ein if($login_result) // Login- und Passwortüberprüfung erfolgreich Erfolg ( ftp_pasv ($conn_ftp, TRUE); ftp_chdir ($conn_ftp, "public_html/materials"); ftp_mkdir ($conn_ftp, $dir_name); ftp_chmod($conn_ftp, 0777, $dir_name); ) )

Es lohnt sich auch, ein wenig über die Angabe von Verzeichnissen beim Erstellen zu sagen; wenn Sie am Anfang einen Schrägstrich angeben, wird der Ordner relativ zum FTP-Root erstellt. Wenn Sie eine Verbindung zu einem FTP-Server herstellen, stellen Sie immer eine Verbindung zum Stammverzeichnis her. Beachten Sie dies.