function add_feed($url) { global $user_id; $url = fetch_feedurl(trim($url)); if ($url === -7) { return -7; } $feedname = fetch_feedtitle($url); if ($feedname == '') { $feedname = htmlspecialchars($url); } mysql_query("INSERT IGNORE INTO `feeds` (`name`, `url`, `lastupdate`) VALUES ('" . mysql_real_escape_string($feedname) . "', '" . mysql_real_escape_string($url) . "', " . time() . ")"); echo mysql_error(); mysql_query("INSERT IGNORE INTO `feeds_subscription` (`feedid`, `userid`) VALUES ((SELECT `id` FROM `feeds` WHERE `url` = '" . mysql_real_escape_string($url) . "'), '" . $user_id . "')"); echo mysql_error(); }
function fetch_feedurl($url) { $uri = parse_url($url); $ip = gethostbyname($uri['host']); if ($ip == false or $ip == '62.75.159.223') { $nsl = shell_exec('nslookup ' . escapeshellarg($uri['host'])); if (strpos($nsl, 'NXDOMAIN') !== false) { return false; } } if ($uri['scheme'] == 'https') { $fp = @fsockopen('ssl://' . $ip, intval($uri['port']) > 0 ? $uri['port'] : 443, $err, $errn, 20); } else { $fp = @fsockopen($ip, intval($uri['port']) > 0 ? $uri['port'] : 80, $err, $errn, 20); } if (!$fp) { return -7; } else { $path = ""; if (isset($uri['path']) && !empty($uri['path'])) { $path .= $uri['path']; } if (isset($uri['query']) && !empty($uri['query'])) { $path .= "?" . $uri['query']; } $addheader = ""; if (isset($uri['user']) && !empty($uri['user']) && isset($uri['pass']) && !empty($uri['pass'])) { $addheader .= "Authorization: Basic " . base64_encode($uri['user'] . ':' . $uri['pass']) . "\r\n"; } if ($path == "") { $path = "/"; } fwrite($fp, "GET {$path} HTTP/1.0\r\nHost: " . $uri['host'] . "\r\nUser-Agent: geeksfactory-reader/1.0{$addheader}\r\n\r\n"); stream_set_timeout($fp, 10); $res = ""; while (!feof($fp)) { $new = fread($fp, 128); $res .= $new; if (strpos($new, '</head>') !== false) { break; } if (strpos($new, '<feed') !== false or strpos($new, '<channel') !== false) { break; } } fclose($fp); if (strpos($res, '<feed') !== false or strpos($res, '<channel') !== false) { return $url; } $locsearch = preg_match('#Location: ([^ \\r\\n]*)#i', substr($res, 0, strpos($res, "\r\n\r\n")), $treffer); if ($locsearch > 0) { return fetch_feedurl($treffer[1]); } if (substr($res, 0, 10) == 'HTTP/1.1 4' || substr($res, 0, 10) == 'HTTP/1.1 3') { return false; } $htmlsearch = preg_match('#<link(([^>]*type=["\']application/(rss|atom)\\+xml["\'][^>]*href=["\']([^"\']+)["\'][^>]*)|(<link[^>]*href=["\']([^"\']+)["\'][^>]*type=["\']application/(rss|atom)\\+xml["\'][^>]*))>#i', $res, $treffer); if ($htmlsearch > 0) { return urljoin($url, htmlspecialchars_decode($treffer[4])); } } return $url; }