Link ein Bild?

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

  • Link ein Bild?

    Hab folgendes Problem:

    möchte erfahren ob es sich bei einem link, zB http://www.IhreDomain.de/IhrBild.jpg um ein Bild handelt oder nicht. Hab es mit getImageSize("http://www.IhreDomain.de/IhrBild.jpg") versucht aber das führte zu einem fatalen error. Hab jetzt das Problem mit einer "stumpfen" methode gelöst, indem ich gucke ob die letzten 3 zeichen "jpg" oder "gif" sind Ich bin mir aber sicher, dass es ne bessere und sichere methode gibt und wäre über jeden tipp sehr dankbar.

    xmongox

  • #2
    Hmm... Wenns keine Traffic-Probleme o.ä. gibt: Bild ziehen und dann mit getimagesize() überprüfen.

    Kommentar


    • #3
      In PHP gibt es eine Funktion, womit man Dateien binär auslesen kann. Du musst dann einfach nur die header checken, das müsste reichen.

      Am besten du überprüft die gängigen Formate wie jpg, gif und png.
      Alles was du brauchst ist:

      fread()
      JPEG Header Informationen

      Viel Glück.

      Kommentar


      • #4
        danke schonmal, mal schauen was sich da machen lässt. Ach ja noch ne schnelle und kurze frage: Wie zieht man denn die bilder auf den rechner?

        Kommentar


        • #5
          Je nachdem, was man mit der Resource vor hat, kann man auch einfach den Content-Type glauben, den der Server angibt. Nachfolgendes Script erzeugt möglichst wenig Traffic, indem es erstmal nur den Header analysiert. Enthält der keinen Content-Type, wird die Resource komplett gelesen und mit getimagesize() der Typ ermittelt.

          PHP-Code:
          <?php

          $ctype 
          null;

          $socket fsockopen("example.com"80$errno$errstr30) or die($errstr);
          $request "HEAD /path/to/image.gif HTTP/1.1\r\n"
                    
          ."Host: example.com\r\n"
                    
          ."Connection: Close\r\n\r\n";
          fwrite($socket$request);

          while (!
          feof($socket)) {
              
          // Headerzeile lesen
              
          $line fgets($socket);
              if (
          strpos($line'Content-Type: ') === 0) {
                  
          // Content-Type ausschneiden
                  
          $ctype substr(trim($line), 14);
                  
          // mehr brauchen wir nicht
                  
          break;
              
          // falls gar kein Content-Type angesagt wird,
              // kommt irgendwann das Ende des Headers
              
          } elseif ($line == "\r\n") {
                  
          $data '';
                  
          // Datei lesen
                  
          while (!feof($socket)) {
                      
          $data .= fgets($socket128);
                  }
                  break;
              }
          }
          fclose($socket);

          if (
          $ctype) {
              switch (
          $ctype) {
                  case 
          IMAGETYPE_GIF: echo 'GIF'; break;
                  case 
          IMAGETYPE_JPEG: echo 'JPEG'; break;
                  case 
          IMAGETYPE_PNG: echo 'PNG'; break;
                  case 
          IMAGETYPE_SWF: echo 'SWF'; break;
                  case 
          IMAGETYPE_PSD: echo 'PSD'; break;
                  case 
          IMAGETYPE_BMP: echo 'BMP'; break;
                  case 
          IMAGETYPE_TIFF_II:
                  case 
          IMAGETYPE_TIFF_MM: echo 'TIFF'; break;
                  case 
          IMAGETYPE_JPC: echo 'JPC'; break;
                  case 
          IMAGETYPE_JP2: echo 'JP2'; break;
                  case 
          IMAGETYPE_JPX: echo 'JPX'; break;
                  case 
          IMAGETYPE_JB2: echo 'JB2'; break;
                  case 
          IMAGETYPE_SWC: echo 'SWC'; break;
                  case 
          IMAGETYPE_IFF: echo 'IFF'; break;
                  case 
          IMAGETYPE_WBMP: echo 'WBMP'; break;
                  case 
          IMAGETYPE_XBM: echo 'XBM'; break;
                  default: echo 
          $ctype;
              }
          } else {
              
          $filename '/tmp/'.time();
              
          file_put_contents($filename) or die('file error');
              
          $imginfo getimagesize($filename);
              if (!
          $imginfo) {
                  echo 
          'Not an image!';
              } else {
                  echo 
          $imginfo['type'];
              }
          }

          ?>
          Achtung, ungetestet!

          Kommentar


          • #6
            erfolgreich getestet! vielen dank, genau sowas habe ich gesucht

            Kommentar


            • #7
              Freut mich. Aber ich sehe gerade, dass ich ein unlink($filename); nach dem getimagesize() vergessen habe. Bau das unbedingt noch ein, sonst läuft dir die Platte voll!

              Kommentar

              Lädt...
              X