Toon posts:

[PHP&jpg&gif&png] Images met andere source laden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ja.. Hoe ik het moet noemen weet ik niet. Ik heb gezocht.. maar echt niks gevonden. Deels omdat ik niet weet naar wat ik exact zoek (naam zeg maar).

De bedoeling.

Ik heb een bestand die heeft blaat.jpg.

Nu wil ik dat mensen die kunnen openen bijvoorbeeld door middel van: www.domein.nl/show.php?id=3
Daar moet dan alleen die blaat.jpg geopend worden alsof hij rechtstreeks geopend wordt.

De source van het bestand moet daar dan zeg maar ook zijn > www.domein.nl/show.php?id=3.

Terwijl de werkelijke source bijvoorbeeld: www.domein.nl/images/blaat.jpg is. Hoe doen ik dit? Ik kwam op een gegeven moment bij integers van php.net. En imagepng aldan imagejpg zeg maar.

Ofwel de bedoeling:
Source van bestand: www.domein.nl/image/blaat.jpg voor gebruiker veranderen in: www.domein.nl/show.php?id=3 duswel verduisteren van echte source.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Gebruik een database, waarin je ID koppelt aan een bestandsnaam? Het pad sla je vervolgens op in een database.

Daarna kan je met iets als fopen het bestand openen en weergeven.

[ Voor 48% gewijzigd door gorgi_19 op 04-07-2004 19:41 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Met fopen en fpassthru kom je er waarschijnlijk wel uit. Wel eerst even de juiste Content-Type header sturen :)

Verwijderd

Topicstarter
ok.. geweldig.. Alleen soms gaat hij nog downloaden. hoe ken dit? Komt het omdat ik dan de mime type niet goed heb gezet?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 juli 2004 @ 19:56:
ok.. geweldig.. Alleen soms gaat hij nog downloaden. hoe ken dit? Komt het omdat ik dan de mime type niet goed heb gezet?
Ja

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • UltraSub
  • Registratie: Mei 2003
  • Laatst online: 22-05 10:44
In de pagina waarin je het image wil hebben staan:
code:
1
print "[img]\"img.php?filename=$filename\"[/img]\n";


En img.php bevat dan iets als dit:
code:
1
2
3
4
5
6
7
8
//Get vars from browser request
$filename = "$_REQUEST['filename'];

$fp = fopen( $filename, "r" );
$contents = fread($fp, filesize($filename));
fclose($fp);

echo $contents;


Tuurlijk moet je daar ff wat in friekelen met sqlqueries, als je met filenummers en zo wilt werken. Maar goed, hier moet je een stuk verder mee komen.... ;)

[ Voor 16% gewijzigd door UltraSub op 04-07-2004 20:07 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 vindt dit een beetje een security lek van formaat gatenkaas introduceren als je deze code gebruikt... :X

[ Voor 12% gewijzigd door gorgi_19 op 04-07-2004 20:15 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

UltraSub schreef op 04 juli 2004 @ 20:05:
In de pagina waarin je het image wil hebben staan:
code:
1
print "[img]\"img.php?filename=$filename\"[/img]\n";


En img.php bevat dan iets als dit:
code:
1
2
3
4
5
6
7
8
//Get vars from browser request
$filename = "$_REQUEST['filename'];

$fp = fopen( $filename, "r" );
$contents = fread($fp, filesize($filename));
fclose($fp);

echo $contents;


Tuurlijk moet je daar ff wat in friekelen met sqlqueries, als je met filenummers en zo wilt werken. Maar goed, hier moet je een stuk verder mee komen.... ;)
Om Gorgi_19 zijn post iets te verduidelijken; met dit script is het mogelijk om elk willekeurig bestand te downloaden. Inclusief configuratie bestanden, wachtwoordbestanden, andere php bestanden...

Verwijderd

Verwijderd schreef op 04 juli 2004 @ 19:56:
ok.. geweldig.. Alleen soms gaat hij nog downloaden. hoe ken dit? Komt het omdat ik dan de mime type niet goed heb gezet?
Een mime type van een afbeelding bestaat altijd uit "image/...", en op de puntjes vul je dan bijvoorbeeld "jpeg" in voor een jpg'tje, "gif" voor een gifje...etc :)

Als je het mimetype van een bepaalde afbeelding wilt weten kan je ook gebruik maken van de functie getimagesize. Deze functie geeft een array terug met als key o.a. "mime".

[ Voor 18% gewijzigd door Verwijderd op 04-07-2004 20:56 ]


  • UltraSub
  • Registratie: Mei 2003
  • Laatst online: 22-05 10:44
Ik zeg toch dat je er nog meer tussen moet friekelen!
Niet gezegd dat je die code zo moet gaan draaien!

edit:

Alhoewel mijn bovenstaande snippet bij lange na niet de code representeert zoals ik die op een site van mij gebruik (veel uitgebreider), heb ik er toch nog eens kritisch naar gekeken, en nóg veiliger gebouwd als het al was.
Bedankt voor de push om mij nóg kritischer er naar te laten kijken 8)

Nogmaals wil ik benadrukken dat idd bovenstaand snippet niet zo gebruikt kan worden... Ik wilde alleen aangeven dat je dit via REQUEST en zo kunt doen.
Dus een supersimpel voorbeeldje om iemand op weg te helpen. Natuurlijk had ik er bij moeten zetten dat het in deze simpele opzet ontzettend leip is.
Stom van me. Waarvoor mijn excuses....

[ Voor 77% gewijzigd door UltraSub op 04-07-2004 22:59 ]


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Voor het vinden van het MIME/Content Type kun je (als je tenminste op linux zit) het file commando gebruiken. Hoewel je dit via exec() moet doen is het best bruikbaar als je tenminste je input controleert (@gorgi_19 ;-)
Het werk ongeveer zo:
PHP:
1
2
3
4
5
/* Let op! onveilig! */
function get_mime($file) {
    $mime = exec("file -bi ".escapeshellcmd($file));
    return $mime;
}

Hier zou je denk ik wel wat mee kunnen doen.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1