Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 538
Er det en lur måte man kan med PHP, JS eller noe annet lurt sjekke om en adresse er et bilde eller om det ikke linker til et bilde?
At den returnerer TRUE på
http://kilden.forskningsradet.no/aim...file.image.jpg
og FALSE på
http://kilden.forskningsradet.no/aim...e/file.lol.jpg

Fordi nummer en er et bilde, mens nummer to ikke er et bilde?
Du kan vel sjekke headers du får fra serveren om mimetype?
Hent ut mime-type og sjekke at den feks. er 'image/jpg'.
Kodeeksempel som henter ut MIME-type fra linken, og matcher den opp mot gyldige typer

Kode

<?php
$url = 'http://www.vg.no/gfk/front/vglogo.gif';
$valid = array('image/gif', 'image/jpeg', 'image/png');

function is_img($url, $valid)
{
    if (!file_exists($url)) return false;
	
	$mime = getimagesize($url);
	$mime = $mime['mime'];
	
	return (in_array($mime, $valid)) ? true : false;
}

if ( is_img($url, $valid) )
{
    echo 'Ett gyldig bilde';
}
else {
    echo 'Et ugyldig bilde';
}
?>
Her har du ennå en versjon som bruker curl fremfor getimagesize.

Kode

<?php
function is_img($url)
{
   $valid = array('gif', 'jpeg', 'png');
	
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
	curl_setopt($ch, CURLOPT_TIMEOUT, 10);
	curl_setopt($ch, CURLOPT_NOBODY, true);
	curl_setopt($ch, CURLOPT_HEADER, true);
	
	$header = curl_exec($ch);
	curl_close($ch);
	
	preg_match('#Content\-Type\: image\/([a-z]{3,4})#si', $header, $result);
	
	return ($result[1] && in_array($result[1], $valid)) ? true : false;
}
?>
Sist endret av ma10as; 22. september 2008 kl. 17:44.