Michael: suche php funktion

hi,

ich habe eine frage und zwar ob es in php eine funktion gibt die erkennt ob ein bild was normalerweise angezeigt werden soll, auf dem server zu finden ist oder nicht und dann entweder das bild ausgibt oder eine fehlermeldung...! hab schon halb google durchsucht weiß aber gar net wonach ich richtig suchen soll...! :-/ wäre um eine antwort froh!

mfg michi

  1. versuchs mal mit file_exists($filename);

    schönen gruß
    .sea.monkey.

    1. Danke!!

      mfg michi

      1. ähmm klappt soweit hab aber noch ne frage... und zwar sieht das nun so aus bei mir:

        $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';

        if(file_exists($datei))
        {

        .
        .
        .
        .

        }

        else
        {

        echo "...";

        }

        es kann nun aber sein das, dass bild ein *.jpg und nicht ein *.JPG format hat! klar könnte ich noch ne if abfrage machen aber in klammer des if teiles ist sau mäßig viel code... geht das auch einfacher?

        mfg michi

        1. Hello,

          das Du Dir das Problem bereits beim Hochladen des Files schaffst, musst Du es auch dort vermeiden.
          Wenn Du also den gewünschten Dateinamen beim Hochladen bereits einheitlich in Kleinbuchstaben umwandelst, dann prüfst ob das File mit diesem Namen schon vorhanden ist (um ggf. Überschreiben zu vermeiden), es dann speicherst (mit move_uploaded_file() verschiebst), dann hast Du bei der Anzeige später kein Problem mehr.

          if(file_exists($pfad/$dateiname)
               and is_readable($pfad/$dateiname)
               and is_file($pfad/$dateiname)
               and getimagesize($pfad/$dateiname)
            {
              show($pfad/$dateiname);
            }
            else
            {
              show($pfad/$error_picture);
            }

          Je nachdem, ob es sich um ein Script zur direkten Ausgabe von Bildern oder um ein Script zur Erzeugung von HTML-Text handelt, musst Du im Else-Zweig ebenfalls ein Bild oder aber den Pfad auf ein Bild ausgeben. Du kannst aber NICHT den Pfad auf ein Bild ausgeben (<img src="$pfad/$dateiname" alt="Partybild" />), wenn du im if-Zweig ein Bild ausgegeben hast.

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

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. ähmm was ist denn jetzt genau gemeint mit:

            and is_readable($pfad/$dateiname)
                 and is_file($pfad/$dateiname)
                 and getimagesize($pfad/$dateiname)

            was muss ich davon gebrauchen?

            mfg michi

            1. Hello,

              ähmm was ist denn jetzt genau gemeint mit:

              and is_readable($pfad/$dateiname)
                   and is_file($pfad/$dateiname)
                   and getimagesize($pfad/$dateiname)

              was muss ich davon gebrauchen?

              Alles!

              http://de.php.net/manual/de/function.file-exists.php
                liefert die Existenz einer DATEI oder eines VERZEICHNISSES mit dem Namen

              http://de.php.net/manual/de/function.is-file.php
                prüft, ob es denn eine Datei ist

              http://de.php.net/manual/de/function.is-readable.php
                prüft, ob die datei auch gelesen werden darf

              [http://de.php.net/manual/de/function.getimagesize.php]
                prüft, ob es sich überhaupt um ein Bild handelt

              and is_readable($pfad/$dateiname)
                    and is_file($pfad/$dateiname)
                    and ($_pic_specs = getimagesize($pfad/$dateiname))

              wäre noch intelligenter, da man das Array mit den Picture Specifications dann gleich an
                die Anzeigefunktion übergeben könnte, um dem Browser den passenden MIME-Typ
                mitteilen zu können und nicht einen geratenen.

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

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. also muss es bei mir lauten:

                $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
                $datei2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';

                if(file_exists($datei) and file_exists($datei2))

                {

                .
                .
                .
                .

                }

                else
                {

                echo "...";

                }

                mfg michi

                1. Hello,

                  also muss es bei mir lauten:

                  $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
                  $datei2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';

                  if(file_exists($datei) and file_exists($datei2))

                  Nein.
                  In diesem Fall müsstest Du ein "inclusiv oder" verwenden, also "or".

                  Aber es ist für Dich besser, das Verzeichnis einmal zu überarbeiten und alle  Datein auf einheitliche Klien- oder Großschreibung umzustellen. Klienschreibung ist zu bevorzugen, da Billy the Gator das bei seinen Betriebssystemen ja seit Windows XY irgendwann als Default gewählt hat und kaum noch jemand mit DOS im Internet surfen wird und damit Files uploaded.

                  Für die Überarbeitung kannst Du Dir natürlich eine Funktion schreiben:

                  Alle Dateinamen des Verzeichnisses mit glob() einlesen
                    Dateinamen umandeln,
                    prüfen ob der umgewandelte Name schon vorhanden ist
                    wenn nicht vorhanden, File umbenennen mit rename()
                    wenn vorhanden, Name in eine Liste schreiben
                    Liste vornehmen, um einen neuen Namen zu vergeben, der noch nicht da ist.

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

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. das ich "o"r nehmen muss ist mir eben auch aufgefallen and ist ja quatsch immerhin soll eine der dateien ausgelesen werden im besten fall immerhin handelt sich um deine datei die dann ja folglicherweise nicht zwei endungen haben kann! aber wieso "or" und nicht "||" ??

                    P.S. ich wandele schons eit längeren immer die files um! aber habe so viele in so vielen ordnern, da kann es sein das man die eine oder andere schon mal vergessen hat deswegen diese sicherheit...!

                    mfg michi

                    1. Hello,

                      das ich "o"r nehmen muss ist mir eben auch aufgefallen and ist ja quatsch immerhin soll eine der dateien ausgelesen werden im besten fall immerhin handelt sich um deine datei die dann ja folglicherweise nicht zwei endungen haben kann! aber wieso "or" und nicht "||" ??

                      Der Unterschied liegt bei PHP nur in der Priorität der Operatoren. Bei || solltest Du sicherheitshalber nicht mit Klammern sparen. http://www.php.net/manual/de/language.operators.php

                      Bei JavaScript war ich neulich allerdings reingefallen, denn mit "or" kann das nix anfangen...

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

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      1. ok habs jetzt so geregelt:

                        $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
                        $datei_2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';

                        if(file_exists($datei) || file_exists($datei_2))
                        {
                        .
                        .
                        .
                        .

                        weil ich eh nie mit klammern spare...

                        besten dank für die ganzen tipps!

                        mfg michi

                        1. Hallo

                          $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
                          $datei_2 = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';

                          if(file_exists($datei) || file_exists($datei_2))
                          {

                          weil ich eh nie mit klammern spare...

                          Gerade hier hast du keine zusätzliche Klammer, die deine Behauptung,
                          du spartest nicht mit selbigen, stützen würde. :-)
                          Vielleicht wäre auch die Umstellung der Abfrage effektiver:

                          $datei = "partybilder/".$party_ident."/".$pic_ident; // ohne Angabe der Endung

                          if (file_exists($datei.".JPG") or file_exists($datei.".jpg"))

                          Die Bedingung wird zwar textmäßig etwas länger, du arbeitest aber nur noch
                          mit _einer_ Variable für den Pfad zum Bild.

                          Tschö, Auge

                          --
                          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                          (Victor Hugo)
            2. Hallo

              ähmm was ist denn jetzt genau gemeint mit:

              and is_readable($pfad/$dateiname)
                   and is_file($pfad/$dateiname)
                   and getimagesize($pfad/$dateiname)

              was muss ich davon gebrauchen?

              Das "and" sagt's schon: alles.

              • file_exists fragt, ob die Datei _vorhanden_ ist
              • is_readable prüft, ob eine Datei lesbar ist
              • is_file prüft, ob der Dateiname eine reguläre Datei ist
              • getimagesize liest die Höhe und Breite eines Bildes aus

              Wenn also eine der Bedingungen nicht zutrifft, also false zurückgibt,
              ist es keine Datei, geschweige denn eine Bilddatei.

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
          2. also muss es bei mir lauten:

            $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.JPG';
            $datei = 'partybilder/' . $party_ident . '/' . $pic_ident . '.jpg';

            if(file_exists($datei) and file_exists($datei2))

            {

            .
            .
            .
            .

            }

            else
            {

            echo "...";

            }

            mfg michi

    2. morgens,

      versuchs mal mit file_exists($filename);

      Das ist korrekt, reicht aber nicht. Du solltest Alternativen anbieten, falls die Datei existiert  -  oder eben nicht existiert. Also schematisch sowas:

      if (file_exists($filename)) {mach irgendwas damit}
        else {mach was anderes}

      Grüße aus Berlin

      Christoph S.