f.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. require('../constants.php');
  3. $favicons_dir = DATA_PATH . '/favicons/';
  4. /* Télécharge le favicon d'un site et le place sur le serveur */
  5. function download_favicon ($website, $dest) {
  6. $ok = false;
  7. $url = 'http://g.etfv.co/' . $website;
  8. $c = curl_init ($url);
  9. curl_setopt ($c, CURLOPT_HEADER, false);
  10. curl_setopt ($c, CURLOPT_RETURNTRANSFER, true);
  11. curl_setopt ($c, CURLOPT_BINARYTRANSFER, true);
  12. $imgRaw = curl_exec ($c);
  13. if (curl_getinfo ($c, CURLINFO_HTTP_CODE) == 200) {
  14. $file = fopen ($dest, 'w');
  15. if ($file !== false) {
  16. fwrite ($file, $imgRaw);
  17. fclose ($file);
  18. $ok = true;
  19. }
  20. }
  21. curl_close ($c);
  22. if (!$ok) {
  23. header('Location: ' . $url);
  24. return false;
  25. }
  26. return true;
  27. }
  28. $id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0';
  29. if (!ctype_xdigit($id)) {
  30. $id = '0';
  31. }
  32. $txt = $favicons_dir . $id . '.txt';
  33. $ico = $favicons_dir . $id . '.ico';
  34. $icoMTime = @filemtime($ico);
  35. $txtMTime = @filemtime($txt);
  36. if (($icoMTime == false) || ($txtMTime > $icoMTime)) {
  37. if ($txtMTime == false) {
  38. header('HTTP/1.1 404 Not Found');
  39. header('Content-Type: image/gif');
  40. readfile(PUBLIC_PATH . '/themes/icons/grey.gif'); //TODO: Better 404 favicon
  41. die();
  42. }
  43. $url = file_get_contents($txt);
  44. if (!download_favicon($url, $ico)) {
  45. die();
  46. }
  47. }
  48. require(LIB_PATH . '/http-conditional.php');
  49. header('Content-Type: image/x-icon');
  50. header('Content-Disposition: inline; filename="' . $id . '.ico"');
  51. if (!httpConditional($icoMTime, 2592000, 2)) {
  52. readfile($ico);
  53. }