Obtenez des images mises en cache de vos visiteurs

12 décembre 2009

Atwood Jeff ( Coding Horror renommée) était d'une horreur quand il s'est rendu compte que son serveur tombé en panne et ses données avait disparu et à cause de certaines raisons, le mécanisme de sauvegarde ne fonctionnait pas. Les données complètes de Coding Horror et le blog StackOverflow disparu.

Depuis son blog est très populaire, de nombreux systèmes d'archivage y compris le cache de Google ont des copies des pages et j'espère qu'ils ont maintenant récupéré l'ensemble des données textuelles. Le plus gros problème dans ce cas est un retour des images. Il n'y a pas beaucoup de services d'archivage qui peut avoir la sauvegarde complète des images sur le site.

Que faut-il Jeff faire maintenant?

Depuis l'horreur de codage est un blog à fort trafic, je pense qu'il ya un moyen de récupérer au moins certaines des images. (La probabilité de ce travail dépend beaucoup de la circulation sur le site et un peu de chance)

Voici les étapes:

  1. Configurer le serveur Web afin de renvoyer 304 pour chaque demande d'image. Le code d'état HTTP 304 signifie que le fichier n'est pas modifié et cela signifie que le navigateur va récupérer le fichier à partir de son cache si elle est présente là-bas. (Crédit: ce SuperUser réponse)
  2. Dans chaque page du site, ajouter un petit script pour capturer les données d'image et l'envoyer au serveur.
  3. Sauvegarder les données d'image sur le serveur.
  4. Convertir les données de pixels pour obtenir le images.Voila original!

Saisir les données de l'image

Nous allons utiliser la fonctionnalité de toile dans HTML 5 pour récupérer les données d'image.

Voici le code que vous devrez insérer dans les pages du site. Il récupère toutes les images dans la page courante, le charge sur la toile HTML, récupère les données pixel de l'image et l'envoie au serveur via un poste d'Ajax.

Ce script PHP (PHP peut sauver Jeff? ;) Pour être honnête, le code côté serveur est trivial) enregistre les données dans des fichiers sur le serveur. Notez que les fichiers eux-mêmes ne seront pas des images, ils ne contiennent les données de pixels de l'image. En plus de cela, nous sommes aussi sauver le nom du fichier d'origine et les dimensions de l'image. Cela signifie que nous pouvons facilement reconstituer les images originales de ces données. Les données de chaque visiteur est enregistré dans un fichier différent, juste pour s'assurer que vous disposez de suffisamment de redondance (Attention à son licenciement de remplissage de vos disques durs du serveur)

Rappelez-vous que cela est une preuve de concept de code. Vous devrez le modifier pour les utiliser dans des environnements de production régulière et pour obtenir de l'utilisation réelle de lui. Il existe de nombreuses limites à ce code. Il va sans dire que vous obtiendrez les données d'image en arrière par les utilisateurs que s'ils ont les images mises en cache dans leur navigateur. Ce script ne fonctionne que dans les dernières versions de Chrome, Firefox, Safari, Opera, etc (Ne jamais espérer qu'il fonctionne dans IE pour la prochaine décennie). En plus de cela, souvenez-vous que les données pixel sera beaucoup plus grand que la taille du fichier d'origine et vous pouvez avoir d'analyser avec soin l'utilisation de l'espace disque de ce script. (Je suppose que dans une situation d'urgence, aucune de ces questions vraiment).

Vous devez modifier l'URL de poste dans le script pour correspondre votre nom de domaine.

Enfin, j'ai testé le code et il semble fonctionner (pour moi du moins). Vous devez inclure JQuery dans les pages utilisant ce script et n'oubliez pas qu'en raison des restrictions de sécurité dans les navigateurs, vous devrez placer tous ces fichiers sous le même nom de domaine. S'il vous plaît me dire si il ya des défauts dans le Code.

[Mise à jour: modifications du code de réduire la taille du fichier de 50%. Les nombres décimaux ont été converties en hexadécimal et les espaces entre les numéros retirés. La taille des fichiers peut être encore réduite en utilisant le jeu de caractères complet.]

19 réponses à ce jour

Laisser un commentaire