Forum: PC-Programmierung PHP komische Zeichen anstatt Bild


von Joel (Gast)


Lesenswert?

Hallo zusammen
Wie im Titel schon steht bekomm wenn ich ein bild ausgeben will nur 
komische Zeichen wie diese 
(8%�1#(�Y����b9NEB<�GJfRx���y�+^��~�>�"��[G53[�).

Code
1
$IconUrl = "images/itemicons/" . $json_BotInv[0][4] . ".png";
2
3
$item = imagecreatefrompng($IconUrl);
4
5
imagepng($item);

Was ist der fehler????


MFG
Joel

von Daniel A. (daniel-a)


Lesenswert?

Du musst den Content Type setzen, sonst weiss der Browser nicht, dass es 
ein bild ist. Einfach ganz am anfang:
1
header("Content-Type: image/png");

von Joel (Gast)


Lesenswert?

Habs gemacht sieht jetzt so aus:
1
<?php
2
    header("Content-Type: image/png");
3
4
    require 'steamauth/steamauth.php';
5
    require 'steamauth/userInfo.php';
6
    require 'steamauth/BotInv.php';
7
    require 'ItemIconScript.php';
8
9
    
10
11
    $json_BotInv = @BotInventory();
12
13
    @GetItemIcons($json_BotInv);
14
15
    //$IconUrl = @EchoItemIcon($json_BotInv);
16
17
    $IconUrl = "images/itemicons/" . $json_BotInv[0][4] . ".png";
18
19
    $item = imagecreatefrompng($IconUrl);
20
21
    imagepng($item);

jetzt habe ich aber einen weissen browser.........

von Daniel A. (daniel-a)


Lesenswert?

Gehe mal in die Browserconsole in den Netzwerk tab und lade die Seite 
neu. Ist es einfach ein weisses Bild, oder hasst du einen 500 Fehler?

von Joel (Gast)


Lesenswert?

Kein Fehler
Der Browser ist halt weiss und oben links hats halt das Zeichen wenn ein 
Bild nicht richtig dargestellt werden konnte.

Wenn noch was schauen musst Link : csgotrades.org

(lange Ladezeit weil ich noch test scripts in der index datei hab die am 
anfang ausgefürt werden...)

von Stryker (Gast)


Lesenswert?

Die Ausgabe ist leer (contentLength = -1). Es kommt vermutlich zu einem 
Fehler (guck mal ins Error log) oder das Vorlagebild ist nicht lesbar.

von Stryker (Gast)


Lesenswert?

Mach mal ein var_dump($item); rein. Dann kannst du schauen ob die 
Imageresouce geladen ist...

von Joel (Gast)


Lesenswert?

Hats wirklich gegeben aber sind komisch....

Code
1
$IconUrl = "images/itemicons/" . $json_BotInv[0][4] . ".png";
2
3
$item = imagecreatefrompng($IconUrl);
4
5
imagepng($item);

Hab mal die IconUrl geechot und bekam: 
images/itemicons/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4N 
UX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopuP1FAR17OORIQJF_tW7mb-GkvP 
9JrafxGkDv8B13LyT8N2l2QHirhI4az2mINSVclQ9MFGBrFK5x-3mgMW5uIOJlyWQ8lzxbw. 
png

hab dann im error log gekuckt da war der Link nur : 
images/itemicons/.png

Was den der Fehler???

von T.roll (Gast)


Lesenswert?

Joel schrieb:
> lange Ladezeit weil ich noch test scripts in der index datei hab die am
> anfang ausgefürt werden...

Du versucht aber nicht, das Bild inline auszugeben? Es muss mit einem 
extra Aufruf ausgeben werden, ohne weitere Inhalte.

von TestX (Gast)


Lesenswert?

Wo kommt die url her ? Die prüfst bei der ausgabe weder ob das bild 
existiert noch ob es eine directory traversal attack sein kann...

von Joel (Gast)


Lesenswert?

Die Url/Pfad zu dem BIld habe ich gespeichert. Die Scripts die ich 
erwähnt habe downloaden das Bild und bearbeiten es auf die richtige 
grösse und schreiben ein Text drauf. Dann wird das Bild unter 
images/itemicons/........png gespeichert. Den Link habe ich gespeichert. 
Danach will ich das gespeicherte Bild ausgeben aber dann kommt der 
fehler...

von Dominik G. (domeg)


Lesenswert?

http://csgotrades.org/images/itemicons/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopuP1FAR17OORIQJF_tW7mb-GkvP9JrafxGkDv8B13LyT8N2l2QHirhI4az2mINSVclQ9MFGBrFK5x-3mgMW5uIOJlyWQ8lzxbw.png

Geht doch...
Ist also ein Fehler im HTML-Code... Du gibst die URL zum Bild ganz oben 
im Code einfach aus, ohne IMG-Tag.
1
    
2
images/itemicons/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopuP1FAR17OORIQJF_tW7mb-GkvP9JrafxGkDv8B13LyT8N2l2QHirhI4az2mINSVclQ9MFGBrFK5x-3mgMW5uIOJlyWQ8lzxbw.png
3
<!DOCTYPE html>
4
<html>
5
    <head>

Edit: Ich würde dir auch noch wärmstens empfehlen, deine Seite mal hier 
durchchecken zu lassen: https://validator.w3.org/ Es sind wohl einige 
Fehler enthalten.

: Bearbeitet durch User
von Joel (Gast)


Lesenswert?

Hallo domeg

Wenn du denn thread gelesen hättest wäre dir aufgefallen dass ich den 
Link geechot hab um zu vergleichen was im fehler Log stan und was in der 
Variable stand...

Hier ist der ganze php Code bevor der Html teil anfängt:
1
<?php
2
    session_start();
3
    header("Content-Type: image/png");
4
5
    require 'steamauth/steamauth.php';
6
    require 'steamauth/userInfo.php';
7
    require 'steamauth/BotInv.php';
8
    require 'ItemIconScript.php';
9
10
    $json_BotInv = @BotInventory();
11
12
    @GetItemIcons($json_BotInv);
13
14
    //$IconUrl = @EchoItemIcon($json_BotInv);
15
16
    $IconUrl = "images/itemicons/" . $json_BotInv[0][4] . ".png";
17
18
    echo $IconUrl;
19
20
    $item = imagecreatefrompng($IconUrl);
21
22
    imagepng($item);
23
24
    if(isset($_SESSION['steamid'])){
25
        $id = $_SESSION['steamid'];
26
    }
27
    else{
28
        #Not logged in
29
    }
30
?>

von Dominik G. (domeg)


Lesenswert?

Und wo ist dann das Problem? Der Textoverlay hat wohl funktioniert, das 
abspeichern auch.

Oder willst du in ein und derselben Seite (index.php) das Bild mit PHP 
bearbeiten & ausgeben UND HTML-Code ausgeben? Das geht nicht.

Verwende für die Bearbeitung/Verarbeitung der Bilder ein eigenes Script 
oder eine abweichende URL, z.B. image.php oder index.php?what=img .

: Bearbeitet durch User
von Joel (Gast)


Lesenswert?

Hab dich wohl falsch verstanden....

Mit @GetItemIcons tu ich dies ja. Ich hab dann auch vor das script um 
die Icons auszugeben in eine andere Datei zu verbannen. Ich habe es auf 
der Index.php datei weil da die Fehler sofort auf der seite sichtbar 
sind.

Da ich mich mit PHP, HTML, CSS, JS, JQuery usw. ned gut auskenne 
müsstets du mir das was ich falsch gemacht habe genau erklären und auch 
sagen was man dagegen tun kann

MFG
Joel

von Joel (Gast)


Lesenswert?

p.s. @GetItemIcons ist in der Datei ItemIconScript.php

von Dominik G. (domeg)


Lesenswert?

Joel schrieb:
> Mit @GetItemIcons tu ich dies ja.

Da liest du vermutlich die Pfade zu den Bildern ein.

Mit http://php.net/manual/de/function.imagecreatefrompng.php liest du 
die PNG-Bilder in PHP ein und mit 
http://php.net/manual/de/function.imagepng.php gibst du die binären 
Daten direkt wieder aus, ohne sie zu bearbeiten.

Meine Annahme ist daher, dass du die Bilder schon vorher oder woanders 
bearbeitet und abgespeichert hast und nur noch anzeigen lassen willst.

Also brauchst du nur ein IMG-Tag in HTML mit dem passenden Pfad 
auszugeben.
Etwa:
1
<?php
2
    session_start();
3
4
    require 'steamauth/steamauth.php';
5
    require 'steamauth/userInfo.php';
6
    require 'steamauth/BotInv.php';
7
    require 'ItemIconScript.php';
8
9
    $json_BotInv = @BotInventory();
10
11
    @GetItemIcons($json_BotInv);
12
13
    //$IconUrl = @EchoItemIcon($json_BotInv);
14
15
    $IconUrl = "images/itemicons/" . $json_BotInv[0][4] . ".png";
16
17
    echo "<img src=\"" . $IconUrl . "\"></img>";
18
19
    if(isset($_SESSION['steamid'])){
20
        $id = $_SESSION['steamid'];
21
    }
22
    else{
23
        #Not logged in
24
    }
25
?>

Du kannst nicht für deine Datei als ContentType PNG festlegen und 
gleichzeitig HTML-Text ausgeben, das geht nicht.
ContentType PNG brauchst du nur, wenn du auf dieser URL NUR das Bild mit 
imagepng() und sonst nichts anders ausgibst.

von Joel (Gast)


Lesenswert?

Du bist mein Held es  hat funktioniert!!!!!!!!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.