Bild mit PHP anzeigen?
Guten Tag,
Wenn ich mit folgendem Code ein Bild (png) mit PHP anzeigen will, ist die Seite schwarz und in der Mitte ein kleines Quadrat:
header("Content-type: image/png");
echo file_get_contents(__DIR__."image.png");
Wieso ist das so? Was ist falsch?
4 Antworten
Habe es eben getestet und mir wird das Bild angezeigt..
Was genau ist dein Ziel damit?
Das HTML, welches du im Browser siehst, wird vom Browser generiert. Wenn du deine PHP Datei mit etwas anderem aufrufst, solltest du das PNG als Antwort bekommen.
Habe das Bild jetzt mal mit HTML (<img src="">) hingemacht.
Kann ich nun irgendwie machen, dass ich aufs Bild drauf schreibe und das dann per URL abrufen (mit Text auf dem Bild), direkt aufs Bild (nicht auf die .php Datei)? Wenn ich TS3 auf die .php Datei weise, benutzt er nicht das Bild. Ich muss ihn also auf das Bild zuweisen und auf's Bild noch einen Text schreiben.
Ich habe noch nicht mit TS gearbeitet aber ich vermute, dass TeamSpeak ein echtes Bild erwartet (was eigentlich mit so einer .php-Datei wie du sie oben hast funktionieren sollte). Du kannst also nicht einfach mit HTML irgendeinen Text über ein Bild schreiben. Das heißt du musst die Bilddatei bearbeiten, sodass der Text tatsächlich auf dem Bild ist. Das HTML benötigst du eigentlich nicht..
Hab da sowas gefunden, probiere das mal aus:
// Setze Content-Type
header('Content-Type: image/png');
// Erzeuge das Bild
$im = imagecreatetruecolor(400, 30);
// Erzeuge einige Farben
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// Der zu zeichnende Text
$text = 'Testing...';
// Bei Bedarf ist der Pfad anzupassen
$font = 'arial.ttf';
// Füge etwas Schatten zum Text hinzu
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Füge den Text hinzu
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Die Verwendung von imagepng() ergibt bessere Textqualität als imagejpeg()
imagepng($im);
imagedestroy($im);
Da musst du aber noch dein eigenes Bild mit einbauen.
Ich muss nicht mal mein eigenes Bild einfügen.
Nichtmal diese Fläche, welche generiert wird, anstatt das Bild, wird bei mir angezeigt. Ich erhalte direkt diesen schwarzen Screen mit dem Quadrat in der Mitte. Ich versuche es mal mit einem anderen Browser, vielleicht ist Chrome einfach zu blöd.
Hast du auch die Schriftart im Verzeichnis?
$font = 'arial.ttf';
Am Browser liegt das glaube ich eher nicht
Ich habe bei mir die Schriftart geändert auf die, die ich installiert habe.
Beim Internet Explorer sieht's besser aus.
Dort wo das Bild wäre sehe ich komische Zeichen, jedoch ist bei mir Internet Explorer so veraltet, dass er die Datei nicht richtig darstellt, er schreibt einfach nur alles dahin, als wäre die komplette Datei mit <p> geschrieben.
�PNG
���
IHDR����������߇��� pHYs�������+����IDATx���A
� �0����?��U����,���;���a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@��i9��N�����IEND�B`�
Was meinst du mit installiert? Hast du den ganzen Pfad zur .ttf Datei angegeben?
Als besser würde ich das nicht bezeichnen ^^
Die .ttf Datei ist dort wo die .php Datei ist, in der .php Datei steht als Pfad einfach nur den Namen der .ttf Datei.
Besser ist es eigentlich schon, ich bin mir sicher, Internet Explorer würde das Bild anzeigen, wenn er denn die Seite überhaupt anzeigen könnte. Sieht bei mir so aus:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Bannerbot</title>
</head>
<body>
<style>
@font-face {
font-family: Offlander;
src: url(Offlander_Rough.ttf);
}
</style>
<br />
�PNG
���
IHDR����������߇��� pHYs�������+����IDATx���A
� �0����?��U����,���;���a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@�a�d�aX@��i9��N�����IEND�B`� </body>
</html>
Um dein eigenes Bild zu verwenden und anschließend Text darauf zu schreiben, musst du die erste Zeile durch folgendes ersetzen:
//$im = imagecreatetruecolor(400, 30); alt
$im = imagecreatefrompng("./image.png");
Du darfst kein HTML benutzen wenn du eine PNG Datei ausgeben willst. Es darf außerdem keinerlei Ausgaben vor einem header() Aufruf geben.
Ok, habe komplettes HTML entfernt, Datei startet mit PHP und endet mit PHP. Ändert trotzdem nichts an der ganzen Sache. Ist das "./" wichtig vor der Datei (Pfad)?
Es muss nicht zwingend "./" dort stehen, aber der Pfad muss eindeutig sein. Pfade die mit "./" beginnen gehen vom eigenen Verzeichnis aus. Wenn deine .ttf Datei also im selben Verzeichnis ist, wie deine .php Datei, dann könntest du es verwenden.
Hmm ok, meine Dateien:
-- Bannerbot (Ordner)
|
|
-- api (Ordner mit TeamSpeak Framework)
-- index.php (PHP Datei)
-- ts3banner.png (Zuverwendendes Bild)
-- Offlander_Rough.ttf (Zuverwendende Schriftart)
Code für die Schriftart:
$font = './Offlander_Rough.ttf';
Ja so sollte der Pfad stimmen.
Funktioniert es, wenn du
header('Content-Type: image/png');
ganz an den Anfang im PHP setzt? Und evtl. kannst du zum testen den TeamSpeak relevanten Code auskommentieren.
<?php
header('Content-Type: image/png');
$im = imagecreatetruecolor(400, 30);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$text = 'Testing...';
$font = './Offlander_Rough.ttf';
imagettftext($im, 20, 0, 10, 25, $black, $font, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Funktioniert dieser Code? Teste ihn evtl in einer neuen, leeren .php Datei.
Das ist alles, was mir Google Chrome anzeigt.
Ist bei dir ein schwarzes "Quadrat" mit einem Weißen Quadrat Rand in der Mitte?
Wieso heißt die Datei Unbenannt.PNG und nicht xy.php? htaccess oder was?
Diese Unbenannt.PNG ist nur ein Screenshot von meiner Sicht aus.
Kannst du den Link zur php Datei schicken, damit ich sehen kann ob es bei mir ebenfalls so aussieht? Oder ist dieser dir zu "privat"?
Hab noch ein weiteres Verzeichnis auf meinem Server erstellt:
PHP.
Bild.
Auf dem Server ist bei mir kein Quadrat mehr da, aber die Seite ist einfach weiss, also wird das Bild trotzdem nicht angezeigt.
Kannst du noch den aktuellen Code der PHP Datei posten?
Dieses weiße Kästchen erscheint bei mir, wenn ich eine andere Ausgabe im Code habe. Beispiel:
<?php
header('Content-Type: image/png');
echo "t"; // hier eine Ausgabe
$im = imagecreatefrompng("./tanzverbot.png");
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
$text = 'Testing...';
$font = './Roboto-Regular.ttf';
imagettftext($im, 20, 0, 10, 25, $black, $font, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
Deshalb empfehle ich dir, deinen Image Code erstmal ohne den TS3 Code zu testen.
Meinst du also, mein TS3 Code zerstört den Rest? Das hat vorhin eigentlich auch funktioniert: https://agiger03.ga/Bannerbot/index.php
Hier ist nur das Problem, dass TS das nicht als Banner zählt, weil es nur übers Bild geschrieben ist und das Bild als Hintergrundbild für die Seite gilt. Sonst wäre das halt perfekt ;)
Nein, aber wenn es auch nur ein Leerzeichen ist, zählt das als Ausgabe was zu dem Kästchen führt.
Hmm.. vielleicht geht das auch viel leichter, mit der Variante, die eigentlich funktioniert. Kann ich vielleicht mit einer separaten Datei eine Art Bild von dieser index.php machen (die, wo das Banner als Hintergrund ist). Dass TS3 dann einfach diese separate Datei als Bild verwendet, welche eine Art Screenshot der index.php beinhaltet.
Evtl schon aber ich glaube das ist komplizierter. Wieso willst du es nicht ohne TS3 testen? Ist ja nur um zu sehen ob das Bild alleine funktioniert ^^
Hab ich eben gemacht. Es ändert nichts, ich sehe immer nur dieses Quadrat.
Hast du vor deinem <?php Tag ein Leerzeichen oder eine leere Zeile? Wenn ja dann löschen
Nein, im Internet findet man sowas:
<?php
$html = file_get_contents('http://www.website.any');
preg_match_all( '|<img.*?src=[\'"](.*?)[\'"].*?>|i',$html, $matches );
echo $matches[ 1 ][ 0 ];
?>
Damit sollte ich eine Art Foto der Seite machen können, könnte dies klappen?
Damit erhälst du kein Bild sondern den Inhalt von src aus img Tags aus der durchsuchten Seite
Hmm ok :P Ich frage mal Regex9, ob er eine Methode kennt und ob das einfach ist ;)
Also funktionieren tut es irgendwie, kenne Seiten die sowas können, weiss aber nicht, ob die dafür JavaScript verwenden.
Wenn man danach sucht kommen hauptsächlich Methoden die Javascript verwenden.
Hätte hier nochmal was:
<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');
while($Browser->Busy){
com_message_pump(4000);
}
$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>
Ansonsten könnte ich bei php einen Teil JavaScript einbauen, sowie das bei HTML geht (ohne extra Datei)?
Hast du diesen Code getestet?
JavaScript ist normalerweise clientsided. Aber da du ja einen vServer hast ( wie du oft betonst ^^) kannst du ja auch auf deinem Server JavaScript verwenden.
Ich teste diesen Code jetzt mal... weiss nur nicht, wie ich das machen soll, dass er alle 60 Sekunden den Code wieder ausführt, ohne dass jemand die .php Datei aufruft.
Der Code geht nicht, war irgendwie klar :P
Ich suche im Internet mal nach einer PHP Klassenbibliothek, die eine Website zu einem Bild verwandelt, wie Regex9 das oben erwähnt hat.
Du kannst einen Cronjob verwenden, um die Datei regelmäßig aufzurufen. Oh, hat regex9 ja auch schon erwähnt..
Hmm ok, ich versuche erstmal ein Bild hiermit zu machen: https://pdfcrowd.com/doc/api/html-to-image/php/
Das funktioniert mehr oder weniger. Das Bild hat die falsche Auflösung, mal schauen, ob ich das irgendwo einstellen kann.
Leider kostet dies, ich versuche mal herauszufinden, wie das funktioniert, dann kann ich auf den kostenpflichtigen Service verzichten.
if (!($file_path != null && $file_path !== ''))
throw new Error(create_invalid_value_message($file_path, "file_path", "html-to-pdf", "The string must not be empty.", "convert_url_to_file"), 470);
$output_file = fopen($file_path, "wb");
if (!$output_file) {
$error = error_get_last();
throw new \Exception($error['message']);
}
try {
$this->convertUrlToStream($url, $output_file);
fclose($output_file);
}
catch(Error $why) {
fclose($output_file);
unlink($file_path);
throw $why;
}
function convertUrlToStream($url, $out_stream) {
if (!preg_match("/(?i)^https?:\/\/.*$/", $url))
throw new Error(create_invalid_value_message($url, "url", "html-to-pdf", "The supported protocols arehttp:/// and https://.", "convert_url_to_stream"), 470);
$this->fields['url'] = $url;
$this->helper->post($this->fields, $this->files, $this->raw_data, $out_stream);
}
Kann ich das in meine PHP Datei einbauen?
Naja dieser Teil alleine wird dir nicht weiterhelfen. Da benötigst du schon noch mehr.
Dann schaue ich lieber, ob ich noch eine kostenlose Variante finde :D
Bin dran, er findet aber die Klasse nicht. Klassen importiert man doch mit include("pfad/zur/klasse.php"); richtig?
Hier scheint es wohl anders zu sein.
Habe jetzt die eine Datei in meine .php rein getan. Anscheinend findet er aber eine Klasse nicht, welche eigentlich dadrin sein sollte.
Ich versuch die mal zu finden, glaube das dürfte funktionieren.
Ok, habs herausgefunden, hatte die v1, weiter unten is der Downloadlink zur v2 :P
Ich krieg Aids:
Fatal error: Uncaught Error: Class 'Spatie\Image\Manipulations' not found in C:\xampp\htdocs\Bannerbot\shoter.php:63 Stack trace: #0 C:\xampp\htdocs\Bannerbot\shoter.php(46): Spatie\Browsershot\Browsershot->__construct() #1 C:\xampp\htdocs\Bannerbot\shoter.php(666): Spatie\Browsershot\Browsershot::url('https://agiger0...') #2 {main} thrown in C:\xampp\htdocs\Bannerbot\shoter.php on line 63
Jedesmal behebt man einen Fehler, dann kommt der nächste...
Hab eigentlich alles wichtige von seiner GitHub Seite befolgt.
Erhalte aber immer noch diesen Fehler:
Parse error: syntax error, unexpected '/', expecting ',' or ';' in C:\xampp\htdocs\Bannerbot\shoter.php on line 2
Line 2:
use browsershot_master/src/Browsershot.php;
Wie soll ich den Pfad denn sonst angeben, wenn ich kein / verwenden darf?
Damit geht's auch nicht. Bin mir jetzt aber beim Pfad auch nicht mehr sicher:
GitHub: use Spatie\Browsershot\Browsershot;
Meins: use browsershot_master\src\Browsershot.php;
Mein gutefrage buggt mal wieder rum^^ Also wunder dich nicht wegen diesem Quelltext bei GitHub, bekomm den net weg und gutefrage hat den automatisch dahin gepackt :P
Ja der Pfad stimmt.
Er verlangt ja eine Klasse, diese Klasse ist in dieser .php welche ich mit diesem Pfad angegeben habe.
Es ist aber nicht der Dateipfad den du bei use nutzen musst. Hast du es mit dem originalen use probiert?
use Spatie\Browsershot\Browsershot;
Ja, hab ich auch, beide gehen nicht.
Scheint wohl als würde es mit Folgendem funktionieren, jedoch kommt jetzt die nächste Klasse, die er nicht findet :(
require_once('browsershot_master/src/Browsershot.php');
use Spatie\Browsershot\Browsershot;
Glaube nicht, was jetzt gebraucht wird ist keine Datei, die ich runterladen kann:
Fatal error: Uncaught Error: Class 'Spatie\Image\Manipulations' not found in C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php:63 Stack trace: #0 C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php(46): Spatie\Browsershot\Browsershot->__construct() #1 C:\xampp\htdocs\Bannerbot\shoter.php(6): Spatie\Browsershot\Browsershot::url('https://agiger0...') #2 {main} thrown in C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php on line 63
Vermutlich müsste ich das mit all den folgenden Dateien noch tun. Man findet diese im namespace, welches schon importiert wurde:
namespace Spatie\Browsershot;
use Spatie\Image\Image;
use Spatie\Image\Manipulations;
use Symfony\Component\Process\Process;
use Spatie\TemporaryDirectory\TemporaryDirectory;
use Spatie\Browsershot\Exceptions\ElementNotFound;
use Spatie\Browsershot\Exceptions\CouldNotTakeBrowsershot;
use Symfony\Component\Process\Exception\ProcessFailedException;
Aber es gibt keine Dateien mit diesen namespaces oder?
Frage mich wo die auch sein sollten.... habe keinen Ordner der Spatie heisst, weder noch Image, Component oder Process.
Es muss nicht zwingend Ordner mit diesen Namen geben aber Dateien, die solch einen namespace haben.
Habe aber auch keine weiteren php Dateien auf GitHub von diesem Projekt gefunden.
Jetzt darf ich geschätzte 5 Pakete runterladen^^ Wäre ja zu viel gewesen, alle in eins zu packen :P
Ist wohl doch nicht sooo viel einfacher als der ursprüngliche Ansatz^^
Fatal error: Uncaught Symfony\Component\Process\Exception\ProcessFailedException: The command "node ^"C:^\xampp^\htdocs^\Bannerbot^\browsershot_master^\src/../bin/browser.js^" ^"^{^\^"url^\^":^\^"https:^\/^\/agiger03.ga^\/Bannerbot^\/index.php^\^",^\^"action^\^":^\^"screenshot^\^",^\^"options^\^":^{^\^"type^\^":^\^"png^\^",^\^"path^\^":^\^"nerban.png^\^",^\^"args^\^":^[^],^\^"viewport^\^":^{^\^"width^\^":1180,^\^"height^\^":353^}^}^}^"" failed. Exit Code: 1(General error) Working directory: C:\xampp\htdocs\Bannerbot Output: ================ Error Output: ================ Der Befehl "node" ist entweder falsch geschrieben oder konnte nicht gefunden werden. in C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php:597 Stack trace: #0 C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php(411): Spatie\Browsershot\Browsershot->callBrowser(Array) #1 C:\xampp\htdocs\Bannerbot\shoter.php(13): Spatie\Browsershot\Browsershot->save('nerban.png') #2 {main} thrown in C:\xampp\htdocs\Bannerbot\browsershot_master\src\Browsershot.php on line 597
Und bei dem Error geh ich schlafen ;)
http://phantomjs.org/screen-capture.html
Jetzt müsste ich nur wissen, wie ich folgenden JavaScript Code ausführe:
var page = require('webpage').create();
page.open('https://agiger03.ga/Bannerbot/', function() {
page.render('nerban.png');
phantom.exit();
});
Einfach auf eine HTML Seite und die dann aufrufen, vermute ich. Oder soll das auf dem Server ausgeführt werden?
Hmm, ich probiere gerade eine andere Methode aus. Mal schauen, ob das funktioniert...
Hmm ok, hiermit:
<?php
$ch = curl_init('https://agiger03.ga/Bannerbot/index.php');
$fp = fopen('nerban.png', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Wird einfach der Seitenquelltext als .png gespeichert...
Dabei wird ja auch nirgends etwas anderes versucht. Die aufgerufene Seite enthält auch kein Bild sondern HTML.
Naja, ich befürchte mein Problem ist, dass ich das Bild als HTML Body Hintergrundbild verwende.
Daher ist eigentlich die einzige Möglichkeit ein Screenshot der Seite, ansonsten müsste ich das Zeug alles umändern. Wenn ich das mache zeigt mir Chrome wieder ein schönes Quadrat in der Mitte an.
Das Problem mit dem Quadrat passiert, wenn es eine falsche Ausgabe gibt. Wenn Chrome ein Bild erwartet und etwas anderes zurück gegeben wird, passiert ein solcher Fehler. Kannst du auch sehen wenn du eine einfache PNG-Datei auf deinem PC mit beispielsweise Notepad++ änderst und ein Leerzeichen an den Anfang der Datei setzt und anschließend in Chrome öffnest erhält man ein Quadrat
<?php
$ch = curl_inithttps://agiger03.ga/Bannerbot/index.phpp');
$fp = fopen('nerban.png', 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Das Problem daran ist das HTML selbst. Du kannst das HTML nicht einfach als Bild speichern.
Ich versuchs grad damit: https://www.lukaswhite.com/blog/generating-website-screenshots-php
Danach muss ich zur Schule :(
Sorry, bin grad am Zocken ;) Muss mich vom Augenkrebs von gestern erholen :D
Funktioniert auch nicht. Ich probier das nochmal mit PhantomJS.
Hast du dein JavaScript auf deinem Server ausgeführt, auf dem du PhantomJS installiert hast? (Kommt bei dir auch eine Fehlermeldung auf GF wenn du auf meinen letzten Kommentar antworten willst?)
- Frage versteh ich nicht
- Frage: Nein, habe keine Probleme.
Parse error: syntax error, unexpected '$request1' (T_VARIABLE) in C:\xampp\htdocs\Bannerbot\shoter.php on line 17
Zeile 17:
$request1 = $client->getMessageFactory->createCaptureRequest('https://agiger03.ga/Bannerbot/index.php', 'GET')
lol ja, aber der Code ist ausem Internet kopiert. Aber der Fehler kommt immer noch.
Fehlt noch eins oder evtl eine Klammer? ^^ Und was verwendest du jetzt eigentlich genau?
Sehe jetzt da nicht was fehlt, die Zeile darüber:
$client->getEngine()->addOption('--ignore-ssl-errors=true');
PhantomJS.
Ist der Fehler noch in der selben Zeile?
PhantomJS alleine verwendet doch kein PHP? Meinst du das: https://github.com/jonnnnyw/php-phantomjs ?
Genau das hab ich installiert.
Als Vorlage habe ich das genommen:
https://coderwall.com/p/ceta4w/how-to-take-a-screenshot-of-a-website-with-php-phantomjs
Die Zeile mit dem Fehler hat auch ein fehlendes Semikolon, falls du das übersehen hast:
$request1 = $client->getMessageFactory->createCaptureRequest('https://agiger03.ga/Bannerbot/index.php', 'GET');
Ich versteh die Welt nicht mehr:
Fatal error: Uncaught Error: Class 'JonnyW\PhantomJs\DependencyInjection\ServiceContainer' not found in C:\xampp\htdocs\Bannerbot\php-phantomjs-master\src\JonnyW\PhantomJs\Client.php:103 Stack trace: #0 C:\xampp\htdocs\Bannerbot\shoter.php(6): JonnyW\PhantomJs\Client::getInstance() #1 {main} thrown in C:\xampp\htdocs\Bannerbot\php-phantomjs-master\src\JonnyW\PhantomJs\Client.php on line 103
Ich behebe einen Fehler, dann kommt der Nächste...
Bei mir kommen auch etliche Fehler...
Ich denke, dass die andere Lösung, bei der man das Bild mit php bearbeitet, die bessere und einfachere ist.
Sorry, dass es so lange dauert, mein PC macht grad harte Probleme:
Wenn ich GTA V starte bekommt Bildschirm 1 kein Signal mehr, Bildschirm 2 und 3 frieren ein. Muss PC dann immer auf die harte Art neustarten.
Ja, alle mit require.
Das klingt aber nicht fein :0
Ich habe es mit Composer getestet aber scheinbar benötigt man auch einige Symfony Klassen. Da hab ich dann aber aufgehört ^^. Willst du es nicht nochmal mit der anderen Methode probieren?
Kann ich machen, dauert halt bisschen da es grad nicht so angenehm ist an diesem PC zu arbeiten^^
Ich regel hier erstmal das Problem mit dem Rockstar Games Support. Der lässt mich meinen PC sowieso x Mal neustarten ;)
Joa, mit Hilfe von mir. Scheint so, als wäre mein Netzteil nach 6 Monaten defekt 🙄.
Ich versuch mein Glück dann mal hier weiter.
Microsoft Support ist schlimmer. Die können dir nicht nur nicht helfen, die sind auch angepisst.
Hmm.. Die haben mir mal einen Key geschenkt, da war ich dann schon zufrieden ^^. Willst du evtl Plattform switchen, falls du hierbei noch irgendwie Hilfe benötigst?
Wenn du willst.. Mir geht dieser Kommentieren-Fehler auf die Nerven und wir sind hier schon bei 120 Kommentaren ^^ Und idk was die GF Mods davon halten wenn man hier vom Thema abkommt.
120 Kommentare haben dann meinen letzten Rekord von ca. 80 überschritten...
Wie wärs denn einfach, wenn ich dich bei Problemen über Discord anschreiben könnte?
Geplant sind noch 2 Websites wo ich bestimmt Hilfe brauche bei Registrieren, Anmelden, Ticketsystem usw.
Gibt es denn die Datei image.png im selben Verzeichnis in dem Du die PHP-Datei abgelegt hast?
Stimmt auch die Groß-/Kleinschreibung beim Dateinamen?
Rufst Du die PHP-Datei per http auf?
Steht evtl. was im Error-Log?
Die Datei existiert (einfach mit einem anderen Namen, hab hier als Beispiel einfach image.png hingeschrieben), richtig geschrieben.
Ich rufe die Seite als localhost auf.
Fehler bekomme ich keine (apache2_errorlog), php_errorlog wird nicht gefunden.
Rufst Du die Seite per http://localhost auf und hast Du PHP installiert?
Ruf die Seite mal im Browser auf und drücke dann Strg + U - was siehst Du dann (sollte die Quellcode-Ansicht der geladenen Seite sein).
Naja, bei Chrome ist das grau (kann ich nicht machen) und beim Internet Explorer wird nur das angezeigt, der versteht die gesamte Datei nicht xD
PHP ist installiert, ja, ich mache es mit "http://localhost".
Wenn der Chrome grau anzeigte wurde nichts an den Browser ausgeliefert. Sieht so aus als wäre PHP installiert und würde lediglich durch einen Fehler an der Ausgabe gehindert werden.
Daher wäre es umso wichtiger, dass Du auch Fehlerausgaben bekommst. Anhand von diesen kannst Du herausbekommen was bei dir falsch läuft. Hier gibt es Hinweise was dazu zu tun ist:
https://andreas-bruns.com/2014/09/29/anzeigen-von-fehlermeldungen-in-php/
https://www.php-kurs.com/php-fehlermeldungen.htm
file_get_contents ist für ASCII Dateien nicht für BINARY.
Versuche es mal so:
$im = imagecreatefrompng(__DIR__."image.png");
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
Nein, file_get_contents zieht die ganze Datei (oder Teile derer) in einen String. Letzterer darf jede Art von Zeichen enthalten.
Alternativ tut es ein readfile, welches gleich in den Ausgabepuffer weiterschaufelt.
Da fehlt ein Slash im Pfad.
echo file_get_contents(__DIR__."/image.png");
Hab mich von dieser Methode verabschiedet. Falls du aktuell sein willst kannst du die Diskussion von ikinikin und mir durchlesen ;)
Ich will die Datei halt für ein TS3 Banner verwenden und habe gehört, dass TS3 das als Banner identifiziert darf kein echo, print oder jegliche andere Ausgabemethode verwendet werden.
Was soll die Seite dann machen, wenn sie keinen Response liefert? Kannst du dann nicht einfach die Bildurl verwenden (deine Domain + relativer Bildpfad)?
PHP liest mit Hilfe vom TeamSpeak Framework alle Daten die ich brauche aus und soll diese dann auf das Bild drauf schreiben, TS3 soll das Bild, welches PHP dort mit einem Text verseht als Banner anzeigen.
Achso. Na dann bist du schon auf dem richtigen Weg mit imagepng.
Das Problem ist halt, dass bei mir das Bild nicht angezeigt wird. Dabei ist es egal, ob localhost oder vServer.
Kennt du vielleicht eine Methode, wie ich eine Art Screenshot dieser Website machen kann? Diesen dann als .PNG speicher kann, so kann TS3 das ohne Probleme benutzen. Dies sollte alle 60 Sekunden aktualisiert werden und die alte Datei überschrieben werden.
PHP-Screenshots kann man mit imagegrabscreen machen, nur geht das viel zu schnell, denn die Funktion kann nicht warten, bis das Dokument fertig geladen ist. Daher wäre der Weg über JavaScript eher zu wählen. Mit einer Bibliothek wie html2canvas kannst du das DOM erst auf ein Canvas zeichnen lassen und dann via toDataURL eine Bild-URL dazu erhalten.
Andernfalls gibt es sicherlich auch PHP Bibliotheken, die dir eine HTML-Seite zu einem Bild konvertieren. Die Aktualisierung im Intervall kann ein PHP Cronjob erledigen.
Zu deinem Bildanzeigeproblem antworte ich später nochmal. Den Pfad wirst du ja bereits überprüft haben.
Ich versuch's mal damit: https://pdfcrowd.com/doc/api/html-to-image/php/
Hmm ok.
Gibt es eine andere Möglichkeit? Die PHP Seite soll nachher einfach als .PNG erkannt werden (TS3 Banner).