Przeglądaj źródła

Change favicon getter behaviour

- Use Favicon library
- Fix coding style
- Change default favicon

Fix https://github.com/FreshRSS/FreshRSS/issues/290
Marien Fressinaud 11 lat temu
rodzic
commit
4f1fc70f87
1 zmienionych plików z 53 dodań i 32 usunięć
  1. 53 32
      p/f.php

+ 53 - 32
p/f.php

@@ -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);
 }