PHP Ergebnis als Bild ausgeben?

DarkAngel

Lieutenant
Registriert
Nov. 2002
Beiträge
647
Huhu,
vorweg... ich hab null Plan von PHP. Hab mir in den letzen ~8 Stunden ein kleines Script zusammen gebastelt. Vermutlich ist es die reinste Katastrophe, aber es funktioniert. Es werden einfach nur zwei Werte aus der Datenbank ausgelesen und dann ausgegeben. Nun will ich das Ergebnis aber woanders einbinden. Und das geht wenn nur als Bild. Das ganze müsste nämlich mit einem img Tag woanders eingebunden werden.

Nun bin ich wieder zwei Stunden am Googeln, hab auch einige Codeschnipsel gefunden und probiere damit herum. Leider komme ich nicht auf mein gewünschtes Ergebnis. Um das ganze zu vereinfachen hab ich meine Ausgabe erst einmal nur auf das Auslesen einer Tabelle beschränkt. Ich hatte gehofft, dass es so einfacher und übersichtlicher wird. Aber auch da scheitert es. Ich bekomme dann nur ein weißes Bild mit einem x drin angezeigt. Sieht aus wie Bild nicht gefunden.

Hier mal mein chaotischer Code

PHP:
<?php
$verbindung = mysql_connect ("localhost",
"?!", "?!")
or die ("keine Verbindung möglich.
 Benutzername oder Passwort sind falsch");

mysql_select_db("test")
or die ("Die Datenbank existiert nicht.");

$query = 'SELECT COUNT(*) FROM player_online';
$output = mysql_fetch_array(mysql_query($query));



$textnr = 4;
$textbreite = imagefontwidth($textnr) * strlen($output);
$texthoehe  = imagefontheight($textnr);
header ("Content-type: image/png");
$bild = imagecreate ($textbreite , $texthoehe);
 
$hintergund_farbe  = imagecolorallocate ($bild, 222, 222, 222);
$text_farbe        = imagecolorallocate ($bild, 0, 0, 0);
 
imagestring ($bild, $textnr, 0, 0, $output, $text_farbe);
imagepng ($bild);
?>

Wie/was muss ich ändern damit ich nun das Ergebnis von $output als Bild angezeigt bekomme? Wie gesagt, so wie ich es jetzt habe bekomme im Browser einfach nur ein nicht gefundenes Bild angezeigt :(
 
Also als erstes würde ich MySQLi oder PDO_MySQL anstatt MySQL benutzen. Letzteres ist veraltet.

Mein Vorgehen würde wie folgt aussehen:
1. Daten in einer Textdatei speichern
2. Datei in eine Bilddatei wie .jpg umwandeln
3. Bilddatei ausgeben

Hier findest du ein Tutorial zu PHP und Dateien.
Wäre nur mein Vorgehen als Amateur, ob es besser oder schneller geht, weiß ich momentan nicht :D

Edit:
Hier noch eine Art Beispiel, ein .pdf in ein .jpg umzuwandeln

Gruß,
Lui
 
Zuletzt bearbeitet:
Ohne den Mysql-Teil hats bei mir funktioniert.
Das Problem wird wohl sein, daß $output ein Array ist und du es als String verwendet.
 
Hey

Ich stimme als erstes mal _Lui_ voll zu mit dem Wechsel zu MySQLi!

Zu deinem Problem.
Ich habe deinen Code (ohne Datenbank Abfrage) kurz getestet und dieser funktioniert soweit.
Einfach direkt in die $output Variable einen String geschrieben.

Ich denke, da du nach der Abfrage ein mysqli_fetch_array() machst, schreibst du alle Resultate in ein Array.
Das heisst, entweder machst du einen for Loop über alle Resultate oder arbeitest z.B. mit dem 1. Resultat indem du anstatt $output --> $output[0] verwendest.

Edit:// Mugen war wohl schneller ;)
 
Huhu,
das mit MySQLi weiß ich soweit. Er tut mich hier bei der PHP Version auch immer brav darauf hinweisen das es veraltet ist. Hatte es am Anfang auch die ersten Stunden mit MySQLi versucht. Dann aber genervt aufgegeben weil es nicht geklappt hatte. Sollte das ganze funktionieren, kann ich es ja noch einmal ändern :)

Und beide teile einzeln funktionieren auch. Das mit der Datenbank und der Ausgabe klappt wenn es einfach eine PHP Datei ist die im Browser aufgerufen wird. Der Teil mit dem Bild klappt wenn der Text von Anfang an fest vorgegeben ist. Die Ausgabe über $output[0] hatte ich schon probiert gehabt. Ändern aber auch nichts. Wenn ich die Sachen über ein normales "echo" Ausgebe hatte ich auch $output[0] benutzt und da funktioniert es auch.

Ich werde mal wegen dem "for Loop" ein wenig suchen. Vielleicht finde ich da irgendwas passenden. Wenn das kleine Script läuft, werde ich PHP nie wieder anrühren :)
 
