diff options
| author | 2013-12-01 22:58:15 +0100 | |
|---|---|---|
| committer | 2013-12-01 22:58:15 +0100 | |
| commit | b0cbc6fe5da527aa2a4fedf4b138264ff983d159 (patch) | |
| tree | d3eff0f73423f7bc4e598a22d559a213dcf080ef | |
| parent | baa8d21341d3f35a06815fd3f4ec536ef6ac2f3e (diff) | |
Favicons en parallèle
Nouvelle méthode pour afficher les favicons à la demande et en
parallèle.
Déplacement du dossier des favicons sous /data/favicons/
Devrait permettre de fermer le problème d'import OPML
https://github.com/marienfressinaud/FreshRSS/issues/228
Voir aussi https://github.com/marienfressinaud/FreshRSS/issues/290
| -rw-r--r-- | app/models/Feed.php | 11 | ||||
| -rw-r--r-- | data/favicons/.gitignore | 2 | ||||
| -rw-r--r-- | lib/lib_rss.php | 35 | ||||
| -rw-r--r-- | public/f.php | 67 | ||||
| -rw-r--r-- | public/favicons/.gitignore | 1 |
5 files changed, 73 insertions, 43 deletions
diff --git a/app/models/Feed.php b/app/models/Feed.php index f183b2aa7..41eb3df23 100644 --- a/app/models/Feed.php +++ b/app/models/Feed.php @@ -96,14 +96,11 @@ class Feed extends Model { return $this->nbNotRead; } public function favicon () { - $file = '/favicons/' . $this->id () . '.ico'; - - $favicon_url = Url::display ($file); - if (!file_exists (PUBLIC_PATH . $file)) { - download_favicon ($this->website (), $this->id ()); + $file = DATA_PATH . '/favicons/' . $this->id () . '.txt'; + if (!file_exists ($file)) { + file_put_contents($file, $this->website ()); } - - return $favicon_url; + return Url::display ('/f.php?' . $this->id ()); } public function _id ($value) { diff --git a/data/favicons/.gitignore b/data/favicons/.gitignore new file mode 100644 index 000000000..5ec725522 --- /dev/null +++ b/data/favicons/.gitignore @@ -0,0 +1,2 @@ +*.ico +*.txt
\ No newline at end of file diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 46bf76d2c..c4ca03165 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -198,41 +198,6 @@ function get_content_by_parsing ($url, $path) { } } -/* Télécharge le favicon d'un site, le place sur le serveur et retourne l'URL */ -function download_favicon ($website, $id) { - $url = 'http://g.etfv.co/' . $website; - $favicons_dir = PUBLIC_PATH . '/favicons'; - $dest = $favicons_dir . '/' . $id . '.ico'; - - if (!is_dir ($favicons_dir)) { - if (!mkdir ($favicons_dir, 0755, true)) { - return $url; - } - } - - if (!file_exists ($dest)) { - $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) { - return $url; - } - - fwrite ($file, $imgRaw); - fclose ($file); - } else { - return $url; - } - - curl_close ($c); - } -} - /** * Add support of image lazy loading * Move content from src attribute to data-original 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); +} diff --git a/public/favicons/.gitignore b/public/favicons/.gitignore deleted file mode 100644 index 29d1aae76..000000000 --- a/public/favicons/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.ico
\ No newline at end of file |
