Auteur: wes - 30 december 2007 - 18:37 - Gekeurd door: Stijn - Hits: 8168 - Aantal punten: (0 stemmen)
Met dit script kun je makkelijk je afbeeldingen beschermen tegen kopieren, je kunt bijv. zorgen dat mensen eerst in moeten loggen voordat ze het te zien krijgen.
Ik gebruik de map /img dus daarom heb ik $bestand = "img/".$_GET['bestand']; gedaan, dat kun je natuurlijk zelf ook veranderen naar een andere map...
Als je het php bestand img.php of zoiets noemt dan kun je je plaatjes zo erin zetten:
<img src="img.php?bestand=blaat.jpg">
Ik zal er maar niet zo'n lang verhaal aan breien, dus hier de code:
<?php
ob_start();
function foutmelding($fout) {
header("content-type: image/png");
switch ($fout) { // Kijken voor welke foutmelding hij moet weergeven en hoe groot de foutmeldings-afbeelding moet zijn
case 1:
$img = ImageCreate(208, 15);
$tekst = "Er is geen bestandsnaam opgegeven!";
break;
case 2:
$img = ImageCreate(270, 15);
$tekst = "Er zitten verkeerde tekens in de bestandsnaam";
break;
case 3:
$img = ImageCreate(150, 15);
$tekst = "Het bestand bestaat niet";
break;
case 4:
$img = ImageCreate(200, 15);
$tekst = "Er is een fatale fout opgetreden";
/*
Als je deze fout tegenkomt, controleer dan of je plaatje goed leesbaar is (dus ook op je p.c zelf proberen te bekijken), en kijk of er hoofdletters in zitten. Soms ligt het daaraan... Als je het daarna tegenkomt zou ik niet weten wat er mis is (sorry)
*/
break;
}
$achtergrond = ImageColorAllocate($img, 255, 255, 255); // Witte achtergrond
$size = 2; // Grootte lettertype
$color = ImageColorAllocate($img, 255, 0, 0); //Rode tekstkleur
ImageString($img, $size, 0, 0, $tekst, $color);
ImagePng($img);
ImageDestroy($img);
}
if(!$_GET['bestand']) { // Als er geen bestandsnaam is opgegeven
foutmelding(1);
exit();
}
$bestand = "img/".$_GET['bestand']; // Geeft aan waar het bestand zich moet bevinden, let op, NOOIT in dezelfde map!!
// verander img/ naar jouw_map/
if(!preg_match("/^([\w_-]+)(\.[\w_-]+)*(\/[^ \.\?]+(\.[^ \.\?]+)*)*(\/)?$/i", $_GET['bestand'])) { // Controleren of er verkeerde tekens in zitten
foutmelding(2);
exit();
}elseif(!file_exists($bestand)) { // Controleren of het bestand wel bestaat
foutmelding(3);
exit();
}
$open = fopen($bestand, "rb");
$imgsize = getimagesize($bestand);
if($imgsize && $open) {
header("Content-type: {$imgsize['mime']}"); // Geeft de header
fpassthru($open); // geeft de afbeelding weer
exit();
}else{
echo foutmelding(4);
}
?>
switch($fout){// Kijken voor welke foutmelding hij moet weergeven en hoe groot de foutmeldings-afbeelding moet zijn
case1:
$img= ImageCreate(208,15);
$tekst="Er is geen bestandsnaam opgegeven!";
break;
case2:
$img= ImageCreate(270,15);
$tekst="Er zitten verkeerde tekens in de bestandsnaam";
break;
case3:
$img= ImageCreate(150,15);
$tekst="Het bestand bestaat niet";
break;
case4:
$img= ImageCreate(200,15);
$tekst="Er is een fatale fout opgetreden";
/*
Als je deze fout tegenkomt, controleer dan of je plaatje goed leesbaar is (dus ook op je p.c zelf proberen te bekijken), en kijk of er hoofdletters in zitten. Soms ligt het daaraan... Als je het daarna tegenkomt zou ik niet weten wat er mis is (sorry)