From 4f1fc70f876f27a6a9dc09dcf8c0f016466ea8e9 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Mon, 29 Dec 2014 11:44:25 +0100 Subject: Change favicon getter behaviour - Use Favicon library - Fix coding style - Change default favicon Fix https://github.com/FreshRSS/FreshRSS/issues/290 --- p/f.php | 85 ++++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 32 deletions(-) (limited to 'p') diff --git a/p/f.php b/p/f.php index 5db9ab213..f29de095d 100644 --- a/p/f.php +++ b/p/f.php @@ -1,36 +1,59 @@ 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); } -- cgit v1.2.3