示例#1
0
 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();
 }
示例#2
0
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;
}