Frage PHP mkdir ($ recursive = true) überspringt das letzte Verzeichnis


Ich habe den folgenden Code auf einem PHP 5.2.4 (kein safe_mode) Linux-Server:

mkdir( $path, 0777, true );

wenn ich einen Pfad wie folgt eingeben:

'/path/to/create/recur/ively/'

Alle Verzeichnisse werden erstellt mit Ausnahme der letzten ... wenn ich ein anderes Verzeichnis anlege wie:

'/path/to/create/recur/ively/more/'

wieder werden alle Wege erstellt, bis auf den letzten ...

habe sowohl mit als auch ohne Schrägstriche versucht

Kann mich irgendjemand bitte hier aufklären?


11
2017-09-09 11:39


Ursprung


Antworten:


Ok die Lösungen sind wie folgt: Es gab kein Problem.

Ich habe den Code nicht isoliert getestet, sondern nur angenommen, dass der folgende Code nichts mit der Verzeichnisstruktur zu tun hat ...

Als ich herausfand, wurde das Verzeichnis später durch den Code selbst gelöscht.

Wie auch immer, Lektion hat gelernt ...


14
2017-09-23 06:56



Versuchen Sie, den nachfolgenden Schrägstrich von Ihrem Pfad zu entfernen.

Zumindest wird es in den Beispielen der mkdir Dokumentation.

Persönlich kann ich mich nicht daran erinnern, Probleme zu haben, aber normalerweise füge ich keine Schrägstriche an, also geh und probiere das aus.

AKTUALISIEREN:

Ich habe gerade Ihren Code ausprobiert und es hat jedes Verzeichnis einschließlich des letzten erstellt. Ich verwende Mac OS X 10.5. Keine Ahnung, warum es nicht für dich funktioniert :-(

Das ist der Code, den ich benutzt habe:

<?php
$path = '/Users/andre/test/bla/foo';
mkdir( $path, 0777, true );

Tut mir leid, scheint mir hier nicht weiter zu helfen.


8
2017-09-09 11:46



Wenn Sie alles versucht haben und es nicht funktioniert, fügen Sie einen Text am Ende des Pfades hinzu, wie:

$path = '/path/to/create/recur/ively/more/this_wont_be_created_anyway';

2
2017-09-09 12:05



Was ist deine PHP Version? Ist Safe_Mode eingeschaltet?

Wenn ja, könnte es sein, dass du es erlebst http://bugs.php.net/bug.php?id=43276


1
2017-09-09 12:09



Die erstellten Zwischenverzeichnisse werden basierend auf der aktuellen Umask gesetzt. Du willst so etwas

umask(0777);
mkdir($path, 0777, true);

1
2018-01-15 12:10



Funktion, die alle Verzeichnisse (Ordner) des angegebenen Pfades erstellt. Keine Notwendigkeit, Code zu schreiben, jedes Verzeichnis (Ordner) des gegebenen Pfades zu erstellen. Es erstellt alle Verzeichnisse (Ordner).

Wie: Wenn Sie Verzeichnisstruktur wie erstellen möchten
Organisationen / 1 / Benutzer / 1 /

Sie müssen diese Funktion also nur bei Verzeichnispfaden aufrufen
$ directories_path = 'Organisationen / 1 / Benutzer / 1 /';
createUploadDirectories ($ directories_path);

/*
* Method Name : createUploadDirectories
* Parameter : null
* Task : Loading view for create directries for upload
*/

if ( ! function_exists('createUploadDirectories')){
    function createUploadDirectories($upload_path=null){
        if($upload_path==null) return false;
        $upload_directories = explode('/',$upload_path);
        $createDirectory = array();
        foreach ($upload_directories as $upload_directory){
            $createDirectory[] = $upload_directory;
            $createDirectoryPath = implode('/',$createDirectory);
            if(!is_dir($createDirectoryPath)){
                $old = umask(0); 
                mkdir($createDirectoryPath,DIR_WRITE_MODE);// Create the folde if not exist and give permission
                umask($old); 
            }               
        }
        return true;
    }
}

0
2018-06-20 11:16



Sie erhalten diesen Fehler, wenn Sie den dummen Fehler machen, den ich gemacht habe, und eine Zeichenfolge übergeben, statt das numerische Literal für den Modus.

mkdir( $path, "0777", true ); // BAD - only creates /a/b

mkdir( $path, 0777, true ); // GOOD - creates /a/b/c/d

0
2018-06-26 03:18