From aa6275356ae7e5b0b652b9503762e25fd7e0e1ff Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 4 Jan 2015 15:31:47 +0100 Subject: [PATCH] The function to fetch the original url (without shortener) failed if a linked file was too large. --- include/network.php | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/include/network.php b/include/network.php index 6a37f4a549..190dce326e 100644 --- a/include/network.php +++ b/include/network.php @@ -1159,13 +1159,8 @@ function original_url($url, $depth=1, $fetchbody = false) { $siteinfo = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_HEADER, 1); - - if ($fetchbody) - curl_setopt($ch, CURLOPT_NOBODY, 0); - else - curl_setopt($ch, CURLOPT_NOBODY, 1); - + curl_setopt($ch, CURLOPT_HEADER, 1); + curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent()); @@ -1183,16 +1178,33 @@ function original_url($url, $depth=1, $fetchbody = false) { return(original_url($curl_info['location'], ++$depth, $fetchbody)); } - $pos = strpos($header, "\r\n\r\n"); + // Check for redirects in the meta elements of the body if there are no redirects in the header. + if (!$fetchbody) + return(original_url($url, ++$depth, true)); + + // if the file is too large then exit + if ($curl_info["download_content_length"] > 1000000) + return($url); + + // if it isn't a HTML file then exit + if (($curl_info["content_type"] != "") AND !strstr(strtolower($curl_info["content_type"]),"html")) + return($url); - if ($pos) - $body = trim(substr($header, $pos)); - else - $body = $header; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_NOBODY, 0); + curl_setopt($ch, CURLOPT_TIMEOUT, 10); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_USERAGENT, $a->get_useragent()); + + $body = curl_exec($ch); + curl_close($ch); if (trim($body) == "") - return(original_url($url, ++$depth, true)); + return($url); + // Check for redirect in meta elements $doc = new DOMDocument(); @$doc->loadHTML($body); -- 2.39.5