mach doch mal rotzfrech ein
var_dump($output);exit;
Dann siehst du glasklar, was deine Datenstruktur ist und was es hätte sein sollen.

Aber was natürlcih auch mit rein spielen könnte: mysql() sollte ne Deprecated Warnung ausgeben. Wenn selbige tatsächlich ausgegeben wird (und nicht unterdrückt), dann kommt sie vor dem Header. Damit ist die Header-Direktive ungültig und der ausgegebene Bildinhalt ist dann kein Bild...
Außerdem könnte natürlich auch noch BOM ne Rolle spielen.
 
Dann hätte $output[0] tatsächlich funktionieren müssen. Bleiben noch die potentiellen Header-Probleme durch ne Deprecated Warning oder BOM. Gerade wenn du unter Windows entwickelst schleichen sich gern mal BOMs ein, und die können einem bei PHP den Tag wirklich versauen.
 
Mh, ich mach das derzeit wirklich auf der Spielekiste mit Win 8.1 zusammen mit Notepad++. Ich kann die paar Zeilen aber auch mal kurz auf einer anderen Maschine unter Linux abtippen und schauen was dann passiert. Zur Not doch irgendwie das MySQLi benutzen... das wird ein Spaß ;)
 
Falls dir folgender PHP Code für MySQLi hilft... ;)
PHP:
<?php   
$dbhost = 'localhost';
$dbuser = 'user';    
$dbpwd = 'password';    
$dbname = 'database';
$con=mysqli_connect($dbhost,$dbuser,$dbpwd,$dbname);    
mysqli_query($con, "SET names utf8");
$query = mysqli_query($con, "SELECT * FROM TABLE");
$result = mysqli_fetch_array($query);
mysqli_close($con);
?>

PS: Kann mir einer sagen wieso der Foren-Editor einen Code welcher aus Sublime oder dem Editor kopiert wird beim abspeichern wieder alles anders macht (im Chrome und IE)?
 
Zuletzt bearbeitet: (Darstellung komplett verschoben)
Da du Notepad++ benutzt, kannst du dort in der Menüleiste auf Kodierung gehen und dann "UTF-8 ohne BOM" auswählen. Dann nochmal speichern.
 
Jep, bei Notepad++ besteht das BOM-Problem kaum. Das lässt sich als Fehler also schnell ausschließen.
 
Huhu,
ich hatte das ganze gestern noch zum laufen bekommen. Hab das Script erst mal auf einer virtuellen Maschine mit Debian und älterer PHP Version probiert. Da gibt es dann auch die Warnung nicht das meine Methode veraltet und demnächst entfernt wird. Da lief das ganze dann auch wie gewollt. Lag also wirklich nur an der Warnung die von PHP mit ausgegeben wurde. Hatte mich dann dran gemacht das ganze auf MySQLi abzuändern. Irgendwann nach ~5 Stunden lief es dann auch irgendwie und nun tut es der Code auf beiden Linux Maschinen :)

Schön sieht es wohl nicht aus, aber das bekommt ja auch nie jemand zu Gesicht. Also egal ;)

Aber eine Frage hab ich jetzt noch. Ich wollte eine zweite Abfrage einbauen und diese dann unter der ersten mit ausgeben. Zur Zeit scheitert es aber schon daran, dass Bild an sich größer Anzeigen zu lassen. Ich hatte mit den Zeilen:
PHP:
$textbreite = imagefontwidth($textnr) * strlen($output);
$texthoehe  = imagefontheight($textnr);
herumprobiert.

Soweit ich das verstehe, wird ja anhand der Angaben dort auch die Bildgröße bestimmt. Aber egal was ich dort auch ändere oder eintrage. Die Bildgröße bleibt immer gleich.
 
DarkAngel schrieb:
Schön sieht es wohl nicht aus, aber das bekommt ja auch nie jemand zu Gesicht. Also egal ;)

Dieser jemand bist vielleicht du in einem Jahr. Schreibe es so, dass du dann noch verstehst was du jetzt verzapft hast :)
 
Zurück
Oben