Beat: Script soll ferne Bildwerte auslesen

Hallo allerseits

Meine (vielleicht utopische) Aufgabe.

Mein Forumscript auf dem fernen Server liest Bildlinks aus.
Die Besucher posten ev. einen Bildlink zu einem dritten fernen Server
aber keine Information zu der Grösse des Bildes.
Dadurch kann sich der Seitenaufbau des Hauptboards verzögern (unschön)

Gibt es eine Methode dass mein Script während dem Verarbeiten der Usereingaben an das ferne Bild rankommt,
die Bildgrösse ausliesst und im Code schreibt?
Ich habe gehört dass perl selbst einen eigenen UserAgent dafür aufrufen kann.

Derzeit ist es so, dass ich leider fehlende angezeigte Bilder via Administration in Links wandeln muss.

Hier das Korpus delikti
http://www.elcappuccino.ch/board/board.html

  1. Halihallo Beat

    Mein Forumscript auf dem fernen Server liest Bildlinks aus.
    Die Besucher posten ev. einen Bildlink zu einem dritten fernen Server
    aber keine Information zu der Grösse des Bildes.
    Dadurch kann sich der Seitenaufbau des Hauptboards verzögern (unschön)

    Naja, es macht etwas aus, aber so viel nun auch wieder nicht...

    Gibt es eine Methode dass mein Script während dem Verarbeiten der Usereingaben an das ferne Bild rankommt,
    die Bildgrösse ausliesst und im Code schreibt?
    Ich habe gehört dass perl selbst einen eigenen UserAgent dafür aufrufen kann.

    use LWP::Simple
     |
     +-- get()

    oder:
    perldoc lwpcook
     |
     +-- use LWP::UserAgent
     |
     +-- use HTTP::Request

    use GD
     |
     +-- $image = GD::Image->newFromJpeg($file, [$truecolor])
     |
     +-- ($width,$height) = $image->getBounds()

    Leider geht dies aufgrund von Patenten nicht für gif.

    Viele Grüsse

    Philipp

    1. Moin, moin!

      Lösung für GIFs:

      Grafik in Variable (hier: $gifs) einlesen (z. B. mit get() aus LWP::Simple). Breite und Höhe können dann mit
      $breite=unpack("v", substr($gifs, 6 , 2));
      $hoehe=unpack("v", substr($gifs, 8 , 2));
      ermittelt werden.

      Alles klar?

      Norbert

    2. use LWP::Simple
       |
       +-- get()

      oder:
      perldoc lwpcook
       |
       +-- use LWP::UserAgent
       |
       +-- use HTTP::Request

      Hy Philipp
      erfreulich, dass da gleich mehrere Module zur Verfügung stehen.
      Mir sind da aber noch gleich andere Gedanken in den Sinn gekommen.
      Wie gehe ich damit um, wenn just in dieser Prozedur keine Verbindung zustandekomt
      und das script deshalb hängenbleibt (Timeout) ?

      if defined($extbild){
        use LWP::Simple ;
        get($extbild) or die 'Keine Verbindung zu externem Server' ;
        # was geschieht mit dem Script, wenn keine Verbindung zustande kommt?
        # bzw. wie kontrolliert man die Bedingungen für den Begriff Verbindung?

      Ich denke meine Absicht wird nicht zu mehr Effizienz führen.

      Trotzdem Danke
      Beat

      1. Halihallo Beat

        Mir sind da aber noch gleich andere Gedanken in den Sinn gekommen.
        Wie gehe ich damit um, wenn just in dieser Prozedur keine Verbindung zustandekomt
        und das script deshalb hängenbleibt (Timeout) ?

        Tja, dann ist dumm gelaufen ;-)
        Der Timeout ist AFAIK per default auf 30 gesetzt. Dein Script würde
        also 30 Sekunden "hängen" und dir undef (undefined) als Content
        (bei get) zurückgeben.

        if defined($extbild){

        Warum? - Du weisst das erst nachdem du die Ressource angefordert
        hast...

        use LWP::Simple ;
          get($extbild) or die 'Keine Verbindung zu externem Server' ;

        ... nämlich hier.

        # was geschieht mit dem Script, wenn keine Verbindung zustande kommt?

        In deinem Code? - Es stirbt (die()) mit der von dir angegebenen
        Fehlermeldung.

        # bzw. wie kontrolliert man die Bedingungen für den Begriff Verbindung?

        Das ist eine Frage die sich so nicht einfach beantworten lässt.
        Ich schätze du meinst nicht nur Verbindung, sondern auch das
        Vorhandensein der Ressource?

        Also: kurze "Definition":
         - Verbindung zum Server kann hergestellt werden
         - Server schliesst die Verbindung *nicht* gleich nach Empfang des
           Requests.
         - Server antwortet in einer richtigen HTTP-Response
         - HTTP-Response enthält Status 200 oder 3XX (Redirect)

        Grundsätzlich gilt es bei LWP:

        if (defined($res) && $res->is_success()) {
            # scheint geklappt zu haben.
          }

        Ich denke meine Absicht wird nicht zu mehr Effizienz führen.

        Das glaube ich auch nicht. Besonders nicht, wenn du jedesmal wenn die
        Hauptdatei angezeigt wird, 100 Bilder serverseitig einliest[1]... Das
        würde wenn, dann mit einem cron-Job erledigt.

        [1] Das wäre Overhead non plus ultra...

        Viele Grüsse

        Philipp

  2. hi,

    Gibt es eine Methode dass mein Script während dem Verarbeiten der Usereingaben an das ferne Bild rankommt,
    die Bildgrösse ausliesst und im Code schreibt?

    wenn wenn sich bildausmaße/-inhalt auf dem fremden server dann mal ändern ...?

    gruß,
    wahsaga

    --
    I'll try being nicer if you'll try being smarter.