2010-11-24 33 views
1

Je prévois d'ajouter une image de logo à un bulletin d'informations par e-mail et de l'utiliser comme image de suivi. Cette image sera hébergée sur mon site (par exemple, my_logo.gif) et référencée dans le code HTML de l'e-mail (eq <img src="http://www.example.com/my_logo.gif" />). Je voudrais créer un script en php qui m'écrit quand cette image est accédée/vue. Est-ce possible? Si c'est le cas, comment?Détecter lorsqu'une image (ou n'importe quel type de fichier) est accessible depuis le site et notifier par e-mail

Toutes les idées et suggestions pour compléter ceci sont les bienvenues.

Répondre

3

Mettez quelque chose comme cela dans un fichier .htaccess dans le répertoire d'image:

RewriteEngine On 
RewriteRule ^(.+\.jpg)$ image.php?image=$1 [nocase] 

Mettez quelque chose comme cela dans un fichier image.php dans le même répertoire:

// send email here 

header('Content-Type: image/jpeg'); 
readfile($_GET['image']); 

Ceci est seulement un exemple simple , assurez-vous que validez la variable $_GET['image'] pour vous assurer que c'est une image dans le même répertoire, sinon quelqu'un pourrait être en mesure d'abuser de ce script pour lire fichiers dans d'autres répertoires().

+0

Excellente solution. J'ai maintenant une question après l'avoir implémentée ... Ma validation peut-elle être strictement l'ajout de cette ligne dans mon fichier .htaccess: RewriteCond% {REQUEST_FILENAME} -f ou ai-je besoin de la validation dans le fichier image.php? Si la réponse est la dernière, comment suggérez-vous que je fasse cela? – ServAce85

+0

@Serv ** Toujours ** confirmer tous les chemins! Tout le monde peut simplement appeler le fichier 'image.php' directement, en contournant entièrement votre RewriteCond. Je suis sûr que vous pouvez trouver des solutions pour valider le chemin sur SO, mais en utilisant ['realpath'] (http://php.net/realpath) et en vérifiant si le début du chemin correspond au répertoire de l'image (' substr ($ chemin, 0, 13) == '/ foo/bar/img /' ') le fait fondamentalement. – deceze

+0

merci pour l'aide et la réponse rapide – ServAce85

0
//Display image 
$image=imagecreatefromjpeg('my_logo.jpg'); 
header('Content-Type: image/jpeg'); 
imagejpeg($image); 

//logging or notifying stuff here 
// ... 

et juste reliez à ce script comme <img src="script.php" />

+1

Si vous voulez lire un fichier jpeg et générer le même fichier jpeg, vous pouvez passer le long chemin des fonctions gd et simplement vider le fichier tel quel. – deceze

-1

Il serait probablement plus facile de créer un lien vers le fichier php et ont cette avant ou présenter l'image elle-même et le nombre/piste/email vous chaque fois que le fichier php est accédé.

0

Vous pouvez rediriger la requête vers un fichier .jpg via .htaccess et le compter, etc.

0

Vous pouvez le faire en utilisant la fonction readfile() et envoyer les en-têtes appropriés de type de contenu. Vous pouvez exécuter un autre code de programme avant ou après l'envoi de l'image au navigateur.

Si le code de programme suivant a une durée d'exécution longue, vous voudrez regarder dans les fonctions output control.