• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Text als Grafik

KayjayPP

Neues Mitglied
Hallo,
Ich hab mir ein Script besorgt welches Statistiken des jeweiligen Minecraftservers als Text anzeigt.
Jetzt möchte ich diese Statistik auf ein Image rauf hauen. Wie funktioniert das?


Code:
<?php

    include_once 'MinecraftServerStatus/status.class.php';
    $status = new MinecraftServerStatus();
    $response = $status->getStatus('184.164.133.34');
    if(!$response) {
        echo"Der Server ist Offline.";
    } else {
        echo"Name: '".$response['motd']."'.
        <br>
        IP: ".$response['hostname']." 
        <br>
        Version: ".$response['version']."
        <br>
        Spieler: ".$response['players']."/".$response['maxplayers'].".
        <br> 
        Ping: ".$response['ping']." ms.";
    }


?>


Durch Google hab ich ein Script gefunden weiß aber nicht wie ich das einbinden soll. Das Script war von einem Tutorial
wie man ein Smiley mit seiner eigenen IP erstellen kann. Ich habe versucht die beiden Scripts zu kombinieren habs aber nicht geschafft.
Ich bitte um Hilfe ;(

Code:
[COLOR=black][FONT=Consolas]<?php[/FONT][/COLOR][COLOR=#606060][FONT=Consolas]//IP Adresse des Browsers abfragen[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]$ip = $_SERVER['REMOTE_ADDR'];[/FONT][/COLOR]

[COLOR=#606060][FONT=Consolas]//Bild laden[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//(Name des Bildes, muss im gleichen Verzeichnis sein wie das PHP-Script)[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]$image = imagecreatefromgif ('ip-smilie.gif');[/FONT][/COLOR]

[COLOR=#606060][FONT=Consolas]//Farbe für den Text setzen[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//Farben werden als RGB-Wert übergeben:[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//z.B. 0 , 0 , 0 = Schwarz[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//z.B. 255, 255, 255 = Weiß[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//z.B. 0 , 0, 255 = Blau[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]$farbe = imagecolorallocate ( $image, 0, 0, 0 );[/FONT][/COLOR]

[COLOR=#606060][FONT=Consolas]//IP-Adresse in Bild schreiben[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//5 = Schriftgröße[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//50 = Text-Abstand im Bild von rechts (x-Achse)[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]//12 = Text-Abstand im Bild von oben (y-Achse)[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]imagestring ( $image, 7, 45, 15, $ip, $farbe );[/FONT][/COLOR]

[COLOR=#606060][FONT=Consolas]//Bild ausgeben[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]header("Content-Type: image/gif");[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]imagegif($image);[/FONT][/COLOR]
[COLOR=#606060][FONT=Consolas]ImageDestroy($image);[/FONT][/COLOR]
[COLOR=black][FONT=Consolas]?>[/FONT][/COLOR]
 
Werbung:
Werbung:
Natürlich ungetestet:
PHP:
<?php
    include_once 'MinecraftServerStatus/status.class.php';
    $status = new MinecraftServerStatus();
    $response = $status->getStatus('184.164.133.34');
    
    if(!$response)
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,50);
       $red = imagecolorallocate ($image, 255, 0, 0 );
       imageFill($image, $red, 0, 0);
       $white = imagecolorallocate ($image, 255, 255, 255 );
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Der Server ist Offline.");
    }
    else
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,140);
       $red = imagecolorallocate ($image, 255, 0, 0 );
       imageFill($image, $red, 0, 0);
       $white = imagecolorallocate ($image, 255, 255, 255 );
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Name: " . $response['motd']);
       ImageTTFText ($image, 20, 0, 10, 40, $white, "arial.ttf", "IP: " . $response['hostname']);
       ImageTTFText ($image, 20, 0, 10, 60, $white, "arial.ttf", "Version: " . $response['version']);
       ImageTTFText ($image, 20, 0, 10, 80, $white, "arial.ttf", "Spieler: " .$response['players'] . "/" . $response['maxplayers']);
       ImageTTFText ($image, 20, 0, 10, 100, $white, "arial.ttf", "Ping: " .$response['ping'] . " ms.");
    }

    header('Content-Type: image/jpeg');
   imagejpeg($image, NULL, 80);
   ImageDestroy($image);
?>
Die TTF-Datei arial.ttf muss im gleichen Verzeichnis wie das Script liegen oder der Pfad mit angepasst werden.
 
Natürlich ungetestet:
PHP:
<?php
    include_once 'MinecraftServerStatus/status.class.php';
    $status = new MinecraftServerStatus();
    $response = $status->getStatus('184.164.133.34');
    
    if(!$response)
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,50);
       $red = imagecolorallocate ($image, 255, 0, 0 );
       imageFill($image, $red, 0, 0);
       $white = imagecolorallocate ($image, 255, 255, 255 );
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Der Server ist Offline.");
    }
    else
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,140);
       $red = imagecolorallocate ($image, 255, 0, 0 );
       imageFill($image, $red, 0, 0);
       $white = imagecolorallocate ($image, 255, 255, 255 );
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Name: " . $response['motd']);
       ImageTTFText ($image, 20, 0, 10, 40, $white, "arial.ttf", "IP: " . $response['hostname']);
       ImageTTFText ($image, 20, 0, 10, 60, $white, "arial.ttf", "Version: " . $response['version']);
       ImageTTFText ($image, 20, 0, 10, 80, $white, "arial.ttf", "Spieler: " .$response['players'] . "/" . $response['maxplayers']);
       ImageTTFText ($image, 20, 0, 10, 100, $white, "arial.ttf", "Ping: " .$response['ping'] . " ms.");
    }

    header('Content-Type: image/jpeg');
   imagejpeg($image, NULL, 80);
   ImageDestroy($image);
