Outils pour utilisateurs

Outils du site


php:cache_gravatar

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
php:cache_gravatar [2015-03-07 13:01]
mitsu
php:cache_gravatar [2015-07-04 09:05] (Version actuelle)
mitsu
Ligne 1: Ligne 1:
 +====== Cache local de Gravatars ======
 +Code PHP pour faire un cache de Gravatar. Utilité ? Éviter que Gravatar puisse tracer les internautes, que le site soit bousillé si Gravatar est injoignable, ...
 +Les commentaires sont en anglais.
 +
 +<file php get.php>
 <?php  <?php 
 /* /*
Ligne 12: Ligne 17:
  case 0:  case 0:
  $size = 32; break;  $size = 32; break;
 + case 1:
 + $size = 120; break;
  default:  default:
  $size = 65;  $size = 65;
Ligne 38: Ligne 45:
  }  }
  }  }
- $im = imagecreatefrompng($newfile); 
  header('Content-Type: image/png');  header('Content-Type: image/png');
  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($newfile)).' GMT');  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($newfile)).' GMT');
- imagepng($im); +   header('Content-Length: ' . filesize($newfile)); 
- imagedestroy($im); +   header('Cache-Control: public, max-age=86400'); 
- die;+   readfile($newfile); 
 + exit;
 } }
  
 else { else {
- $seconds_old = 2592000; + $seconds_old = 2592000; // 30 days
  $dirhandle = opendir('.');  $dirhandle = opendir('.');
  while($fileclean = readdir($dirhandle)) {  while($fileclean = readdir($dirhandle)) {
Ligne 57: Ligne 64:
  }  }
  header('Location: /');  header('Location: /');
- die;+ exit;
 } }
  
 ?> ?>
 +</file>
 +
 +
 +Pour passer les avatars Wordpress, envoyez ce fichier dans le dossier des extensions et activez-le (après avoir crée le dossier "gravatars" dans wp-content et y avoir placé le "get.php" ci-dessus):
 +<file php gravatar.php>
 +<?php
 +add_filter('get_avatar', 'be_gravatar_filter', 10, 5);
 +function be_gravatar_filter($avatar, $id_or_email, $size, $default, $alt) {
 +$email = 'a@b.c';
 +if ( is_numeric($id_or_email) ) {
 +$id = (int) $id_or_email;
 +$user = get_userdata($id);
 +if ( $user )
 + $email = $user->user_email;
 + } elseif ( is_object($id_or_email) ) {
 + // No avatar for pingbacks or trackbacks
 + $allowed_comment_types = apply_filters( 'get_avatar_comment_types', array( 'comment' ) );
 + if ( ! empty( $id_or_email->comment_type ) && ! in_array( $id_or_email->comment_type, (array) $allowed_comment_types ) )
 + return false;
 +
 + if ( !empty($id_or_email->user_id) ) {
 + $id = (int) $id_or_email->user_id;
 + $user = get_userdata($id);
 + if ( $user)
 + $email = $user->user_email;
 + } elseif ( !empty($id_or_email->comment_author_email) ) {
 + $email = $id_or_email->comment_author_email;
 + }
 + } else {
 + $email = $id_or_email;
 + }
 +
 + if ( empty($default) ) {
 + $avatar_default = get_option('avatar_default');
 + if ( empty($avatar_default) )
 + $default = 'mystery';
 + else
 + $default = $avatar_default;
 + }
 +
 +
 +
 +
 + if ( !empty($email) )
 + $email_hash = md5( strtolower( $email ) );
 +$return = '<a href="https://secure.gravatar.com/avatar/'.$email_hash.'?d=monsterid&amp;r=G&amp;s=500"><img class="gravatar" src="'.site_url('/').'wp-content/gravatars/get.php?g='.$email_hash.'" alt="'.$alt.'"></a>';
 +return $return;
 +}
 +?>
 +</file>
 +
 +OPTIONNEL: vous pouvez placer le script suivant dans votre dossier de gravatars, il crée une galerie en supprimant les gravatars trop anciens:
 +<file php index.php>
 +<?php 
 +// delete gravatars older than 30 days
 +$seconds_old = 2592000; 
 +$dirhandle = opendir('.');
 +while($fileclean = readdir($dirhandle)) {
 + if( $fileclean != "." && $fileclean != ".." && $fileclean != "index.php" && $fileclean != "zavatars.html" && $fileclean != "get.php" ) {
 +  if(filemtime($fileclean) < (time()-$seconds_old) ) {
 +   unlink($fileclean);
 +  }
 + }
 +}
 +
 +/*cache*/
 +$cache = 'zavatars.html';
 +$expire = time() -60000 ;  // galery cached for 16 hours
 +$expire_gravatar = time() -10 ;
 + if(file_exists($cache) && filemtime($cache) > $expire) { readfile($cache); }
 +else
 +{ ob_start(); 
 +?>
 +<!DOCTYPE html>
 +<head><meta charset="UTF-8">
 +<title>[Gravatars]</title>
 +<style type="text/css">
 +<!--
 +body { font-size:14px;margin-left:20px;margin-top:20px;font-family:monospace; }
 +a { font-weight:bold;text-decoration:none;}
 +-->
 +</style>
 +</head>
 +<body>
 +Listing généré: <?php echo date("H:i:s");?> (valide ~16 heures)<br><br>
 +<?php
 +$directory = "./";
 +$files = glob($directory . "*");
 +foreach($files as $file)
 +
 + if (preg_match("/.html/i", $file)) { }
 + else if (preg_match("/.php/i", $file)) { }
 + else {echo '<a href="https://secure.gravatar.com/avatar/'.substr($file, 2, -4).'?d=monsterid&amp;r=G&amp;s=500"><img alt="" src="'.$file.'"></a>'."\n"; }
 +}
 +?>
 +</body></html>
 +<?php
 +$tampon = ob_get_contents();
 +ob_end_clean();
 +file_put_contents($cache, $tampon); 
 +echo $tampon; } ?>
 +</file>
php/cache_gravatar.1425733299.txt.gz · Dernière modification: 2015-03-07 14:01 (modification externe)