bon voilà, j'ai netoyé mon code et tout et tout
et puis comme vous le savez (ou pas) le script n'est pas infaible
donc voilà, si vous avez des remarques ou des améliorations possible n'hésitez surtout pas
et puis comme vous le savez (ou pas) le script n'est pas infaible
Code:
<?php
/*
Auteur : Alaa-eddine KADDOURI (alaa.eddine[AT]gmail[d0T]com)
Ce script est inspiré du travail de Ladislav Soukup, [root@soundboss.cz]
(pour pas réecrire toute la partie qui fait le watermark, l'encodage ...etc :p)
///////////////////////////////////////////////////////////////
// ** Licence
// ce script est soumis à la licence gnu GPL ...etc ..etc je le connais pas par coeur
// mais vous connaissez la signification ... enfin j'espère
//
// Si vous utilisez ce scipt vous devez tout d'abord m'écrire un mail et choisir une option:
// - m'envoyer 2000euros pour m'acheter une nouvelle machine (je vous contacterez mon addresse :) )
// - faire un ptit lien vers ma page perso http://www.wonderworlds.net
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
** Utilisation
Tout d'abord il faut désactiver le cache de la page avec les meta tags ...etc (consulter la partie failles connues)
puis en haut de votre page ajoutez
<?
session_start();
?>
...<votre code html ici>...
<?
$_SESSION["img_path"]="rep/dans/lequel/se/trouve/l'image/";
$_SESSION["img"]="nom_de_votre_image";
?>
<img src="bg.php" />
...<suite de votre code html ici>...
pour leurrer un peut les utilisateurs novices, vous pouvez par exemple
afficher la vrai image (bg.php) en arrière plan d'un objet, et afficher dessus
une image transparante.
///////////////////////////////////////////////////////////////
** failles connues
* ce script n'est pas parfait (héé oui) mais on peut dire qu'il protège
de 99% des tentatives voir plus et voici une liste des failles découvertes à ce jours (merci à tout les webmasters de WRI)
- l'image peut etre récuperrer pendant un certain moment à partir du cache Internet explorer (car ce stupide navigateur ne respecte pas les entete no-cache ..etc)
- les images peuvent etre récuperrés à l'aide du plugin webdevelopper de firefox
- les images peuvent etre récuperré avec l'utilisation de la librairie curl (cf manuel php) (c'est la faille que je ne pourrai jamais corriger à mon avis)
- le print screen, toute fois vous pouvez utilise ce petit script pour l'éviter (marche sous IE seulement):
entre <head></head> ajouteé
function ccb(){
if(clipboardData){
clipboardData.clearData();
}}
setInterval("ccb();", 20);
puis :
<body onLoad="ccb()">
Attention, ce script empeche les utilisateur de faire les copier/coller aussi tan que la page contenant ce script est ouverte
vos remarques suggestions etc sont les bienvenus (alaa.eddine[AT]gmail[d0T]com)
///////////////////////////////////////////////////////////////////////////////
*/
/*Configuration*/
session_start();
$image_quality="100";
$image_path=$_SESSION["img_path"];
$logo_path="./logo.png";
$logo_pos_x="right";
$logo_pos_y="top";
// si l'image est introuvable on affiche ce texte
$error_not_found="Ouuups!!!";
global $Copyrights;
$Copyrights="Copyright tfosorcim à l'envers :p";
$error_not_supported="ce format d'image n'est pas supporté";
// couleur d'arrière plan de l'image generré en cas d'erreur
$error_bg_color=array(255,255,255);
// couleur du text
$error_text_color=array(255,0,0);
/*Rien à voir en bas de cette ligne*/
///////////////////////////////////////////////////////////////////////////////////////////////////////
function NewImage($width,$height,$text=""){
global $error_bg_color,$error_text_color;
if (function_exists("imagecreatetruecolor")){
if (!@$img=imagecreatetruecolor($width,$height)){
$img=imagecreate($width,$height);
}
} else {
$img=imagecreate($width,$height);
}
$imgbgcolor=ImageColorAllocate($img,$error_bg_color[0],$error_bg_color[1],$error_bg_color[2]);
$imgtextcolor=ImageColorAllocate($img,$error_text_color[0],$error_text_color[1],$error_text_color[2]);
imagefilledrectangle($img,0,0,$width,$height,$imgbgcolor);
imagestring($img,5,10,10,$text,$imgtextcolor);
imagestring($img,5,10,30,"Copyright OujdaCity", 0);
return($img);
}
header("Content-type: image/jpeg");
// Date du passé
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// toujours modifié
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-Control : max-age=A1");
// HTTP/1.0
header("Pragma: no-cache");
$rep_from=array("./","../");
$rep_to=array("","",);
$_GET["img"]=str_replace($rep_from,$rep_to,$_SESSION["img"]);
$file=$image_path . $_GET["img"];
if (file_exists($file) && strcmp($_SESSION["generated"], "true") ){
$info=getimagesize($file);
$width=$info[0];
$height=$info[1];
if ($info[2]==1){
$img=@imagecreatefromgif($file);
} else if ($info[2]==2){
$img=@imagecreatefromjpeg($file);
} else if ($info[2]==3){
$img=@imagecreatefrompng($file);
} else {
$width=640;
$height=480;
$img=NewImage($width,$height,$error_not_supported);
}
} else {
$width=640;
$height=480;
$img=NewImage($width,$height,$error_not_found);
}
if (file_exists($logo_path)){
$info=getimagesize($logo_path);
$logo_width=$info[0];
$logo_height=$info[1];
if ($info[2]==1){
$img_logo=imagecreatefromgif($logo_path);
} else if ($info[2]==2){
$img_logo=imagecreatefromjpeg($logo_path);
} else if ($info[2]==3){
$img_logo=imagecreatefrompng($logo_path);
} else {
$logo_width=120;
$logo_height=20;
$img=NewImage($logo_width,$logo_height,$error_not_supported);
}
// positioning - X
if ($logo_pos_x=="left"){
$dst_x=10;
} else if ($logo_pos_x=="center"){
$dst_x=round(($width-$logo_width)/2);
} else if ($logo_pos_x=="right"){
$dst_x=$width-10-$logo_width;
} else {
$dst_x=round(($width-$logo_width)/2);
}
// positioning - Y
if ($logo_pos_y=="top"){
$dst_y=5;
} else if ($logo_pos_y=="middle"){
$dst_y=round(($height-($logo_height/2))/2);
} else if ($logo_pos_y=="bottom"){
$dst_y=$height-5-$logo_height;
} else {
$dst_y=round(($height-($logo_height/2))/2);
}
imagecopy($img,$img_logo,$dst_x,$dst_y,0,0,$logo_width,$logo_height);
}
session_write_close();
ImageJpeg($img,"",$image_quality);
?>
donc voilà, si vous avez des remarques ou des améliorations possible n'hésitez surtout pas