X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FNetwork.php;h=0e65145b78340caca37bc49f583a9d62c441df0e;hb=0448ca38973fed14840d33079989fd71af93708b;hp=bbdc51fbbb535f2e1adef957c8dbeda77d5adae4;hpb=641bd5eaa6f4ff2f7c975d87d60dd7bba8829eba;p=friendica.git diff --git a/src/Util/Network.php b/src/Util/Network.php index bbdc51fbbb..0e65145b78 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -18,12 +18,13 @@ use DomXPath; class Network { /** - * @brief Curl wrapper + * Curl wrapper * * If binary flag is true, return binary results. * Set the cookiejar argument to a string (e.g. "/tmp/friendica-cookies.txt") * to preserve cookies from one request to the next. * + * @brief Curl wrapper * @param string $url URL to fetch * @param boolean $binary default false * TRUE if asked to return binary results (file download) @@ -36,7 +37,31 @@ class Network */ public static function fetchUrl($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0) { - $ret = self::curl( + $ret = self::fetchUrlFull($url, $binary, $redirects, $timeout, $accept_content, $cookiejar); + + return $ret['body']; + } + + /** + * Curl wrapper with array of return values. + * + * Inner workings and parameters are the same as @ref fetchUrl but returns an array with + * all the information collected during the fetch. + * + * @brief Curl wrapper with array of return values. + * @param string $url URL to fetch + * @param boolean $binary default false + * TRUE if asked to return binary results (file download) + * @param integer $redirects The recursion counter for internal use - default 0 + * @param integer $timeout Timeout in seconds, default system config value or 60 seconds + * @param string $accept_content supply Accept: header with 'accept_content' as the value + * @param string $cookiejar Path to cookie jar file + * + * @return array With all relevant information, 'body' contains the actual fetched content. + */ + public static function fetchUrlFull($url, $binary = false, &$redirects = 0, $timeout = 0, $accept_content = null, $cookiejar = 0) + { + return self::curl( $url, $binary, $redirects, @@ -45,8 +70,6 @@ class Network 'cookiejar'=>$cookiejar ] ); - - return($ret['body']); } /** @@ -80,7 +103,7 @@ class Network $a = get_app(); $parts = parse_url($url); - $path_parts = explode('/', $parts['path']); + $path_parts = explode('/', defaults($parts, 'path', '')); foreach ($path_parts as $part) { if (strlen($part) <> mb_strlen($part)) { $parts2[] = rawurlencode($part); @@ -229,7 +252,7 @@ class Network $newurl = $curl_info['redirect_url']; - if (($new_location_info['path'] == '') && ($new_location_info['host'] != '')) { + if (empty($new_location_info['path']) && !empty($new_location_info['host'])) { $newurl = $new_location_info['scheme'] . '://' . $new_location_info['host'] . $old_location_info['path']; } @@ -389,7 +412,7 @@ class Network $matches = []; $new_location_info = @parse_url($curl_info['redirect_url']); $old_location_info = @parse_url($curl_info['url']); - + preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); $newurl = trim(array_pop($matches)); @@ -446,7 +469,7 @@ class Network /// @TODO Really suppress function outcomes? Why not find them + debug them? $h = @parse_url($url); - if ((is_array($h)) && (@dns_get_record($h['host'], DNS_A + DNS_CNAME + DNS_PTR) || filter_var($h['host'], FILTER_VALIDATE_IP) )) { + if ((is_array($h)) && (@dns_get_record($h['host'], DNS_A + DNS_CNAME) || filter_var($h['host'], FILTER_VALIDATE_IP) )) { return $url; } @@ -471,7 +494,10 @@ class Network $h = substr($addr, strpos($addr, '@') + 1); - if (($h) && (dns_get_record($h, DNS_A + DNS_CNAME + DNS_PTR + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) { + if (($h) && (dns_get_record($h, DNS_A + DNS_MX) || filter_var($h, FILTER_VALIDATE_IP) )) { + return true; + } + if (($h) && dns_get_record($h, DNS_CNAME + DNS_MX)) { return true; } return false; @@ -630,7 +656,7 @@ class Network public static function stripTrackingQueryParams($url) { $urldata = parse_url($url); - if (is_string($urldata["query"])) { + if (!empty($urldata["query"])) { $query = $urldata["query"]; parse_str($query, $querydata); @@ -814,14 +840,35 @@ class Network return ""; } + if (empty($parts1["scheme"])) { + $parts1["scheme"] = ''; + } + if (empty($parts2["scheme"])) { + $parts2["scheme"] = ''; + } + if ($parts1["scheme"] != $parts2["scheme"]) { return ""; } + if (empty($parts1["host"])) { + $parts1["host"] = ''; + } + if (empty($parts2["host"])) { + $parts2["host"] = ''; + } + if ($parts1["host"] != $parts2["host"]) { return ""; } + if (empty($parts1["port"])) { + $parts1["port"] = ''; + } + if (empty($parts2["port"])) { + $parts2["port"] = ''; + } + if ($parts1["port"] != $parts2["port"]) { return ""; } @@ -832,14 +879,21 @@ class Network $match .= ":".$parts1["port"]; } + if (empty($parts1["path"])) { + $parts1["path"] = ''; + } + if (empty($parts2["path"])) { + $parts2["path"] = ''; + } + $pathparts1 = explode("/", $parts1["path"]); $pathparts2 = explode("/", $parts2["path"]); $i = 0; $path = ""; do { - $path1 = $pathparts1[$i]; - $path2 = $pathparts2[$i]; + $path1 = defaults($pathparts1, $i, ''); + $path2 = defaults($pathparts2, $i, ''); if ($path1 == $path2) { $path .= $path1."/";