?>
Die TTF-Datei arial.ttf muss im gleichen Verzeichnis wie das Script liegen oder der Pfad mit angepasst werden.


Danke für die Antwort.
Leider wird kein Bild angezeigt ;(

http://sekclan.pf-control.de/1/example2.php

http://sekclan.pf-control.de/1/example.php (Das ist die Text Version)
 
Dreh mal das Error-Reporting hoch:
PHP:
<?php
   error_reporting(E_ALL);
   ini_set("display_errors", true);

   // Ab hier der Rest des Scriptes
?>
 
Werbung:
PHP:
<?php
    include_once 'MinecraftServerStatus/status.class.php';
    $status = new MinecraftServerStatus();
    $response = $status->getStatus('184.164.133.34');
    
    if(!$response)
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,50)
          or die ("imagecreatetruecolor failed");
          
       $red = imagecolorallocate ($image, 255, 0, 0 )
           or die ("imagecolorallocate failed");
           
       imageFill($image, $red, 0, 0)
          or die ("imageFill failed");
          
       $white = imagecolorallocate ($image, 255, 255, 255 )
          or die ("imagecolorallocate failed");
          
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Der Server ist Offline.")
          or die ("ImageTTFText failed");
    }
    else
    {
       // Hier mit der Breite und Höehe experimetieren, bis es passt.
       $image = imagecreatetruecolor(150,140)
          or die ("imagecreatetruecolor failed");
          
       $red = imagecolorallocate ($image, 255, 0, 0 )
          or die ("imagecolorallocate failed");
          
       imageFill($image, $red, 0, 0)
          or die ("imageFill failed");
          
       $white = imagecolorallocate ($image, 255, 255, 255 )
          or die ("imagecolorallocate failed");
          
       // Hier mit der den X- und Y-Koordinaten experimetieren, bis es passt.
       ImageTTFText ($image, 20, 0, 10, 20, $white, "arial.ttf", "Name: " . $response['motd'])
          or die ("ImageTTFText failed");
          
       ImageTTFText ($image, 20, 0, 10, 40, $white, "arial.ttf", "IP: " . $response['hostname'])
          or die ("ImageTTFText failed");
          
       ImageTTFText ($image, 20, 0, 10, 60, $white, "arial.ttf", "Version: " . $response['version'])
          or die ("ImageTTFText failed");
          
       ImageTTFText ($image, 20, 0, 10, 80, $white, "arial.ttf", "Spieler: " .$response['players'] . "/" . $response['maxplayers'])
          or die ("ImageTTFText failed");
          
       ImageTTFText ($image, 20, 0, 10, 100, $white, "arial.ttf", "Ping: " .$response['ping'] . " ms.")
          or die ("ImageTTFText failed");
    }

   header('Content-Type: image/jpeg');
   imagejpeg($image, NULL, 80);
   ImageDestroy($image);
?>
Achte darauf, dass du keine Leerzeichen oder Leerzeilen am Anfang oder am Ende des Scriptes hast!
 
Werbung:
Hat die status.class.php eventuell ein Leerzeichen oder Leerzeile vor <?php bzw. nach ?>
 
Und dein Script auch nicht? Sehr gerne wird vor dem <?php oder nach dem ?> ein Blank übersehen
 
Werbung:
Nein, leider nicht
die Textversion funktioniert ja

