[PHP] Proxy script voor tonen image

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
Ik wil iets heel eenvoudigs, via een php script een externe image teruggeven. Bijvoorbeeld wanneer ik http://www.domein.nl/image/1 aanroep dan toont hij de image http://www.externdomein.nl/image.jpg als output. De URL van de image wordt opgehaald door middel van een ID, maar voor de test heb ik even een hardcoded URL als voorbeeld genomen.

Nu heb ik op verschillende manieren geprobeerd om dit te realiseren, maar hij blijft steeds maar een leeg blokje tonen en geen image.

Stukje script:

code:
1
2
3
4
5
6
7
8
$image = "http://ic.tweakimg.net/ext/i/imagenormal/2001014669.png";
$imginfo = getimagesize($image);

header("Content-type: $imginfo[mime]");
readfile($image);
//file_get_contents($image);

die();


Ik heb het geprobeerd met zowel readfile als file_get_contents maar beide met hetzelfde resultaat. Waarom zoiets simpels niet werkt snap ik echt niet. Hopelijk zie ik iets over het hoofd en kan iemand het verlossende antwoord geven :)

Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Gooi die readfile eens in een var en laat die eens tonen op je pagina, zit er uberhaupt wel iets in?

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
DennusB schreef op vrijdag 18 maart 2016 @ 13:33:
Gooi die readfile eens in een var en laat die eens tonen op je pagina, zit er uberhaupt wel iets in?
Wanneer ik de header weglaat dan krijg ik de ruwe data van de image te zien. Dus hij heeft wel data, maar displayen als image lukt niet...

Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Open een socket en ga lekker streamen. Als je een grote file opvraagt nek je je proces anders, fijn de hele image in je geheugen laden 8)7

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
en als je je header er hard inzet, dus niet via $imginfo[mime]? Als je ruwe data terugkrijgt, is dat in elk geval niet het probleem. Probeer ook eens een andere browser...cache in IE doet weleens vreemd als je speelt met content-types.

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Je test zeker op Windoes OS, probeer dit dan eens
PHP:
1
2
3
4
5
6
7
8
$image = 'http://ic.tweakimg.net/ext/i/imagenormal/2001014669.png';
if ($fp = fopen($image, 'rb')) {
    header("Content-type: image/png");
    fpassthru($fp);
    fclose($fp);
} else {
    echo 'oops!';
}

[ Voor 10% gewijzigd door DJMaze op 18-03-2016 14:09 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

file_get_contents() haalt de content van de opgegeven URL op, wil je daar wat mee doen, moet je het dus ook ergens anders weer in zetten, wil je het kunnen gebruiken.

PHP:
1
file_put_contents('filename.ext', file_get_contents($url));
Is dan een voorbeeldje. :)
Je hoeft dan niet zozeer rekening te houden met de headers, wel met de extentie natuurlijk tov de uiteindelijke content.

[ Voor 18% gewijzigd door CH4OS op 18-03-2016 14:09 ]


Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
DJMaze schreef op vrijdag 18 maart 2016 @ 14:07:
Je test zeker op Windoes OS, probeer dit dan eens
PHP:
1
2
3
4
5
6
7
8
$image = 'http://ic.tweakimg.net/ext/i/imagenormal/2001014669.png';
if ($fp = fopen($image, 'rb')) {
    header("Content-type: image/png");
    fpassthru($fp);
    fclose($fp);
} else {
    echo 'oops!';
}
Zelfde resultaat helaas.
CptChaos schreef op vrijdag 18 maart 2016 @ 14:08:
file_get_contents() haalt de content van de opgegeven URL op, wil je daar wat mee doen, moet je het dus ook ergens anders weer in zetten, wil je het kunnen gebruiken.

PHP:
1
file_put_contents('filename.ext', file_get_contents($url));
Is dan een voorbeeldje. :)
Je hoeft dan niet zozeer rekening te houden met de headers, wel met de extentie natuurlijk tov de uiteindelijke content.
Maar dan slaat hij de image lokaal op, dat is wel het uiteindelijke doel maar is voor nu nog niet haalbaar. Daarom wil ik de remote images alleen displayen.

Achtergrond is trouwens dat een deel van de images over http is, terwijl mijn website https waardoor ik een mixed content melding krijg.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Dan moet er iets mis zijn met de content encoding.
Ik heb mijn code even online gezet en werkt prima: https://dragonflycms.org/tests/tweakers-image.php

check je ob_get_level() en apache compressie instellingen

[ Voor 13% gewijzigd door DJMaze op 18-03-2016 14:24 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • +1 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

.GoO schreef op vrijdag 18 maart 2016 @ 14:18:
Maar dan slaat hij de image lokaal op, dat is wel het uiteindelijke doel maar is voor nu nog niet haalbaar. Daarom wil ik de remote images alleen displayen.

Achtergrond is trouwens dat een deel van de images over http is, terwijl mijn website https waardoor ik een mixed content melding krijg.
Is het dan niet handiger om de image op te halen en vervolgens via base64 encoding weer te geven? Dan hoef je de afbeeldingen uiteindelijk niet op te slaan, scheelt je dus diskspace en meeste (moderne) browsers ondersteunen het wel. :)

[ Voor 12% gewijzigd door CH4OS op 18-03-2016 14:53 ]


Acties:
  • 0 Henk 'm!

  • .GoO
  • Registratie: September 2001
  • Laatst online: 27-09 00:53
CptChaos schreef op vrijdag 18 maart 2016 @ 14:53:
[...]
Is het dan niet handiger om de image op te halen en vervolgens via base64 encoding weer te geven? Dan hoef je de afbeeldingen uiteindelijk niet op te slaan, scheelt je dus diskspace en meeste (moderne) browsers ondersteunen het wel. :)
Misschien wel, maar hoe doe ik dat?

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Met file_get_contents() kan je in elk geval de content ophalen. Vervolgens check je de header, want dat is weer bepalend voor de base64 encoded image. Daar moet wel voldoende over te vinden zijn.
Pagina: 1