diff options
| author | 2014-12-29 11:44:25 +0100 | |
|---|---|---|
| committer | 2014-12-29 11:44:25 +0100 | |
| commit | 4f1fc70f876f27a6a9dc09dcf8c0f016466ea8e9 (patch) | |
| tree | 16c976f090cbccaa8e837e44a8f6021af24edeb1 /p | |
| parent | d234304580f506266aef8e3c893c4de8493ba879 (diff) | |
Change favicon getter behaviour
- Use Favicon library
- Fix coding style
- Change default favicon
Fix https://github.com/FreshRSS/FreshRSS/issues/290
Diffstat (limited to 'p')
| -rw-r--r-- | p/f.php | 85 |
1 files changed, 53 insertions, 32 deletions
@@ -1,36 +1,59 @@ <?php + require('../constants.php'); + +include(LIB_PATH . '/Favicon/Favicon.php'); +include(LIB_PATH . '/Favicon/DataAccess.php'); + + $favicons_dir = DATA_PATH . '/favicons/'; +$default_favicon = PUBLIC_PATH . '/themes/icons/default_favicon.png'; + /* Télécharge le favicon d'un site et le place sur le serveur */ -function download_favicon ($website, $dest) { - $ok = false; - $url = 'http://g.etfv.co/' . $website; - - $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; - } +function download_favicon($website, $dest) { + global $favicons_dir; + + $favicon_getter = new \Favicon\Favicon(); + $favicon_getter->setCacheDir($favicons_dir); + $favicon_url = $favicon_getter->get($website); + + if ($favicon_url === false) { + return false; } + + $c = curl_init($favicon_url); + curl_setopt($c, CURLOPT_HEADER, false); + curl_setopt($c, CURLOPT_RETURNTRANSFER, true); + curl_setopt($c, CURLOPT_BINARYTRANSFER, true); + $img_raw = curl_exec($c); + $status_code = curl_getinfo($c, CURLINFO_HTTP_CODE); curl_close ($c); - if (!$ok) { - header('Location: ' . $url); - return false; + + if ($status_code === 200) { + $file = fopen($dest, 'w'); + if ($file !== false) { + fwrite($file, $img_raw); + fclose($file); + return true; + } } - return true; + + return false; } -$id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0'; +function show_default_favicon() { + global $default_favicon; + + header('HTTP/1.1 404 Not Found'); + header('Content-Type: image/png'); + readfile($default_favicon); + die(); +} + + +$id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0'; if (!ctype_xdigit($id)) { $id = '0'; } @@ -38,19 +61,17 @@ if (!ctype_xdigit($id)) { $txt = $favicons_dir . $id . '.txt'; $ico = $favicons_dir . $id . '.ico'; -$icoMTime = @filemtime($ico); -$txtMTime = @filemtime($txt); +$ico_mtime = @filemtime($ico); +$txt_mtime = @filemtime($txt); -if (($icoMTime == false) || ($txtMTime > $icoMTime)) { - if ($txtMTime == false) { - header('HTTP/1.1 404 Not Found'); - header('Content-Type: image/gif'); - readfile(PUBLIC_PATH . '/themes/icons/grey.gif'); //TODO: Better 404 favicon - die(); +if (($ico_mtime == false) || ($txt_mtime > $ico_mtime)) { + if ($txt_mtime == false) { + show_default_favicon(); } + $url = file_get_contents($txt); if (!download_favicon($url, $ico)) { - die(); + show_default_favicon(); } } @@ -59,6 +80,6 @@ require(LIB_PATH . '/http-conditional.php'); header('Content-Type: image/x-icon'); header('Content-Disposition: inline; filename="' . $id . '.ico"'); -if (!httpConditional($icoMTime, 2592000, 2)) { +if (!httpConditional($ico_mtime, 2592000, 2)) { readfile($ico); } |
