Hoi mensen,

ik ben bezig met een systeem, en ik zou graag willen dat via een php script de afbeeldingen worden geladen. dus dat je bv met img.php?file=img.gif die afbeelding krijgt.

Nou heb ik dit geprobeerd met include($file); maar dat werkt blijkbaar niet. Weet iemand toevallig hoe dit wel moet?
Ja:

<?php
$file = addslashes($_GET['file']);
print "<img src=\"".$file."\">";
?>

iets in die trand dan Koos?

Zou ook nog anders kunnen d.m.v. het plaatje uitlezen met file_get_contents of zo en dan de pagina een header laten plaatsen voor een image. Maar ik denk niet dat dit is wat je wilt.
nee,

ik bedoel het anders.

dat als je in html <img src="img.php?file=img.gif" > doet,
dat via het php script de image word opgezocht en geplaatst word.
Ik heb dit wel eens vaker gezien. Maar weet niet hoe dit moet.
<?php

header('Content-type: image/gif');
readfile($_GET['plaatje']);

?>

Je moet alleen wel even checken of het GIF/PNG/JPEG is en je moet even de $_GET beveiligen zodat niet alles ingevuld kan worden.
Ja dus toch het laatste wat ik aangaf. Je doet dan een php file laden in de image src. Die php file moet zich dus als het ware voordoen als een normaal plaatje.

Je zet dan bovenaan die php pagina (img.php) het volgende:
<?php
header("Content-type: image/jpg"); //of png,gif i.p.v. jpg
?>

Dan moet je via GET een plaatje in laden en daarvan de inhoud uitlezen binair gezien. Dat doe je met file_get_contents.

Dus:

<?php
$file = addslashes($_GET['file']);
$image = file_get_contents($file);
echo $image;
?>
bedankt voor de zeer snelle reacties! het werkt!
@Koos
Let echt op de beveiliging. ONDERSCHAT DIT NIET. Anders kan ik in $_GET['file'] alles invullen. Controleer op extensie en locatie. Dus dat er geen HTTP:// in voorkomt, etc.
Op basis van de posts van PHPerik en Jaws heb ik even een scriptje gebouwd. Ik was zelf ook wel benieuwd hiernaar namelijk.

<?php
# Grijp plaatje met eventueel 1 directory ervoor
if( empty($_GET['i'])
|| !preg_match('/^(\w+\/)?([\w\-_]+\.(jpeg|jpg|jpe|gif|png))$/i', strtolower($_GET['i']), $aMatch) )
{
return;
}

list(,$sPath, $sImageName, $sExtension) = $aMatch;

/*echo '$sPath: ', $sPath,
'<br />$sImageName: ', $sImageName,
'<br />$sExtension: ', $sExtension;
exit;*/

if( $sExtension[0] == 'j' )
{
$sExtension = 'jpeg';
}

# image/jpeg jpeg jpg jpe
# image/gif gif
# image/png png
header('Content-type: image/' . $sExtension);
@readfile($_GET['i']);
?>

Ik denk dat dit script wel redelijk veilig is. Misschien dat je nog moet controleren of het plaatje ook echt een plaatje is.
Probeer anders mijn functie uit:

<?php
function image($input, $extention=false)
{
$allowedExtentions = array('.gif','.jpg','.jpeg','.png');
$allowedMimes = array('image/gif','image/jpg','image/jpeg','image/png');
	
	if($extention)
	{	
		if(!empty($input))
		{	
			$res = strrchr($input, '.');
			if(in_array(strtolower($res),$allowedExtentions))
			{
				$mime = getimagesize($input);
				return (in_array($mime['mime'],$allowedMimes)) ? true : false;
			}
		}
	}
	else
	{
		if(!empty($input))
		{
			$mime = getimagesize($input);
			return (in_array($mime['mime'],$allowedMimes)) ? true : false;
		}
	}
}
?>
Ziet er goed uit martijn.

Je kunt inderdaad ook met getimagesize() controleren of het echt een plaatje is. Iets van if (@getimagesize($plaatje)). Dan kun je ook meteen die mimetype gebruiken.
qua beveiliging kan er niet veel gebeuren, aangezien hij alles uit de map images haalt, en hij alleen de imagenaam nodig heeft

dus als je http://blabla invult krijg je gewoon een error

Reageren