Prüfen ob Bild vorhanden ist...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Prüfen ob Bild vorhanden ist...

    Hi,

    ich möchte per PHP prüfen ob ein Bild existiert bevor ich es anzeigen lasse. Dazu habe ich vorher mit file_exists() gearbeitet. Dies geht aber nur wenn das Bild auf meinem Server liegt und ich es direkt aufrufen kann, also ohne http://www. etc...

    Gibt es auch eine Möglichkeit Bilder zu kontrollieren die nicht auf meinem Server liegen, sondern irgendwo extern?

  • #2
    Darf man fragen, warum du das prüfen willst?

    Kommentar


    • #3
      Klar... darfst du...

      Es kann zu deinem Produkt in einem Shop bis zu 6 Bilder geben. Der Bildername ist dann ARTIKELNUMMER-1.jpg, ARTIKELNUMMER-2.jpg usw.

      Da ich nun einen zweiten Shop eröffnet habe und dieser nicht auf dem gleichen Webspace liegt kann ich nicht mehr mit file_exists() arbeiten...

      Kommentar


      • #4
        Die sparsamste Methode wäre wohl ein HEAD Request.
        Wir werden alle sterben

        Kommentar


        • #5
          Bräuchte einen Ansatz... wie mache ich das? Danke!

          Kommentar


          • #6
            In 2 Minuten hast du Google beauskunftet und die HTTP Spezifikation gelesen?
            Glückwunsch!
            Wir werden alle sterben

            Kommentar


            • #7
              Also ich habe nun mal mehrere Sachen ausprobiert, aber diese hier scheint mir am ehesten geeignet...

              Problem ist nur das ich ständig einen 400 Bad Request bekomme und ich nicht verstehe warum. Der Pfad stimmt und die URL stimmt. Was läuft da schief?

              PHP-Code:
              <?php
              function headRequest($domain$url) {
                  
              $fp fsockopen($domain80);    

                  
              fwrite($fp"HEAD ".$url." / HTTP/1.0\r\n");
                  
              fwrite($fp"\r\n"); // Request beenden

                  
              while(!feof($fp)) {
                      
              $buffer fread($fp1025);
                      echo 
              $buffer;
                  }    
                  
              fclose($fp); // Verbindung beenden
                  
                  
              if(ereg("HTTP/1.1 200 OK"$buffer)) {
                      return 
              1;
                  }
                  else {
                      return -
              1;
                  }
              }

              $tmp headRequest("www.example.com""/artikelbilder/M23239898.jpg")
              print 
              $tmp;
              ?>

              Kommentar


              • #8
                HTTP/1.1 ?
                Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                Kommentar


                • #9
                  nee, geht leider auch nicht...

                  Kommentar


                  • #10
                    PHP-Code:
                    "HEAD ".$url." / HTTP/1.0\r\n"); 
                    Das Slash weg!

                    Kommentar


                    • #11
                      Original geschrieben von BoFiaZ
                      Also ich habe nun mal mehrere Sachen ausprobiert, aber diese hier scheint mir am ehesten geeignet...

                      Problem ist nur das ich ständig einen 400 Bad Request bekomme und ich nicht verstehe warum. Der Pfad stimmt und die URL stimmt. Was läuft da schief?
                      Einiges: Zuerstmal muss der angefrage Server den HEAD-Request auch unterstützen. Manche tun das einfach nicht.

                      Wenn du die Handbuchseite zu fsockopen() durchforstest, wirst du übrigens einige Beispiele finden, die zeigen, wie ein HEAD-Request angewandt wird (im Browserfenster nach "HEAD" suchen. z.B.:
                      file://localhost/E:/data/info-rsrc/w...open.php#75388

                      PHP-Code:
                      <?php
                      function headRequest($domain$url) {
                          
                      $fp fsockopen($domain80);    

                          
                      fwrite($fp"HEAD ".$url." / HTTP/1.0\r\n");
                          
                      fwrite($fp"\r\n"); // Request beenden
                      Benötigt der Zielserver möglicherweise einen Host-Header, um die Anfrage an den richtigen Server weiterzuleiten?

                      PHP-Code:
                          while(!feof($fp)) {
                              
                      $buffer fread($fp1025);
                              echo 
                      $buffer;
                          } 
                      Sooo einfach ist das bei HTTP-Verbindungen nicht. Du solltest tunlichst den Rückgabewert von fread() prüfen. Manchmal ist der nämlich kleiner als der übergebene length-Parameter (bei dir 1025). Dann musst du nochmal "nachhaken".

                      PHP-Code:
                          fclose($fp); // Verbindung beenden
                          
                          
                      if(ereg("HTTP/1.1 200 OK"$buffer)) {
                              return 
                      1;
                          }
                          else {
                              return -
                      1;
                          }

                      Wenn du eine HTTP/1.1-Anfrage stellst, darfst du nicht erwarten, dass eine HTTP/1.1-Response zurückkommt. Du solltest dich für eine von beiden Methoden entscheiden. ;-)

                      Und ereg-Funktionen soll es ab PHP 5.3 nicht mehr geben. Da würde ich langsam aber mal auf
                      preg_match() umsteigen.
                      Zuletzt geändert von fireweasel; 09.01.2009, 20:39.
                      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                      Kommentar

                      Lädt...
                      X