]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
Fix several problems with image download
[tt-rss.git] / functions.php
index 78adfdbcbd153101f28b69ce6fad8df3e3215249..7320f0fac6f4c5f61b8832c6cb794d0c00a528e4 100644 (file)
                }
        }
 
-       function fetch_file_contents($url) {
+       function fetch_file_contents($url, $type) {
                if (USE_CURL_FOR_ICONS) {
-                       $tmpfile = tempnam(TMP_DIRECTORY, "ttrss-tmp");
-
                        $ch = curl_init($url);
-                       $fp = fopen($tmpfile, "w");
 
-                       if ($fp) {
-                               curl_setopt($ch, CURLOPT_FILE, $fp);
-                               curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
-                               curl_setopt($ch, CURLOPT_TIMEOUT, 45);
-                               curl_exec($ch);
-
-                               if (strpos(curl_getinfo($ch, CURLINFO_CONTENT_TYPE), "image/") !== false) {
-                                       curl_close($ch);
-                                       fclose($fp);                                    
-                                       $contents = file_get_contents($tmpfile);
-                               } else {
-                                       curl_close($ch);
-                                       fclose($fp);                                    
-                               }
+                       curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);
+                       curl_setopt($ch, CURLOPT_TIMEOUT, 45);
+                       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+                       curl_setopt($ch, CURLOPT_MAXREDIRS, 20);
+                       curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
+                       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+                       $contents = curl_exec($ch);
+                       if ($contents === false) {
+                               curl_close($ch);
+                               return false;
                        }
 
-                       unlink($tmpfile);
+                       $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
+                       curl_close($ch);
 
-                       return $contents;
+                       if ($type && strpos($content_type, "$type") === false) {
+                               return false;
+                       }
 
+                       return $contents;
                } else {
                        return file_get_contents($url);
                }
                $icon_file = ICONS_DIR . "/$feed.ico";
 
                if ($favicon_url && !file_exists($icon_file)) {
-                       $contents = fetch_file_contents($favicon_url);
+                       $contents = fetch_file_contents($favicon_url, "image");
 
-                       $fp = fopen($icon_file, "w");
+                       if ($contents) {
+                               $fp = fopen($icon_file, "w");
 
-                       if ($fp) {
-                               fwrite($fp, $contents);
-                               fclose($fp);
-                               chmod($icon_file, 0644);
+                               if ($fp) {
+                                       fwrite($fp, $contents);
+                                       fclose($fp);
+                                       chmod($icon_file, 0644);
+                               }
                        }
                }