Bonjour.
En soit, à partir du moment où tu mets l'image à disposition sur ton site il faut t'attendre à avoir ce genre d'inconvénients...
Je suppose que ce qui te gêne, c'est la consommation de bande passante (vu que tu incites les visiteurs à copier l'image sur leur disque).
=> Deux solutions :
1. La plus simple : mettre tes images sur un site dédié à ça (genre FlickR).
Mais les images resteront utilisables sur les forums.
2. Sinon, un moyen relativement simple de bloquer leur utilisation sur les forums sans pénalyser les visiteurs :
- Prérequis : un minimum de bases en PHP / administration de sites.
- Marche à suivre :
Au lieu de pointer vers une image
<img src="monimage.jpeg" /> on va pointer vers un fichier php
<img src="secure.php?img=monimage.jpg" />
Ce fichier secure.php va renvoyer l'image
SI certaines conditions sont vérifiées (et faire autre chose sinon =D> ).
<?php
/*
Script servant à afficher une image passée en parametre
Utilisation :
Au lieu de faire <img src="image.jpg" />
on fait <img src="affiche_image.php?img=image.jpg" />
*/
define ('REPERTOIRE_PROTEGE', 'RepertoireDesImages/');
define ('SITE', 'monsite.com');
// On commence par vérifier que le script est appelé à partir de ton site
// HTTP_REFERER peut être contourné, mais ici ça devrait suffire
// Il faut tenir compte du cas où on demande directement la page (pour afficher l'image)
// => On commence par définir $adresse
$adresse = $_SERVER['HTTP_HOST'];
if (!empty($_SERVER['HTTP_REFERER'])) {
$adresse = $_SERVER['HTTP_REFERER'];
}
// Puis on compare au nom du site
if (strpos($adresse, SITE) === FALSE) {
// Le traitement à faire si on appelle l'image d'autre part
}
else {
// On est sur le site
if (!headers_sent()) {
// Dans le cas où on appelle l'image directement
// il faut préciser au navigateur qu'on envoie une image
header('Content-Type: image/jpeg');
}
// Là on envoie le contenu du fichier demandé
// !!! ATTENTION !!! penser à sécuriser le parametre passé par GET
echo file_get_contents(REPERTOIRE_PROTEGE.$_GET['img']);
}
?>
C'est du vite fait sur le pouce, donc :
- Il y a certainement mieux
- il manque des trucs (sécurisation du paramètre envoyé, par exemple)
Bonjour.
En soit, à partir du moment où tu mets l'image à disposition sur ton site il faut t'attendre à avoir ce genre d'inconvénients...
Je suppose que ce qui te gêne, c'est la consommation de bande passante (vu que tu incites les visiteurs à copier l'image sur leur disque).
=> Deux solutions :
1. La plus simple : mettre tes images sur un site dédié à ça (genre FlickR).
Mais les images resteront utilisables sur les forums.
2. Sinon, un moyen relativement simple de bloquer leur utilisation sur les forums sans pénalyser les visiteurs :
- Prérequis : un minimum de bases en PHP / administration de sites.
- Marche à suivre :
Au lieu de pointer vers une image [b]<img src="monimage.jpeg" />[/b] on va pointer vers un fichier php [b]<img src="secure.php?img=monimage.jpg" />[/b]
Ce fichier secure.php va renvoyer l'image [b]SI[/b] certaines conditions sont vérifiées (et faire autre chose sinon =D> ).
[php]<?php
/*
Script servant à afficher une image passée en parametre
Utilisation :
Au lieu de faire <img src="image.jpg" />
on fait <img src="affiche_image.php?img=image.jpg" />
*/
define ('REPERTOIRE_PROTEGE', 'RepertoireDesImages/');
define ('SITE', 'monsite.com');
// On commence par vérifier que le script est appelé à partir de ton site
// HTTP_REFERER peut être contourné, mais ici ça devrait suffire
// Il faut tenir compte du cas où on demande directement la page (pour afficher l'image)
// => On commence par définir $adresse
$adresse = $_SERVER['HTTP_HOST'];
if (!empty($_SERVER['HTTP_REFERER'])) {
$adresse = $_SERVER['HTTP_REFERER'];
}
// Puis on compare au nom du site
if (strpos($adresse, SITE) === FALSE) {
// Le traitement à faire si on appelle l'image d'autre part
}
else {
// On est sur le site
if (!headers_sent()) {
// Dans le cas où on appelle l'image directement
// il faut préciser au navigateur qu'on envoie une image
header('Content-Type: image/jpeg');
}
// Là on envoie le contenu du fichier demandé
// !!! ATTENTION !!! penser à sécuriser le parametre passé par GET
echo file_get_contents(REPERTOIRE_PROTEGE.$_GET['img']);
}
?>[/php]
C'est du vite fait sur le pouce, donc :
- Il y a certainement mieux
- il manque des trucs (sécurisation du paramètre envoyé, par exemple)