snoop: Wie macht man mit PHP nichts?

Hallo Forum!

Ich habe kaum Ahnung von PHP und meine Lösungen sind eigentlich immer zusammengesuchte Bausteine fremder Scripts.

Momentan möchte ich eine Thumbnail-Galerie bauen.
Dazu fände ich es praktisch, die Thumbnails nur einmal erstellen zu lassen. Also frage ich das Vorhandensein des Thumbnailordners ab und binde bei Nichtvorhandensein die Thumbnailfunktion ein.

Was aber, wenn der Ordner schon da ist? Dann soll ja nichts gemacht werden?

if (file_exists($thumbnailordner)) {
    ???                                    <---
} else {
    include_once("./thumbsmachen.php");
}

Ich habe so sachen wie die oder exit gefunden, aber die verhindern scheinbar auch jede weitere PHP-Ausführung, was aber blöd ist, weil ja anschließend noch der Teil kommt, wo die eigentliche Galerie generiert wird.

Ich vermute mal, meine Frage ist ganz schön doof. Aber ich weiß einfach auch nicht mehr, wonach ich suchen soll.

snoop

  1. Hallo snoop,

    negiere einfach und verzichte auf else:
    if (!file_exists($thumbnailordner)) {

    include_once("./thumbsmachen.php");
    }

    Gruß aus Berlin!
    eddi

  2. Hallo snoop.

    Was aber, wenn der Ordner schon da ist? Dann soll ja nichts gemacht werden?

    if (file_exists($thumbnailordner)) {
        ???                                    <---

    Wie wäre es mit einer einfachen Negation und dem Verzicht auf den else-Zweig?

    if (!file_exists($thumbnailordner)) {  
      include_once("./thumbsmachen.php");  
    }
    

    Einen schönen Samstag noch.

    Gruß, Ashura

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    mathbr:del.icio.us/ mathbr:w00t/
  3. Hallo snoop

    Was aber, wenn der Ordner schon da ist? Dann soll ja nichts gemacht werden?

    if (file_exists($thumbnailordner)) {
        ???                                    <---
    } else {
        include_once("./thumbsmachen.php");
    }

    Ganz einfach, geh' die Geschichte andersherum an:

      
    if (!file_exists($thumbnailordner)) {  
        // Wenn der Ordner noch nicht exisitert, lege ihn an  
        include_once("./thumbsmachen.php");  
    }
    

    und auf den else-Zweig verzichtest Du einfach. Sonst könntest Du den Block einfach leer lassen. Das ist aber nicht so schön.

    Freundliche Grüße

    Vinzenz

  4. Hallo schon wieder!

    Sowas darf man einfach? If ohne else?
    Aber ihr scheint euch ja sehr einig zu sein, also danke euch!

    snoop

    1. Hallo snoop,

      Sowas darf man einfach? If ohne else?

      Oh weh! Du solltest dich dringend mal näher mit der Materie beschäftigen, bevor du weitermachst. Insbesonderen weil du sonst sehr wahrscheinlich Sicherheitslücken in deinen Scripten haben willst. Ich fand damals http://tut.php-q.net/ ganz hilfreich.

      Schöne Grüße,

      Johannes

      --
      ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
  5. Hello,

    Was aber, wenn der Ordner schon da ist? Dann soll ja nichts gemacht werden?

    if (file_exists($thumbnailordner)) {

    abgesehen von den anderen Antworten noch ein Hinweis:
    file_exists() prüft  nicht das Vorhandensein eines Directorys, sondern eines Pfades.
    Die Funktion müsste also eigentlich path_exists() heißen!

    Um sicherzugehen, dass es kein File oder Link oder sonstiges ist, müsste die Abrage also lauten:

    if (file_exists($thumbnailordner) and is_dir($thumbnailordner))
      {

    }

    oder negiert

    if (!file_exists($thumbnailordner) or !is_dir($thumbnailordner))
      {

    }

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo Tom.

      file_exists() prüft  nicht das Vorhandensein eines Directorys, sondern eines Pfades.

      Wenn man den Pfad mit abschließendem Slash angibt, dürfte aber zwangsläufig auf Vorhandensein eines Verzeichnisses geprüft werden, oder? Der Slash ist in Dateinamen ja nicht erlaubt.

      Einen schönen Samstag noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      mathbr:del.icio.us/ mathbr:w00t/
      1. Hello,

        file_exists() prüft  nicht das Vorhandensein eines Directorys, sondern eines Pfades.

        Wenn man den Pfad mit abschließendem Slash angibt, dürfte aber zwangsläufig auf Vorhandensein eines Verzeichnisses geprüft werden, oder? Der Slash ist in Dateinamen ja nicht erlaubt.

        Das wird wiederum vom OS des Servers abhängig sein.
        Bei Windows könnte es sein (cih kann es nicht prüfen), dass man dann auf

        file_exists('\pfad\NUL')

        prüfen muss. Zumindest war das bei einigen Derivaten so.

        Da es weder polymorph noch sicher wäre, würde ich mich nicht darauf einlassen.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

    2. Heißa, Tom,

      Um sicherzugehen, dass es kein File oder Link oder sonstiges ist, müsste die Abrage also lauten:
        if (file_exists($thumbnailordner) and is_dir($thumbnailordner))

      Wieso moppelst du das doppelt? ;-)
      is_dir() überprüft doch schon, ob es den Pfad gibt. Es gibt aber auch true zurück, wenn es sich um einen Link handelt, sofern es sich eben um einen Link auf ein Verzeichnis gibt. Aber warum sollte man auch ausschließen wollen, dass es sich um einen Link handelt?

      Gautera!
      Grüße aus Biberach Riss,
      Candid Dauth

      --
      Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs – von der Lage her ideal, auch für andere Vorhaben im Urlaub. Ferienwohnungen-Herrenberg.com.
      http://cdauth.de/
      1. Hello,

        Wieso moppelst du das doppelt? ;-)

        Kam mir auch in den Sinn... aber leider erst nach dem Abschicken.

        is_dir() überprüft doch schon, ob es den Pfad gibt. Es gibt aber auch true zurück, wenn es sich um einen Link handelt, sofern es sich eben um einen Link auf ein Verzeichnis gibt. Aber warum sollte man auch ausschließen wollen, dass es sich um einen Link handelt?

        Ich halte allerdings von diesen ganzen "Prüffunktionen" in PHP nichts, da sie alle die wesentlichen Aussagen des OS verschlucken. Besser wäre es, einfach den geplanten Zugriff zu wagen und dann einen qualifizierten Statuscode zurückzubekommen. Leider habe ich immer noch nicht herausgefunden, an welcher Stelle in PHP ich schrauben muss, um anstelle eines Strings in $php_errormsg (wenn man 'tack_errors' = ON benutzt) eine eindeutige Fehlernummer zu erhalten. Aus dem OS kommt die bestimmt an, wird dann aber wieder mühsam in einen Text verwandelt, den ich dann wieder mühsam in einen eindeutigen Statuscode zurückverwandele...

        Win weiterer Nachteil dieser Prüffunktionen besteht darin, dass keine atomaren Zugriffe entstehen, wenn man erst prüft, und dann irgendwann tausende von Nanosekunden später erst den eigentlichen Zugriff durchführt.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

  6. Hi there,

    if (file_exists($thumbnailordner)) {
        ???                                    <---
    } else {
        include_once("./thumbsmachen.php");
    }

    Zu all den richtigen Antworten hinzu: es wäre syntaktisch immer noch richtig, Anweisungen zwischen den geschwungenen Klammern einfach leerzulassen. Das kann beim Testen brauchbar sein oder wenn man erst später etwas für diesen Fall vorsehen will.

    Im Normalfall aber ist die Negation natürlich besser...