Code:
<?php

    /**
     * Minecraft Server Status Query
     * @author Julian Spravil <[email protected]> https://github.com/FunnyItsElmo
     * @license Free to use but dont remove the author, license and copyright
     * @copyright © 2013 Julian Spravil
     */
    class MinecraftServerStatus {
        private $timeout;


        /**
         * Prepares the class.
         * @param int    $timeout   default(3)
         */
        public function __construct($timeout = 3) {
            $this->timeout = $timeout;
        }


        /**
         * Gets the status of the target server.
         * @param string    $host    domain or ip address
         * @param int    $port    default(25565)
         */
        public function getStatus($host = '127.0.0.1', $port = 25565) {


            //Transform domain to ip address.
            if (substr_count($host , '.') != 4) $host = gethostbyname($host);


            //Get timestamp for the ping
            $start = microtime(true);


            //Connect to the server
            if(!$socket = @stream_socket_client('tcp://'.$host.':'.$port, $errno, $errstr, $this->timeout)) {


                //Server is offline
                return false;




            } else {


                stream_set_timeout($socket, $this->timeout);


                //Write and read data
                fwrite($socket, "\xFE\x01");
                $data = fread($socket, 2048);
                fclose($socket);
                if($data == null) return false;


                //Calculate the ping
                $ping = round((microtime(true)-$start)*1000);


                //Evaluate the received data
                if (substr((String)$data, 3, 5) == "\x00\xa7\x00\x31\x00"){


                    $result = explode("\x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2'));
                    $motd = preg_replace("/(§.)/", "",$result[1]);


                }else{


                    $result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2'));


                    $motd = "";
                    foreach ($result as $key => $string) {
                        if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) {
                            $motd .= '§'.$string;
                        }
                    }


                    $motd = preg_replace("/(§.)/", "", $motd);


                }
                //Remove all special characters from a string
                $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd);


                //Set variables
                $res = array();
                $res['hostname'] = $host;
                $res['version'] = $result[0];
                $res['motd'] = $motd;
                $res['players'] = $result[sizeof($result)-2];
                $res['maxplayers'] = $result[sizeof($result)-1];
                $res['ping'] = $ping;


                //return obj
                return $res;
            }


        }
    }


?>

Das ist die status.class.php

Hoffe ich darf die so zeigen
 
Die Textversion ist doch egal, da spielen Blanks keine Rolle. Eine weitere Hürde könnten UTF-8-Dateien mit BOM sein, da hast du Steuerzeichen am Anfang, die man aber nicht unbedingt sieht.
 
Die Textversion ist doch egal, da spielen Blanks keine Rolle. Eine weitere Hürde könnten UTF-8-Dateien mit BOM sein, da hast du Steuerzeichen am Anfang, die man aber nicht unbedingt sieht.

Ich benutze Notepad++ und habe mal die Funktion "Alle zeichen anzeigen" aktiviert.
Da ist kein Leerzeichen am Ende
 
Werbung:
Die TTF-Datei ist auch vorhanden??

<edit>
Habe mir gerade mal die status.class.php besorgt und das Script von mir getestet. Funktioniert, bekomme eine Grafik mit

Server ist offline
</edit>
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für die große Hilfe von dir :)
Das liegt dann wohl an meinem Browser oder meinem Hoster, ich versuch das mal mit einem anderen Hoster.

Mir wird kein Bild angezeigt. Da kommt das Zeichen was kommt wenn da kein Bild vorhanden ist.



edit:

Code:
Warning: imagecreate() expects exactly 2 parameters, 7 given in /var/customers/webs/sekclan/1/example2.php on line 22

Call Stack:
0.0004 685672 1. {main}() /var/customers/webs/sekclan/1/example2.php:0
0.3460 857024 2. imagecreate() /var/customers/webs/sekclan/1/example2.php:22


Warning: imagecreate() expects exactly 2 parameters, 7 given in /var/customers/webs/sekclan/1/example2.php on line 23

Call Stack:
0.0004 685672 1. {main}() /var/customers/webs/sekclan/1/example2.php:0
0.3461 857384 2. imagecreate() /var/customers/webs/sekclan/1/example2.php:23


Warning: imagecreate() expects exactly 2 parameters, 7 given in /var/customers/webs/sekclan/1/example2.php on line 24

Call Stack:
0.0004 685672 1. {main}() /var/customers/webs/sekclan/1/example2.php:0
0.3461 857376 2. imagecreate() /var/customers/webs/sekclan/1/example2.php:24


Warning: imagecreate() expects exactly 2 parameters, 7 given in /var/customers/webs/sekclan/1/example2.php on line 25

Call Stack:
0.0004 685672 1. {main}() /var/customers/webs/sekclan/1/example2.php:0
0.3462 857376 2. imagecreate() /var/customers/webs/sekclan/1/example2.php:25


Warning: imagecreate() expects exactly 2 parameters, 7 given in /var/customers/webs/sekclan/1/example2.php on line 26

Call Stack:
0.0004 685672 1. {main}() /var/customers/webs/sekclan/1/example2.php:0
0.3462 857376 2. imagecreate() /var/customers/webs/sekclan/1/example2.php:26

Was bedeutet das ;D?
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben