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/f.php') 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 From ea7946658289ab768f0948c50d5aa553f6e826d1 Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Mon, 29 Dec 2014 11:46:01 +0100 Subject: Fix typo coding style See https://github.com/FreshRSS/FreshRSS/issues/290 --- p/f.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'p/f.php') diff --git a/p/f.php b/p/f.php index f29de095d..d00b36eb0 100644 --- a/p/f.php +++ b/p/f.php @@ -28,7 +28,7 @@ function download_favicon($website, $dest) { curl_setopt($c, CURLOPT_BINARYTRANSFER, true); $img_raw = curl_exec($c); $status_code = curl_getinfo($c, CURLINFO_HTTP_CODE); - curl_close ($c); + curl_close($c); if ($status_code === 200) { $file = fopen($dest, 'w'); -- cgit v1.2.3 From 7584364a4c2b407e97909e94ba274da62620abea Mon Sep 17 00:00:00 2001 From: Marien Fressinaud Date: Mon, 29 Dec 2014 11:56:22 +0100 Subject: Fix behaviour when favicon url is not found If url is not find, we copy default favicon into favicon dir so at the next try, we don't search the url again. See https://github.com/FreshRSS/FreshRSS/issues/290 See https://github.com/FreshRSS/FreshRSS/issues/727 --- p/f.php | 8 ++++---- p/themes/icons/default_favicon.ico | Bin 0 -> 1150 bytes p/themes/icons/default_favicon.png | Bin 726 -> 0 bytes 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 p/themes/icons/default_favicon.ico delete mode 100644 p/themes/icons/default_favicon.png (limited to 'p/f.php') diff --git a/p/f.php b/p/f.php index d00b36eb0..fefbf9a10 100644 --- a/p/f.php +++ b/p/f.php @@ -7,19 +7,19 @@ include(LIB_PATH . '/Favicon/DataAccess.php'); $favicons_dir = DATA_PATH . '/favicons/'; -$default_favicon = PUBLIC_PATH . '/themes/icons/default_favicon.png'; +$default_favicon = PUBLIC_PATH . '/themes/icons/default_favicon.ico'; /* Télécharge le favicon d'un site et le place sur le serveur */ function download_favicon($website, $dest) { - global $favicons_dir; + global $favicons_dir, $default_favicon; $favicon_getter = new \Favicon\Favicon(); $favicon_getter->setCacheDir($favicons_dir); $favicon_url = $favicon_getter->get($website); if ($favicon_url === false) { - return false; + return @copy($default_favicon, $dest); } $c = curl_init($favicon_url); @@ -47,7 +47,7 @@ function show_default_favicon() { global $default_favicon; header('HTTP/1.1 404 Not Found'); - header('Content-Type: image/png'); + header('Content-Type: image/ico'); readfile($default_favicon); die(); } diff --git a/p/themes/icons/default_favicon.ico b/p/themes/icons/default_favicon.ico new file mode 100644 index 000000000..e4d5e8f67 Binary files /dev/null and b/p/themes/icons/default_favicon.ico differ diff --git a/p/themes/icons/default_favicon.png b/p/themes/icons/default_favicon.png deleted file mode 100644 index 1e660b740..000000000 Binary files a/p/themes/icons/default_favicon.png and /dev/null differ -- cgit v1.2.3