summaryrefslogtreecommitdiff
path: root/functions.php
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2010-04-22 10:10:49 +0400
committerAndrew Dolgov <[email protected]>2010-04-22 10:10:49 +0400
commita1af15741005290157baa6b1df724a5becee1738 (patch)
tree003f8b75187f99564912b6f5f77f11878ae18d9e /functions.php
parent83573d3118112668a56e376b4748eef6e6961d50 (diff)
Fix several problems with image download
Fix fetch_file_contents, so that it returns the contents even if the data isn't an image. This is needed because the get_favicon_url function tries to download the webpage using this function, to see if there is a favicon in the page. The function now takes an optional $type parameter. This parameter control if the calling function cares about the content-type, or if the function should just return everything. If the $type parameter is set, the content-type should contain the string contained in $type, otherwise the function returns false. The second problem solved with this patch, is that the temporary file that should contain the image was empty in some cases. I never found out why this happended, but as curl_exec is capable of returning the fetched data, thus eliminating the need for the temporary file all together, the function have been changed to use this way of obtaining the data. The last problem fixed by this patch is that curl will now follow redirects. Author: Klaus S. Madsen <[email protected]>
Diffstat (limited to 'functions.php')
-rw-r--r--functions.php52
1 files changed, 26 insertions, 26 deletions
diff --git a/functions.php b/functions.php
index 78adfdbcb..7320f0fac 100644
--- a/functions.php
+++ b/functions.php
@@ -353,33 +353,31 @@
}
}
- 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);
}
@@ -491,14 +489,16 @@
$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);
+ }
}
}