Du hast sicher schon geprüft, ob die 965 bytes stimmen??
Darstellung eines png mit readfile
Einklappen
X
-
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
-
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");
Software is like ************: it's better when it's free...
Linus Torvalds
Kommentar
-
-
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??
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
-
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
-
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?
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 ($im, 0, 0, 0);
$green = imagecolorallocate ($im, 0, 255, 0);
$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 ($im, 12, 0, 5, 26, $green, $data_path."statuses/font.ttf", $text);
if ($dots) {
imagesetpixel($im, 78, 26, $green);
imagesetpixel($im, 80, 26, $green);
imagesetpixel($im, 82, 26, $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 ($im, 0, 0, 0);
$green = imagecolorallocate ($im, 255, 0, 0);
$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 ($im, 12, 0, 5, 26, $green, $data_path."statuses/font.ttf", $text);
if ($dots) {
imagesetpixel($im, 78, 26, $green);
imagesetpixel($im, 80, 26, $green);
imagesetpixel($im, 82, 26, $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");
}
}
}
?>
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/0Zuletzt geändert von DifficultChild; 20.06.2006, 16:40.Software is like ************: it's better when it's free...
Linus Torvalds
Kommentar
-
Original geschrieben von tcpip
Fällt mir noch auf, der Explorersagt...... ? LAMPP? LEXPlorer?
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 reinrutschtZuletzt geändert von DifficultChild; 20.06.2006, 16:55.Software is like ************: it's better when it's free...
Linus Torvalds
Kommentar
-
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
-
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.
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
-
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
eigentlich muss readfile() doch nur die gespeicherte Datei ausgeben und ich hab bisher nirgends etwas gefunden, dass es dabei auf Linux Servern zu Fehlern kommtSoftware is like ************: it's better when it's free...
Linus Torvalds
Kommentar
-
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
Kommentar