Darstellung eines png mit readfile

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

  • Darstellung eines png mit readfile

    Ich habe zwar in den Betreff des Postes geschrieben "readfile" aber das ist nur eine Vermutung von mir.
    Mein Problem ist folgendes:
    Ich möchte den online/offline Status eines Chatbenutzers auf dessen Homepage darstellen lassen. In den Scripten des Chatsystems ist dafür eine Möglichkeit vorgesehen, die aber bei mir einfach nicht funktioniert.
    Das Script fragt ab, ob ein online/offline -Pic des Users existiert, falls ja, wird dieses zur Anzeige benutzt, falls nein, wird ein Bild generiert. Bis zur Generierung funktioniert das ganze (ich habe ein kleine Testseite mit einem <img src =...> gebastelt und die entstandenen Bilder damit getestet.)
    Am Ende des Scriptes sollen die Bilder mittels readfile() angezeigt werden. Aber aus einem Grund, der mir nicht ganz klar ist, oder für den mir das notwendige KnowHow fehlt, ist keiner der Browser in der Lage, die Bilder auf diese Art darzustellen. Ich bekomme das kleine Rechteck mit dem netten roten Kreuz und mehr nicht.
    Der Link zur Darstellung wird folgendermassen eingebunden:
    PHP-Code:
    <a href="http://test3.mass.local/chat/" target="_blank">
    <
    img src="http://test3.mass.local/chat/user_status.php?1" border="0" alt="chat status"></a
    Klicke ich mit der rechten Maustaste auf das nichtvorhandene Bild und schaue auf die Eigenschaften, wird mit eine Auflösung von 0 x 0 Pixeln und auch eine falsche Grösse angezeigt.
    in dem Script erfolgt der Aufruf von readfile so:
    PHP-Code:
    header("content-type:image/png");
    header("Expires: Mon 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " gmdate("D d M Y H:i:s") . "GMT"); 
    header("Cache-Control: no-cache must-revalidate");
    header("Pragma: no-cache");

    // ... hier folgt die Ueberpruefung ob das Bild existiert
    //  bzw. es wird mit imagecreate() ein neues Bild erzeugt
    // diese Passage ist unwichtig, da auch jeder Aufruf von
    // readfile() mit einem externen Bild bei mir nicht gelingt

    if (file_exists($data_path."statuses/".floor($is_regist/2000)."/base_online_".$is_regist.".png"))
      
    readfile($data_path."statuses/".floor($is_regist/2000)."/base_online_".$is_regist.".png");
    else
      
    readfile($data_path."statuses/base_online.png"); 
    Da wie gesagt die erzeugten Bilder mit jedem Bildbetrachter funktionieren und auch als <img>-Tag angezeigt werden, vermute ich ein Problem beim readfile(). Komischerweise scheine aber ich der einzige Nutzer des Chatsystems zu sein, der dieses Problem hat, denn im dortigen Forum ist nichts davon zu lesen (leider auch keine Antworten zu meiner Anfrage wegen des Problems).

    Könnte mir jemand sagen, wo mein Fehler bei diesem Problem ist?
    Ich bräuchte dringend und schnell einen Denkanstoss, da ich ein wenig unter Druck stehe.
    Bitte bitte helft mir.
    Thx im vorraus

    PS: Benutzte Server-Installation:
    Ich benutze eine aktuelle LAMPP-Installation, der Entwickler benutzte nach eigenen Aussagen eine Programmauswahl, allerdings unter Win32.
    Software is like ************: it's better when it's free...
    Linus Torvalds

  • #2
    - ich würde mal nach Content-Type: einen Abstand machen und vor GMT.
    - wird das Skript ausgeführt?
    - stimmen die Pfade?

    weiteres (edit: )
    - was erscheint, wenn Du den aufruf im Browser eintippst (sollte ein Textchaos anzeigen)? bzw. dafür den content-type abändern.
    - läuft das Skript zu ende?
    - kannst den content-type auf text/plain ändern und im Browser Direktaufrufe machen, um zu sehen was passiert. Dann hast Du auch echo welche Du testweise einbaust.
    Zuletzt geändert von tcpip; 20.06.2006, 08:52.

    Kommentar


    • #3
      Original geschrieben von tcpip
      - ich würde mal nach Content-Type: einen Abstand machen und vor GMT.
      - wird das Skript ausgeführt?
      - stimmen die Pfade?

      weiteres (edit: )
      - was erscheint, wenn Du den aufruf im Browser eintippst (sollte ein Textchaos anzeigen)? bzw. dafür den content-type abändern.
      - läuft das Skript zu ende?
      - kannst den content-type auf text/plain ändern und im Browser Direktaufrufe machen, um zu sehen was passiert. Dann hast Du auch echo welche Du testweise einbaust.
      ich hab den Abstand beim Content-Type gemacht, hat nix erändert.
      Das Script wird ausgeführt (ich hab mal den header mit dem Content-Type auskommentiert, da habe ich das Zeichenwirrwarr gesehen). Aber ich vermute, dass es nicht bis zu Ende ausgeführt wird, denn dann müsste das Zeichengewirr ja die Orginalgrösse des Bildes ergeben, tut es aber nicht.
      Ich habe das mit dem readfile herausgefunden mit einem externen Script:
      PHP-Code:
      <?php
      header
      ("content-type: image/png");
      header("Expires: Mon 26 Jul 1997 05:00:00 GMT");
      header("Last-Modified: " gmdate("D d M Y H:i:s") . "GMT"); 
      header("Cache-Control: no-cache must-revalidate");
      header("Pragma: no-cache");
      ?>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

      <html>
        <head>
          <title>New Document</title>
          <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
        </head>
        <body>
        <img src="
      <?php readfile("/daten/praktikumdaten/webserver/testumgebung/test3.mass.local/offline.png"); ?>
      " border="0" alt="chat status">
      </body>
      </html>
      ich hab mal einen Shot davon auf nen alten space gelegt


      das sieht so aus, als würde er das Bild schon darstellen wollen, hat aber noch nicht den ganzen Stream eingelesen. Als würde er sich an irgendwas verschlucken. Und ich habe keine ahnung, wie ich readfile dazu bringen kann, dieses "offline.png" zu zeigen

      NACHTRAG:
      in diesem Script ist ein Fehler, das Script darf nicht in nem <img> aufgerufen werden, wenn ich readfile allein aufrufe wird das bild angezeigt.
      Zuletzt geändert von DifficultChild; 20.06.2006, 09:55.
      Software is like ************: it's better when it's free...
      Linus Torvalds

      Kommentar


      • #4
        wenn also die ausgabe von readfile über den <img src=...> nicht funktioniert, wie kann ich das externe Script sonst noch aufrufen?
        hat da jemand eine Idee?
        Software is like ************: it's better when it's free...
        Linus Torvalds

        Kommentar


        • #5
          Moment!

          Du willst ein Bild anzeigen? Du möchtest das ganze in HTML machen? Also ist <img> dein Freund.

          Du gehst allerdings davon aus, das im src den img-Tags die BildRohDaten stehen sollen. src erwartet aber einen Pfad zu einer Datei die ein Bild ist.

          Kommentar


          • #6
            Original geschrieben von DifficultChild
            wenn also die ausgabe von readfile über den <img src=...> nicht funktioniert,
            Es ist mir absolut unbegreiflich, warum so viele Leute diesen Fehler immer wieder machen.
            Wenn du ein normales Bild einbindest, da schreibst du doch auch nicht die binären Bilddaten ins src-Attribut, oder?
            Sondern was? Die Bildadresse natürlich, unter der es vom Server abrufbar ist.
            wie kann ich das externe Script sonst noch aufrufen?
            Genau so, wie ein normales Bild auch.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Erst behauptest du, dass ein PNG folgt...

              <?php
              header("content-type: image/png");
              header("Expires: Mon 26 Jul 1997 05:00:00 GMT");
              header("Last-Modified: " . gmdate("D d M Y H:i:s") . "GMT");
              header("Cache-Control: no-cache must-revalidate");
              header("Pragma: no-cache");
              ?>
              und dann schickst du munter HTML....

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              Der Browser versucht nun, ein Bild aus Daten zu generieren, die mit "<!DOCTYPE..." anfangen. Kann irgendwie nicht gehen. Der IE zeigt Buchstabensalat, Firefox macht den Quatsch garnicht werst mit und gibt eine Fehlermeldung aus.

              Lass das Header-Gedöns und das readfile-Konstrukt weg. Ein ganz normaler Link im HTML reicht hier vollkommen aus.
              Happiness is an empty error log

              Kommentar


              • #8
                ich gehe von der ursprünglichen Einbindung aus:
                Code:
                <img src="http://test3.mass.local/chat/user_status.php?1" border="0" alt="chat status"></a>
                offenbar stimmt das user_status.php?1 skript soweit es aus den weiteren Versuchen entnommen werden kann.

                Man kann noch überprüfen, ob die Bildlänge stimmt. Was ist, wenn width=20 height=20 ergänzt wird? Was gibt der Direktaufruf im Browser, wenn, wie im ersten post, aber content-type: text/plain gesetzt wird und dann der Quelltext angeschaut? Gemeint ist http://test3.mass.local/chat/user_status.php?1 im Browser-Adresszeile eintippen.

                es stimmt , dass src=bildtext nichts produktives ergibt, aber das sind ja bloss Einkreisungs-Veränderungen.


                edit: Versuche mal den Direktaufruf des ersten Skripts mit geändertem contenttype, anstatt des Testskripts vom dritten post.

                edit: dein Zeichengewirr gibt weniger als die Bildgrösse, weil es erst ab dem ersten " (vom offline.png) angezeigt wird. Bis zum ersten ", eingeschlossen, ist es url vom <img src=". Logisch?
                Zuletzt geändert von tcpip; 20.06.2006, 12:15.

                Kommentar


                • #9
                  Ein .png beginnt mit ‰PNG und das fehlt in deinem screendump. Ansonsten funktioniert bei mir folgende Testausgabe bestens. (das echo "abc" ; war nötig, um die automatische Typenerkennung des Browsers zu stören.)

                  PHP-Code:
                  <?php
                  // PNG-Grafik 
                  header("Content-type: text/plain");
                  echo 
                  "abc";
                  readfile("./ordner/bild.png");
                  ?>

                  Kommentar


                  • #10
                    Eine weitere Vermutung ist, dass der nicht gepostete Teil deines ersten Skripts eine php-Fehlermeldung macht, welche vor dem readfile ist. Die falsche Bildgrösse (erster Post) kann darauf hindeuten. Testweise vor dem readfile ein ob_flush() ? (die headers sind nicht unbedingt notwendig) oder sonstwas taugliches aus der ob_ .. Reihe....
                    Zuletzt geändert von tcpip; 20.06.2006, 12:53.

                    Kommentar


                    • #11
                      naja, in dem Beispielscript ist mir dieser Fehler unterlaufen
                      aber es wurde ja dann dargestellt, als ich es geändert habe.
                      Aber das Problem bleibt weiter bestehen für die Anwendung. Der Link funktionjiert nicht:
                      PHP-Code:
                      <a href="http://test3.mass.local/chat/" target="_blank">
                      <
                      img src="http://test3.mass.local/chat/user_status.php?1" border="0" alt="chat status"></a
                      Der <img src=..> enthält als Ziel den Namen eines Scriptes, dieses Script wiederum liefert als Ergebnis den Stream von readfile() an den Image-Tag aus und dieser sollte ihn darstellen (zumindest nach den Vorstellungen des Entwicklers, bei dem das auch so funktioniert).
                      Nur bei mir geht das gleiche Script nicht. Statt eines Bildnamens steht in den Linkeigenschaften der Name des Scriptes drin (das Bild heisst also laut rechter Maustaste->Kontext bei mir user_status?1).
                      Was müsste ich also ändern, damit der Link, wie gewünscht, ein Bild anzeigt?
                      PHP-Code:
                      <?php
                      header
                      ("content-type: image/png");
                      header("Expires: Mon 26 Jul 1997 05:00:00 GMT");
                      header("Last-Modified: " gmdate("D d M Y H:i:s") . "GMT"); 
                      header("Cache-Control: no-cache must-revalidate");
                      header("Pragma: no-cache");

                      readfile("/daten/praktikumdaten/webserver/testumgebung/test3.mass.local/offline.png");
                      ?>
                      Das liefert das gewünschte Bild, baue ich dieses Script zwischen <a href=...> und </a> ein, dann funktioniert auch der Image-Tag.
                      So wie es im Orginal eingebaut ist (siehe oben) geht es aber nach wie vor bei mir nicht (übergabe von http://test3.mass.local/chat/user_status.php?1) . Sobald ich versuche eine Variable im String mit zu übergeben, streikt das Dingens. Das trifft bei den Scripten des Chats auch noch auf die Erzeugung des Bildes mit den Zufallszahlen bei der Registrierung zu, dort übergibt das Script:
                      PHP-Code:
                      <?php echo $chat_url."impro.php?impro_id=".$impro_id;?>
                      und auch da geht die Erzeugung nicht. Ich bin hier fast am verzweifeln.
                      Software is like ************: it's better when it's free...
                      Linus Torvalds

                      Kommentar


                      • #12
                        <img src="http://test3.mass.local/chat/user_status.php?1" border="0" alt="chat status"> [...]
                        Statt eines Bildnamens steht in den Linkeigenschaften der Name des Scriptes drin (das Bild heisst also laut rechter Maustaste->Kontext bei mir user_status?1).
                        Fehler beim Posten - oder im Code?
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von DifficultChild
                          Der <img src=..> enthält als Ziel den Namen eines Scriptes, dieses Script wiederum liefert als Ergebnis den Stream von readfile() an den Image-Tag aus und dieser sollte ihn darstellen (zumindest nach den Vorstellungen des Entwicklers, bei dem das auch so funktioniert).
                          Nur bei mir geht das gleiche Script nicht. Statt eines Bildnamens steht in den Linkeigenschaften der Name des Scriptes drin (das Bild heisst also laut rechter Maustaste->Kontext bei mir user_status?1).
                          Was müsste ich also ändern, damit der Link, wie gewünscht, ein Bild anzeigt?

                          Ich bin hier fast am verzweifeln.
                          Du schreibst ein rechtes Durcheinander, php-mässig gesehen.

                          Von den vorgeschlagenen Tests hast Du gar nichts gemacht, vermutlich auch nicht verstanden, obwohl sie zum ziel führen würden, sondern wiederholst bloss das Problem. Du wirst keinen der hier erhältlichen Ratschläge begreifen.

                          Um auf deine Frage einzugehen, am hier von Dir geposteten musst Du nichts ändern, das ist alles richtig.

                          Frage also den Entwickler. Vermutlich hast du etwas falsch installiert.

                          Kommentar


                          • #14
                            Original geschrieben von wahsaga
                            Fehler beim Posten - oder im Code?
                            kein Fehler beim Posten.
                            IE gibt das aus:

                            und Opera folgendes:

                            Opera erkennt immerhin dass es ein PNG ist, den der Stream liefert, aber IE erkennt nichtmal, dass es ein PNG ist und gibt als Namen auch den Namen des Scriptes zurück.

                            @tcpip:
                            doch, ich habe die Tests gemacht, es wird einfach nicht dargestellt.
                            bei "text/plain" wird ersichtlich, dass es sich um ein PNG handelt, es fängt mit ‰PNG an.
                            Ich habe es auch voll nach der Anleitung installiert. Die einzige Möglichkeit die ich noch sehe ist die, dass ich nicht wie empfohlen das data-Verzeichnis aus dem root rausnehme sondern sowohl chat als auch data im gleichen Verzeichnis lasse (der Entwickler sagt aber in der Doku auch selbst, dass man es trennen soll)
                            Software is like ************: it's better when it's free...
                            Linus Torvalds

                            Kommentar


                            • #15
                              Original geschrieben von DifficultChild
                              kein Fehler beim Posten.
                              IE gibt das aus: [...]
                              Also doch Fehler beim Posten - schließlich wollte ich wissen, ob die Dateiendung .php in der Anzeige der Bildadresse wirklich fehlt (so wie von dir vorher beschrieben), und das tut sie offenbar aber nicht.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X