Jonas2: FRage zu glob (php)

Hallo,

kann man im Ausdruck

$array = glob(".."."/*",GLOB_ONLYDIR);

direkt übergeben, dass man z.b. nur die verzeichnisse benötigt, die mit "xx" beginnen?

Schönen Tag an alle, Jonas

  1. Hallo,

    kann man im Ausdruck

    $array = glob(".."."/*",GLOB_ONLYDIR);
    

    direkt übergeben, dass man z.b. nur die verzeichnisse benötigt, die mit "xx" beginnen?

    Schönen Tag an alle, Jonas

    Zusatz:

    Wenn

    $array = glob(".."."/xx*",GLOB_ONLYDIR);
    

    das macht, ok. Ich hatte hierbei einen Fehler, wobei ich nicht weiß, ob ich mich da verschrieben hatte, daher meine Nachfrage hier.

    Jonas

    1. Tach!

      Wenn

      $array = glob(".."."/xx*",GLOB_ONLYDIR);
      

      das macht, ok. Ich hatte hierbei einen Fehler, wobei ich nicht weiß, ob ich mich da verschrieben hatte, daher meine Nachfrage hier.

      Die Fehlermeldung war nicht aussagekräftig? Oder war es ein logischer Fehler bei korrekter PHP-Syntax?

      Du kannst auch die Stringverknüpfung weglassen. "../xx*" ist dasselbe wie dein Konstrukt.

      dedlfix.

      1. @Jonas2, @dedlfix

        Wenn

        $array = glob(".."."/xx*",GLOB_ONLYDIR);
        

        das macht, ok. Ich hatte hierbei einen Fehler, wobei ich nicht weiß, ob ich mich da verschrieben hatte, daher meine Nachfrage hier.

        Die Fehlermeldung war nicht aussagekräftig? Oder war es ein logischer Fehler bei korrekter PHP-Syntax?

        Du kannst auch die Stringverknüpfung weglassen. "../xx*" ist dasselbe wie dein Konstrukt.

        Ich würde zudem noch empfehlen, Pfade nach Möglichkeit per __DIR__ zu „verankern“.

        $array = glob(__DIR__ . '/../xx*', GLOB_ONLYDIR);
        

        __DIR__ wird bei der Ausführung durch den absoluten Pfad zum Verzeichnis der Datei ersetzt, in der das __DIR__ steht (ohne abschließenden Slash, daher muss der eingefügt werden).

        Das bedeutet also in diesem Fall, dass im übergeordneten Verzeichnis der Skriptdatei gesucht werden soll.

        Aber bedeutet ein reines "../xx*" das nicht auch?

        Jain. Das ist eine rein relative Angabe, die in Bezug zum aktuellen Arbeitsverzeichnis ausgewertet wird. Das Arbeitsverzeichnis ist – bei Aufruf über den Webserver – in der Regel dasjenige Verzeichnis, in dem sich die zuerst aufgerufene PHP-Datei befindet. Das ist bei Webservern „verlässlich genug“™, aber um Probleme damit generell zu vermeiden, lohnt es sich auch dort, semantisch klar zu trennen, ob „relativ zum Arbeitsverzeichnis“ oder „relativ zum Verzeichnis der Datei, in der der Code steht“ (__DIR__-Variante) gemeint ist. Bei Web-Anwendungen ist meist Letzteres (direkt oder indirekt) gemeint.

        Das würde es zum Beispiel auch vereinfachen, den glob-Code in zwei extern aufrufbaren PHP-Dateien in unterschiedlichen Verzeichnissen (= unterschiedliche Arbeitsverzeichnisse) zu inkludieren. (Wobei das ein reichlich akademisches Beispiel ist.)

        Bei in PHP geschriebenen Konsolenanwendungen (darunter fallen potenziell auch Cronjobs) ist es ganz wichtig, die Sache mit dem Arbeitsverzeichnis und __DIR__ korrekt zu beachten, da dort das Arbeitsverzeichnis fast immer ein Verzeichnis ist, das dem PHP-Code unbekannt ist.

        Andererseits ist es bei Konsolenanwendungen dann wiederum so, dass manchmal tatsächlich das Arbeitsverzeichnis in der Anwendungslogik gewünscht ist. Man könnte beispielsweise ein Skript schreiben, das den Inhalt des aktuellen Arbeitsverzeichnisses auflistet (so was wie ls oder dir unter Windows).

  2. Tach!

    kann man im Ausdruck

    $array = glob(".."."/*",GLOB_ONLYDIR);
    

    direkt übergeben, dass man z.b. nur die verzeichnisse benötigt, die mit "xx" beginnen?

    Ja, man kann Namensteile und Jokerzeichen gemeinsam angeben. Das Handbuchbeispiel zeigt, wie man Dateien mit bestimmten Endungen finden kann, und nach demselben Prinzip kann man auch bestimmte Anfänge finden.

    dedlfix.