Remote Image Size

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

  • Remote Image Size

    Hallo,

    ich habe folgendes Problem:

    Ich versuche in meinem Forum, mittels BBCode, ein Image anzuzeigen, und dieses, falls zu gross, in der Richten grösse anzuzeigen.

    Das anzeigen Funktioniert ohne Probleme.

    Ansatz für die Remotefile:

    mit fopen() öffnen & width/height raussuchen.. fertig

    Der Code dafür:
    PHP-Code:
    function getimagesize_remote($image_url) {
        
    $handle fopen ($image_url"rb");  # Zeile 79 (Siehe unten Fehler Meldung)
        
    $contents "";
        if (
    $handle) {
            do {
                
    $count += 1;
                
    $data fread($handle8192);
                if (
    strlen($data) == 0)    break;
                
    $contents .= $data;
            } while(
    true);
        } else return 
    false;
        
    fclose ($handle);
        
        
    $im imagecreatefromstring($contents);

        if (!
    $im) { return false; }

        
    $gis[0] = imagesx($im);
        
    $gis[1] = imagesy($im);
        
    $gis[3] = "width={$gis[0]} height={$gis[1]}";
        
    imagedestroy($im);
        return 
    $gis;

    Der teil des BBCode:

    PHP-Code:
    $search[]="/\[img](.*)\[\/img\]/si";    
    $replace[]=$this->resizeBoardImage('\\1'); 
    Nicht wundern bei:
    $this->resizeBoardImage('\1');
    es sind 2 Quote's


    Die Funktion resizeBoardImage();
    PHP-Code:
    function resizeBoardImage($url) {
        
    $newwidth    ="300";
        
    $newheight    "200";

        
    $file         $this->gd2->getimagesize_remote($url);
        
    $width        $file[0];
        
    $height        $file[1];
        if(
    $width $height && $newheight $height){
            
    $newheight $height / ($width $newwidth);
            return 
    '
            <span style="border: 1px dotted black">
                <a href="'
    .$url.'">
                    <img src="'
    .$url.'" width="'.$width.'" height="'.$newheight.'
                    alt="Klicke hier um das >Bild in voller Grösse anzuzeigen!" border="0" />
                </a>
            </span>'
    ;            
        } elseif (
    $width $height && $newwidth $width) {
            
    $newwidth $width / ($height $newheight);   
            return 
    '
            <span style="border: 1px dotted black">
                <a href="'
    .$url.'">
                    <img src="'
    .$url.'" width="'.$newwidth.'" height="'.$height.'"
                    alt="Klicke hier um das >Bild in voller Grösse anzuzeigen!" border="0" />
                </a>
            </span>'
    ;            
        } else {
            
    $newwidth $width;
            
    $newheight $height;
        }
        return 
    '
        <span style="border: 1px dotted black">
            <a href="'
    .$url.'">
                <img src="'
    .$url.'" width="'.$newwidth.'" height="'.$newheight.'"
                alt="Klicke hier um das >Bild in voller Grösse anzuzeigen!" border="0" />
            </a>
        </span>'
    ;            

    Anzeigen, wie oben schon gesagt funktioniert, nur bekomme ich die Nette Fehler Meldung:

    Warning: fopen(\1): failed to open stream: No such file or directory in /home/m/mtk-party.de/public_html/2005/w4lms/bbcode.inc.php on line 79


    Weiss jemand warum PHP die Bild-URL nicht ordentlich an die Funtion weiter gibt?
    Zuletzt geändert von Skaschy; 22.05.2005, 14:29.

  • #2
    warum fragst du, statt zu debuggen? hellseher forum ist irgendwo hier: http://www.google.de/search?hl=de&q=...le-Suche&meta=

    geht's um irgendwas mit preg_replace()? warum zeigst du diesen teil des code nicht?

    Kommentar


    • #3
      Der preg_replace:

      PHP-Code:
      $out preg_replace($search$replace$out); 
      War irgendwo klar, oder?

      Zum Thema debug.. weiss nicht sorecht wie ich das angehen soll.

      Kommentar


      • #4
        mit echo oder print_r kannst du jederzeit überprüfen, was sich gerade in der einen oder der anderen variable befindet. auf diese weise kannst du eine stelle herausfinden, die sich nicht klar verhält.

        hier z.b. müsstest du verstehen, dass während du $replace füllst, noch gar keine preg_ ergebnisse vorliegen, sodass das einzige, was an die fkt. resizeBoardImage geht ist nun mal ein sinnfreies "\1".

        Kommentar


        • #5
          und wieso funktioniert das alles bei:

          PHP-Code:
          $search[]="/\[flag=(['\"]?)([^\"']*)\\1]/siU";
          $replace[]=formatflag('\\2'); 

          Und angezeigt wird das bild ja, was heisst das die URL übergeben wird durch den preg_replace();!


          http://2k5.mtk-party.de/index.php?forumreadt&tid=67 <--
          Zuletzt geändert von Skaschy; 22.05.2005, 16:00.

          Kommentar


          • #6
            auch bei formatflag() versagen meine hellseherischen fähigkeiten.
            wie soll ich wissen, was das ist?

            Kommentar


            • #7
              Nein das war nur eine antwort auf:

              hier z.b. müsstest du verstehen, dass während du $replace füllst, noch gar keine preg_ ergebnisse vorliegen, sodass das einzige, was an die fkt. resizeBoardImage geht ist nun mal ein sinnfreies "\1".

              Kommentar


              • #8
                und?
                ich kann doch davon ausgehen, dass
                Code:
                formatflag() != resizeBoardImage()

                Kommentar


                • #9
                  Schon, aber trotzdem sollte die Variable doch übergeben werden!?

                  Kommentar


                  • #10
                    nein. weil die zwei funktionen nicht das gleiche tun. und schon gar nicht das gleiche zurückgeben.

                    zeig doch mal die formatflag().

                    Kommentar


                    • #11
                      PHP-Code:
                      function formatflag($country
                      {
                          if (
                      file_exists($path.'img/flags/' $country)) {
                              
                      $flag '<img src="'.$path.'img/flags/' $country '.gif" 
                                        border="0" alt="' 
                      $country '" />';
                          } else  
                      $flag '<img src="'.$path.'img/flags/unknown.gif" 
                                            border="0" alt="Unbekanntes Land" />'
                      ;
                          return 
                      $flag;

                      und was möchtest du mir damit sagen bzw. auf was möchtest du mich hinweisen?

                      Kommentar


                      • #12
                        ist mir ebenfalls rätselhaft, wie sowas funktionieren kann, da ich die reihenfolge der nutzung dieser bruchstückartig genannten schnippsel nicht kenne.

                        aber im grunde bereitet formatflag() nur einen string vor (und müsste meiner meinung nach IMMER in den else-zweig gelangen) und gibt ihn zurück. diesen vorbereiteten string nutzt preg_replace als elemente von $replace.

                        deine funktion dagegen wartet auf den PFAD, um den mittels fopen() zu nutzen. du gibst ihr immer nur das "\1", was keine funktion außer preg_replace interessiert.

                        Kommentar


                        • #13
                          Habs, war wohl ein Fehler im Regex...

                          PHP-Code:
                          $out "[IMG ]http://2k5.mtk-party.de/img/userpics/1/Ford-Focus-RS-007.jpg[/IMG]";

                          print 
                          parse($out);

                          function 
                          parse($text) {
                              
                          $searcharray[]="/\[img]([^\"]*)\[\/img\]/eiU";
                              
                          $replacearray[]="resizeBoardImage('\\1')";
                              
                          $text preg_replace($searcharray$replacearray$text);
                              return 
                          $text;
                          }

                          function 
                          resizeBoardImage($url) {
                              
                          $newwidth 300;
                              
                          $newheight 150;
                              
                              list(
                          $width$height) = getimagesize($url);
                              print 
                          $width "<br />";
                              print 
                          $height "<br />"

                              if(
                          $width $height && $newheight $height){
                                  
                          $newheight $height / ($width $newwidth);
                              } else if (
                          $width $height && $newwidth $width) {
                                  
                          $newwidth $width / ($height $newheight);   
                              } else {
                                  
                          $newwidth $width;
                                  
                          $newheight $height;
                              }
                              return 
                          '<a href="'.$url.'"><img src="'.$url.'" width="'.$newheight.'" height="'.$newheight.'"
                                       alt="Klicke hier um das >Bild in voller Grösse anzuzeigen!"
                                       border="0" style="border: 1px dotted black" /></a>'
                          ;            

                          Copy & Past, das Funktioniert nun =)

                          Kommentar


                          • #14
                            na, das macht die sache doch ganz anders.
                            aber - c'est la vie.

                            Kommentar

                            Lädt...
                            X