aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/Feed.php11
-rw-r--r--data/favicons/.gitignore2
-rw-r--r--lib/lib_rss.php35
-rw-r--r--public/f.php67
-rw-r--r--public/favicons/.gitignore1
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