diff options
Diffstat (limited to 'public/f.php')
| -rw-r--r-- | public/f.php | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/public/f.php b/public/f.php new file mode 100644 index 000000000..3be74776e --- /dev/null +++ b/public/f.php @@ -0,0 +1,67 @@ +<?php +require('../constants.php'); +$favicons_dir = DATA_PATH . '/favicons/'; + +/* Télécharge le favicon d'un site, le place sur le serveur et retourne l'URL */ +function download_favicon ($website, $dest) { + $ok = false; + $url = 'http://g.etfv.co/' . $website; + + /*if (!is_dir ($favicons_dir)) { + if (!mkdir ($favicons_dir, 0755, true)) { + header('Location: ' . $url); + return false; + } + }*/ + + $c = curl_init ($url); + curl_setopt ($c, CURLOPT_HEADER, false); + curl_setopt ($c, CURLOPT_RETURNTRANSFER, true); + curl_setopt ($c, CURLOPT_BINARYTRANSFER, true); + $imgRaw = curl_exec ($c); + + if (curl_getinfo ($c, CURLINFO_HTTP_CODE) == 200) { + $file = fopen ($dest, 'w'); + if ($file !== false) { + fwrite ($file, $imgRaw); + fclose ($file); + $ok = true; + } + } + curl_close ($c); + if (!$ok) { + header('Location: ' . $url); + return false; + } + return true; +} + +$id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0'; +if (!ctype_digit($id)) { + $id = '0'; +} + +$txt = $favicons_dir . $id . '.txt'; +$ico = $favicons_dir . $id . '.ico'; + +$icoMTime = @filemtime($ico); +$txtMTime = @filemtime($txt); + +if (($icoMTime == false) || ($txtMTime > $icoMTime)) { + if ($txtMTime == false) { + header('HTTP/1.1 404 Not Found'); + die(); + } + $url = file_get_contents($txt); + if (!download_favicon($url, $ico)) { + die(); + } +} + +header('Content-Type: image/x-icon'); +header('Content-Disposition: inline; filename="' . $id . '.ico"'); + +require(LIB_PATH . '/http-conditional.php'); +if (!httpConditional($icoMTime, 31557600, 2)) { + readfile($ico); +} |
