Darstellung eines png mit readfile

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

  • #16
    Du hast sicher schon geprüft, ob die 965 bytes stimmen??

    Kommentar


    • #17
      doch, ich habe die Tests gemacht, es wird einfach nicht dargestellt.


      alle Tests haben nichts dargestellt? Welcher Test hat nichts dargestellt?
      und was hat etwas dargestellt, irgendwo wurde mal geschrieben, dass die bilder ansich i.O. sind??

      Kommentar


      • #18
        Ja, habe ich geprüft und die stimmen, zumindest sagt mir der Explorer, dass base_offline_2.png 964 Byte gross ist. Der User, zu dem der Wert 2 gehört, der übergeben wurde, war zu diesem Zeitpunkt offline, somit hat das Script sowohl den Status erkannt, als auch dass schon ein Bild existiert zu diesem User mit diesem Status.
        Im Script folgt darauf nur noch das:
        PHP-Code:
        if (file_exists($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png"))
          
        readfile($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png");
        else
          
        readfile($data_path."statuses/base_offline.png"); 
        Das dürfte eigentlich selbsterklärend sein und ist meiner Meinung nach auch korrekt.
        Software is like ************: it's better when it's free...
        Linus Torvalds

        Kommentar


        • #19
          Das ist ungeschickt, zu behaupten dass das stimme. Der rest, dass user 2 tatsächlich offline sei, hat nichts mit dem Thema zu tun, und den php code hast du schon mal gepostet.

          weil 964 nicht 965 ist.

          da ist doch ein byte zuviel?
          Zuletzt geändert von tcpip; 20.06.2006, 15:54.

          Kommentar


          • #20
            Original geschrieben von tcpip

            alle Tests haben nichts dargestellt? Welcher Test hat nichts dargestellt?
            und was hat etwas dargestellt, irgendwo wurde mal geschrieben, dass die bilder ansich i.O. sind??
            Die Bilder sind ja auch OK, die werden mit diesem Script erstellt und ordnungsgemäss dort abgelegt, wo sie lauf Script hin sollen. Ich kann diese Bilder in nem Bildbetrachter ansehen und auch als einfache Image-Tags in Seiten einbinden. Es funktioniert nur nicht, diese Bilder mittels des Scriptes in den Image-Tag zu übergeben.
            Und text/plain gibt diese Bilder als Text aus, es scheint so, als könnte es eventuell am header liegen. aber header ("Content-Type: image/png") benutze ich doch sonst auch.
            Zuletzt geändert von DifficultChild; 20.06.2006, 15:41.
            Software is like ************: it's better when it's free...
            Linus Torvalds

            Kommentar


            • #21
              was bringen die beiden direktaufrufe?

              http://..... offline_2.php
              http://.....user_status.php?2

              wie ist es mit anderen usern, vielleicht spielt irgend ein Cache seine Rolle?

              Kommentar


              • #22
                Fällt mir noch auf, der Explorersagt...... ? LAMPP? LEXPlorer?

                Kommentar


                • #23
                  Original geschrieben von tcpip
                  was bringen die beiden direktaufrufe?

                  http://..... offline_2.php
                  http://.....user_status.php?2

                  wie ist es mit anderen usern, vielleicht spielt irgend ein Cache seine Rolle?
                  die erste URL kann ich nicht aufrufen, weil ein solches Script nicht existiert. der aufruf der 2. URL bewirkt den direkten Aufruf des Scriptes und sollte normalerweise ja ein Bild anzeigen, da readfile direkt in den Ausgabepuffer schreibt (laut php.net). Nur tut es das nicht.
                  Ich kann aber alle Bilder direkt über ihren Pfad im Browser anzeigen lassen.
                  Ändere ich die header-Angabe im Script auf text/plain, will er mir das Script downloaden.

                  Es ist auch kein LExplorer, ich arbeite an ner Win2k Workstation, die Anwendung ist aber auf nem Linux Server untergebracht.

                  Ob es am Cache liegt, kann ich im MOment nicht beurteilen, da ich auf den Server keinen root-Zugriff habe. Und heute ist ja Fussball, da ist keiner ausser mir mehr hier im Büro.

                  Ich poste mal das betreffende Script, ist etwas lang, aber ich versuche es so gut es geht zu formatieren.

                  PHP-Code:
                  <?php
                  require_once("inc_common.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");

                  include(
                  "inc_user_class.php");
                  $is_regist intval($HTTP_SERVER_VARS["QUERY_STRING"]);
                  $current_user = new User();
                  @include(
                  $ld_engine_path."users_get_object.php");
                  if (
                  $current_user->enable_web_indicator == 0)
                      
                  readfile($data_path."statuses/disabled.png");
                  else {
                      include(
                  $engine_path."user_status.php");
                      if(
                  $exists) {
                      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 {
                          if (
                  function_exists('imagecreatefrompng')&&function_exists('imagettftext')) {
                              
                  $im imageCreateFromPng($data_path."statuses/base_blank.png");
                              
                  $black imagecolorallocate ($im000);
                              
                  $green imagecolorallocate ($im02550);
                              
                  $text $current_user->nickname;
                              
                              
                  $sizes imagettfbbox(12,0,$data_path."statuses/font.ttf"$text);
                              
                  $dots 0;
                              while (
                  $sizes[2]-$sizes[0]>70) {
                                  
                  $text substr($text,0,strlen($text)-1);
                                  
                  $sizes imagettfbbox(12,0,$data_path."statuses/font.ttf"$text);
                                  
                  $dots 1;
                              }
                              
                  imagettftext ($im120526$green$data_path."statuses/font.ttf"$text);
                              if (
                  $dots) {
                                  
                  imagesetpixel($im7826$green);
                                  
                  imagesetpixel($im8026$green);
                                  
                  imagesetpixel($im8226$green);
                              }
                              if(!
                  is_dir($data_path."statuses/".floor($is_regist/2000)))
                                  
                  mkdir($data_path."statuses/".floor($is_regist/2000),0777);
                              
                  imagePng($im,$data_path."statuses/".floor($is_regist/2000)."/base_online_".$is_regist.".png");
                              
                  imageDestroy ($im);
                          }
                          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");
                          }
                      }
                      else  {
                          if (
                  file_exists($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png"))
                              
                  readfile($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png");
                          else {
                              if (
                  function_exists('imagecreatefrompng')&&function_exists('imagettftext')) {
                                  
                  $im imageCreateFromPng($data_path."statuses/base_blank.png");
                                  
                  $black imagecolorallocate ($im000);
                                  
                  $green imagecolorallocate ($im25500);
                                  
                  $text $current_user->nickname;
                                  
                                  
                  $sizes imagettfbbox(12,0,$data_path."statuses/font.ttf"$text);
                                  
                  $dots 0;
                                  while (
                  $sizes[2]-$sizes[0]>70) {
                                      
                  $text substr($text,0,strlen($text)-1);
                                      
                  $sizes imagettfbbox(12,0,$data_path."statuses/font.ttf"$text);
                                      
                  $dots 1;
                                  }
                                  
                  imagettftext ($im120526$green$data_path."statuses/font.ttf"$text);
                                  if (
                  $dots) {
                                      
                  imagesetpixel($im7826$green);
                                      
                  imagesetpixel($im8026$green);
                                      
                  imagesetpixel($im8226$green);
                                  }
                                  if(!
                  is_dir($data_path."statuses/".floor($is_regist/2000)))
                                      
                  mkdir($data_path."statuses/".floor($is_regist/2000),0777);
                                  
                  imagePng($im,$data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png");

                                  
                  imageDestroy ($im);
                              }
                              if (
                  file_exists($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png"))
                                  
                  readfile($data_path."statuses/".floor($is_regist/2000)."/base_offline_".$is_regist.".png");
                              else
                                  
                  readfile($data_path."statuses/base_offline.png");
                          }
                      }
                  }
                  ?>
                  Wenn ich das richtig sehe, dann wird doch am Anfang ein header gesetzt. Könnte es sein, dass sich dieser header nicht mit dem header der vorhandenen Dateien verträgt? Wenn ja, warum geht das nur bei mir nicht? Ich werd doch nicht der einzige sein, der versucht den Online-Status zu benutzen.
                  Wie gesagt, das Script scheint bis dahin zu funktionieren, wo es die Bilder erzeugt und abspeichert, denn es liegen alle User-Bilder im Verzeichnis "statuses/".floor($is_regist/2000) was bei mit bedeutet statuses/0
                  Zuletzt geändert von DifficultChild; 20.06.2006, 16:40.
                  Software is like ************: it's better when it's free...
                  Linus Torvalds

                  Kommentar


                  • #24
                    Original geschrieben von tcpip
                    Fällt mir noch auf, der Explorersagt...... ? LAMPP? LEXPlorer?
                    Der Explorer gibt an, das die heruntergeladene Datei user_status.png genauso groß ist, wie die Datei base_offline_2
                    Beide haben die gleiche Byte-Zahl, aber bei user_status.png schein der header zerstört, dass behauptet zumindest Irfanview.
                    ABER:
                    Ein Vergleich beider Dateien mit WinMerge sagt, dass beide identisch sind.
                    Das ist doch nicht nachzuvollziehen, wenn beide identisch sind, warum kann ich dann nur base_offline_2.png betrachten, wogegen use_status.png nen angeblich nicht lesbaren header besitzt?

                    NACHTRAG:
                    Am Anfang der Datei, die aus dem Stream stammt, steht eine Leerzeile. Mache ich die weg, funktioniert auch der header und die Datei kann dargestellt werden. Aber wie finde ich die Stelle, an der diese Leerzeile reinrutscht? Ich hab ja alle heutigen Änderungen wieder zurückgenommen und das Script ist wieder im Orginal. Ich kenne mich mit der Manipulation solcher Streams leider nicht aus und weiss nicht, an welcher Stelle da dieses Leerzeile reinrutscht
                    Zuletzt geändert von DifficultChild; 20.06.2006, 16:55.
                    Software is like ************: it's better when it's free...
                    Linus Torvalds

                    Kommentar


                    • #25
                      Also ich habe keine Lust alles zu zitieren. und es steht soviel Unsinn drin.

                      Relevant scheint bisher folgendes: am Anfang der Datei steht eine Leerzeile dh ein
                      Zeilenende... das ist das einzige, was irgendwie passt zu den 965 bzw. 964 bytes
                      und zur Tatsache, dass IE ungültigen Datentyp sagt (gemäss KB182569 Punkt
                      2100), Opera hingegen png.....


                      ich denke, eines der drei oder vier includes hat vor dem <?, oder nach dem ?>, ein
                      Leerzeichen oder ein Zeilenende. Denke mal darüber nach, welche Du selber angepasst hast....

                      PS1 dass dass offline_2.php ein Schreibfehler ist und offline_2.png gewesen wäre,
                      hättest Du selbsttätig merken können.

                      PS2 Du hast mal behauptet, die Ausgabe des SCript beginne mit 0/00png, jetzt ist
                      es doch eine Leerzeile.... Auf solche Dinge kommt es an.

                      Kommentar


                      • #26
                        Original geschrieben von DifficultChild
                        der aufruf der 2. URL bewirkt den direkten Aufruf des Scriptes und sollte
                        normalerweise ja ein Bild anzeigen, da readfile direkt in den Ausgabepuffer schreibt
                        (laut php.net). Nur tut es das nicht.
                        PS3 es ist mühsam, wenn auf eine Frage, was xxxxxx mache, als Antwort eine
                        Beschreibung kommt dessen was es tun sollte, mit der Bemerkung dass es das
                        nicht tut. So sind die Fehlersuchfragen im allgemeinen nicht gemeint, weil all das
                        weiss der Fragende schon bevor er die Frage stellt.

                        Kommentar


                        • #27
                          also zu dem mit den 964 und 965:
                          erst wurden mir unter eigenschaften für beide dateien die beiden werte angezeigt, ein Datei 964 Byte, die andere 965 Byte
                          erst beim erneuten Speichern hatten auf einmal beide eine identische Grösse.
                          Auch wenn ich mir den Stream als Text habe ausgeben lassen, war der angezeigte Text nicht immer gleich.
                          Ich habe ja auch beide Dateien mit WinMerge verglichen, unter Win2k hatte ich nix anderes zur Verfügung, WinMerge schliesst nach der Prüfung die Dateien aber automatisch, wenn beide Dateien gleich sind. Ich bin nur in meiner Verzweiflung darauf gekommen, beide Dateien von Hand Zeichen für Zeichen in 2 geöffneten Editoren vergleichen zu wollen.
                          Dass offline_2.php nur ein Schreibfehler von dir war, war doch völlig logisch, denn in keinem meiner Posts war ja eine solche Datei erwähnt.
                          zu PS2: das mit °/00PNG war auch in der Ausgabe als Text im Browser am Anfang der Datei jedesmal zu sehen. Die gefundene Leerzeile steht vor dem °/00PNG

                          ich habe gerade Antwort vom Entwickler bekommen, es war nicht sehr aussagekräftig, da er nur sagt:
                          voodoo wrote:
                          you can take a ttf font from c:\windows\fonts, just copy it to the linux-server (and I don't beleive that you don't have a pc with windows installed).

                          remove header('content-type:') from chat/user_status.php and add
                          error_reporting(E_ALL);

                          then try to load that file again and check the error-messages
                          soweit war ich ja auch schon, die Bilder waren bei mir beschriftet und auch korrekt abgelegt, ich bekomme beim error_reporting(E_ALL) als Fehler eine 245 angezeigt, was mir aber nicht weiterhilft. und einen funktionsfähigen workarround hat er scheinbar im moment auch nicht.
                          eigentlich muss readfile() doch nur die gespeicherte Datei ausgeben und ich hab bisher nirgends etwas gefunden, dass es dabei auf Linux Servern zu Fehlern kommt
                          Software is like ************: it's better when it's free...
                          Linus Torvalds

                          Kommentar


                          • #28
                            ich denke, eines der drei oder vier includes hat vor dem <?, oder nach dem ?>, ein
                            Leerzeichen oder ein Zeilenende. Denke mal darüber nach, welche Du selber angepasst hast....



                            geh bitte auf das obenstehende ein. Vieles deutet darauf hin, dass dort der Fehler ist. Das muss zuerst geprüft werden.

                            OffTopic:
                            Du hast überhaupt keine Denkweise, die für solche Probleme geeignet bist. Du bist nicht einmal in der Lage, 'am Anfang' computergerecht zu verstehen, dh an Stelle 1 und nicht irgendwo an Stelle 2 3 oder 4.... usw. schon durch den ganzen thread.

                            Du hast nur wieder eigenes, unwesentliches Zeugs geschrieben. zb. wenn das Bild in Ordnung ist, was man dir glaubt, muss du nicht den Entwickler wegen der bilderstellung anfragen. Die ist in Ordnung.

                            Kommentar


                            • #29
                              -
                              Zuletzt geändert von tcpip; 20.06.2006, 22:51.

                              Kommentar

                              Lädt...
                              X