isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false, 'is_apache' => isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false, 'is_cgi' => isset($_SERVER['SERVER_SOFTWARE']) && strpos(php_sapi_name(), 'cgi') !== false, 'is_windows' => stristr(PHP_OS, 'WIN') !== false, 'iso_case_folding' => ord(strtolower(chr(138))) === 154, 'complex_preg_chars' => @version_compare(PHP_VERSION, '4.3.3') != -1, ); // A bug in some versions of IIS under CGI (older ones) makes cookie setting not work with Location: headers. $context['server']['needs_login_fix'] = $context['server']['is_cgi']; // The following determines the user agent (browser) as best it can. $context['browser'] = array( 'is_opera' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false, 'is_opera6' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 6') !== false, 'is_opera7' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/7') !== false, 'is_opera8' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 8') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/8') !== false, 'is_opera9' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 9') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/9') !== false, 'is_ie4' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 4') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') === false, 'is_safari' => strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false, 'is_mac_ie' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false, 'is_web_tv' => strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') !== false, 'is_konqueror' => strpos($_SERVER['HTTP_USER_AGENT'], 'Konqueror') !== false, 'is_firefox' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false, 'is_firefox1' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/1.') !== false, 'is_firefox2' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/2.') !== false, 'is_iphone' => strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false, ); $context['browser']['is_gecko'] = strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false && !$context['browser']['is_safari'] && !$context['browser']['is_konqueror']; // Internet Explorer 5 and 6 are often "emulated". $context['browser']['is_ie7'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv']; $context['browser']['is_ie6'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv']; $context['browser']['is_ie5.5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.5') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv']; $context['browser']['is_ie5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.0') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv']; $context['browser']['is_ie'] = $context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie6'] || $context['browser']['is_ie7']; $context['browser']['needs_size_fix'] = ($context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie4'] || $context['browser']['is_opera6']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false; // This isn't meant to be reliable, it's just meant to catch most bots to prevent PHPSESSID from showing up. $context['browser']['possibly_robot'] = !empty($user_info['possibly_robot']); } define('SMF', 'YARSS'); // We're going to want a few globals... these are all set later. global $context, $modSettings; // Get the forum's settings for database and file paths. require_once(dirname(__FILE__) . '/Settings.php'); $ssi_error_reporting = error_reporting(E_ALL); // Don't do john didley if the forum's been shut down competely. if ($maintenance == 2 && (!isset($ssi_maintenance_off) || $ssi_maintenance_off !== true)) die($mmessage); // Fix for using the current directory as a path. if (substr($sourcedir, 0, 1) == '.' && substr($sourcedir, 1, 1) != '.') $sourcedir = dirname(__FILE__) . substr($sourcedir, 1); // Load the important includes. require_once($sourcedir . '/QueryString.php'); require_once($sourcedir . '/Subs.php'); require_once($sourcedir . '/Errors.php'); require_once($sourcedir . '/Load.php'); require_once($sourcedir . '/Security.php'); if (@version_compare(PHP_VERSION, '4.2.3') != 1) require_once($sourcedir . '/Subs-Compat.php'); // Connect to the MySQL database. if (empty($db_persist)) $db_connection = @mysql_connect($db_server, $db_user, $db_passwd); else $db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd); if ($db_connection === false) return false; // Add the database onto the prefix to avoid conflicts with other scripts. /*if (strpos($db_prefix, '.') === false) $db_prefix = is_numeric(substr($db_prefix, 0, 1)) ? $db_name . '.' . $db_prefix : '`' . $db_name . '`.' . $db_prefix; else*/ @mysql_select_db($db_name, $db_connection); // Load installed 'Mods' settings. reloadSettings(); // Clean the request variables. cleanRequest(); // Seed the random generator? #if (empty($modSettings['rand_seed']) || mt_rand(1, 250) == 69) # smf_seed_generator(); // Check on any hacking attempts. if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS'])) die('Hacking attempt...'); elseif (isset($_REQUEST['ssi_theme']) && (int) $_REQUEST['ssi_theme'] == (int) $ssi_theme) die('Hacking attempt...'); elseif (isset($_COOKIE['ssi_theme']) && (int) $_COOKIE['ssi_theme'] == (int) $ssi_theme) die('Hacking attempt...'); elseif (isset($_REQUEST['ssi_layers'])) { if ((@get_magic_quotes_gpc() ? addslashes($_REQUEST['ssi_layers']) : $_REQUEST['ssi_layers']) == htmlspecialchars($ssi_layers)) die('Hacking attempt...'); } if (isset($_REQUEST['context'])) die('Hacking attempt...'); // Make sure wireless is always off. define('WIRELESS', false); // Primarily, this is to fix the URLs... ob_start('ob_sessrewrite'); $mode = @$_GET['mode']; if ($mode == 'comments') { header ("Status: 404 Not Found"); die; } $forum = (int)@$_GET['forum']; $topic = (int)@$_GET['topic']; $post = (int)@$_GET['post']; $characterSet = 'UTF-8'; // список всех RSS в opml (yarss.php?mode=opml) if ($mode == 'opml') { header('Content-Type: text/xml; charset=' . $characterSet); $request = db_query(' SELECT ID_BOARD, name FROM ' . $db_prefix . 'boards ' . ($botAccess ? 'WHERE (FIND_IN_SET(-1, memberGroups))' : '') . ' ORDER BY boardOrder', __FILE__, __LINE__ ); echo '' . "\n" . '' . "\n" . 'Ya.rss opml file' . "\n" . '' . "\n" . '' . "\n"; while ($row = mysql_fetch_assoc($request)) { echo '' . "\n"; } echo '' . "\n" . ''; } elseif (empty($mode) AND ! empty($topic)) { // Проверяем, можно ли выдавать RSS из этого форума $request = db_query(' SELECT b.name as bname, b.memberGroups, m.subject as name FROM ' . $db_prefix . 'boards b, ' . $db_prefix . 'topics t, ' . $db_prefix . 'messages m WHERE t.ID_TOPIC = ' . $topic . ' AND t.ID_FIRST_MSG = m.ID_MSG ORDER BY boardOrder', __FILE__, __LINE__ ); $row = mysql_fetch_assoc($request); if (empty($row['name'])) { header('HTTP/1.0 404 Not Found'); echo 'Эта тема не существует.'; } else { if ($botAccess) { $arMemberGroups = explode(',', $row['memberGroups']); if (!in_array('-1', $arMemberGroups)) { header('HTTP/1.0 404 Not Found'); echo 'Эта тема не выдается в виде RSS.'; exit; } unset($arMemberGroups); } // шапка RSS $xml = '' . "\n" . '' . "\n" . '' . "\n" . '' . htmlspecialchars($row['name']) . ' — www.rock.ru' . "\n" . '' . $boardurl . 'index.php?topic=' . $topic . '.new;boardseen#new' . "\n" . '' . htmlspecialchars($row['name']) . ' — Российский рок-портал www.rock.ru' . "\n" . 'ru' . "\n" . 'rock@rock.ru (Aleksei Miheev)' . "\n"; // магический mysql-запрос, который все делает if (! empty ($post)) { $and_where = 'AND mes.ID_MSG < "' . $post . '"'; } else { $and_where = ''; } $order = 'mes.ID_MSG DESC'; $request = db_query(' SELECT mes.*, mem.realName as memberName FROM ' . $db_prefix . 'messages mes, ' . $db_prefix . 'members mem WHERE mes.ID_MEMBER = mem.ID_MEMBER AND mes.ID_TOPIC = "' . $topic . '" ' . $and_where .' ORDER BY ' . $order . ' LIMIT ' . $limit, __FILE__, __LINE__ ); // для листалки $paginationPost = 0; $paginationTopic = 0; // -ы if (mysql_num_rows($request) > 0) { $modif = false; loadServerAndBrowser(); while ($row = mysql_fetch_assoc($request)) { $paginationPost = $row['ID_MSG']; parsecode($row['body']); $body = $row['body']; //$body = html_entity_decode($body); //$body = nl2br($body); //$body = preg_replace('/[\x00-\x08\x0B-\x0C\x0E-\x19]/', '', $body); $xml .= '' . "\n" . '' . htmlspecialchars($row['subject']). '' . "\n"; $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'] . '' . "\n"; $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '' . "\n"; $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'] . '' . "\n" . '' . htmlspecialchars ($body) . '' . "\n" . '' . (date('r', $row['posterTime'])) . '' . "\n" # . '' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '' . "\n" . '' . htmlspecialchars($row['memberName']) . '' . "\n" . '' . "\n"; if ($modif == false) { $modif = true; header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $row['posterTime']) . ' GMT'); # дата самого свежего сообщения } } } // листалка назад, если это не последняя страница if ($post != $paginationPost) { $xml .= '' . $boardurl . '/yarss.php?topic=' . $topic . '&post=' . $paginationPost . '' . "\n"; } $xml .= ''; header('Content-Type: text/xml; charset=' . $characterSet); echo $xml; } } // список всех RSS по умолчанию (yarss.php без параметров) elseif (empty($forum)) { header('Content-Type: text/html; charset=' . $characterSet); $request = db_query(' SELECT ID_BOARD, name, numTopics, numPosts FROM ' . $db_prefix . 'boards ' . ($botAccess ? 'WHERE (FIND_IN_SET(-1, memberGroups))' : '') . ' ORDER BY boardOrder', __FILE__, __LINE__ ); echo '' . 'Список разрешенных к индексации форумов в RSS' . ': (opml)'; while ($row = mysql_fetch_assoc($request)) { echo '

' . $row['name'] . ' ' . $row['numTopics'] . '/' . $row['numPosts']; echo '

'; } if ($botAccess) { echo '

Внимание: В RSS выдаются только те форумы, в которых разрешено индексирование ("Характеристики и настройки" -> "Поисковые системы" -> "Настройки", "Назначить группу для пауков").

'; } echo '

Теперь вы можете добавить желаемые потоки в Яндекс.Поиск по блогам.

'; echo ''; } else { // Проверяем, можно ли выдавать RSS из этого форума $request = db_query(' SELECT name, memberGroups FROM ' . $db_prefix . 'boards WHERE ID_BOARD = ' . $forum . ' ORDER BY boardOrder', __FILE__, __LINE__ ); $row = mysql_fetch_assoc($request); if (empty($row['name'])) { header('HTTP/1.0 404 Not Found'); echo 'Этот форум не существует.'; } else { if ($botAccess) { $arMemberGroups = explode(',', $row['memberGroups']); if (!in_array('-1', $arMemberGroups)) { header('HTTP/1.0 404 Not Found'); echo 'Этот форум не выдается в виде RSS.'; exit; } unset($arMemberGroups); } // шапка RSS $xml = '' . "\n" . '' . "\n" . '' . "\n" . '' . htmlspecialchars($row['name']) . ' — www.rock.ru' . "\n" . '' . $boardurl . '' . "\n" . '' . htmlspecialchars($row['name']) . ' — Российский рок-портал www.rock.ru' . "\n" . 'ru' . "\n" . 'rock@rock.ru(Aleksei "rusty_angel" Miheev)' . "\n" . 'Ya:Rss ' . $version . '' . "\n"; // магический mysql-запрос, который все делает $where1 = ''; $where2 = ''; $order = 'tps.ID_TOPIC DESC, mes.ID_MSG DESC'; # if (empty($mode)) { # только первые посты/остальные посты $where1 = '='; # } # else { # $where1 = '<>'; # $order = 'mes.ID_MSG DESC'; # } if ($topic != 0) { # листалка по тредам $where2 = 'AND tps.ID_TOPIC < "' . $topic . '"'; $order = 'tps.ID_TOPIC DESC'; } # if ($post != 0 && $mode == 'comments') { # листалка по постам # $where2 = 'AND mes.ID_MSG < "' . $post . '"'; # $order = 'mes.ID_MSG DESC'; # } $request = db_query(' SELECT tps.*, mes.*, mem.realName AS memberName FROM ' . $db_prefix . 'topics tps, ' . $db_prefix . 'messages mes, ' . $db_prefix . 'members mem WHERE mes.ID_MEMBER = mem.ID_MEMBER AND tps.ID_FIRST_MSG ' . $where1 . ' mes.ID_MSG AND mes.ID_TOPIC = tps.ID_TOPIC AND tps.ID_BOARD = "' . $forum . '" ' . $where2 . ' ORDER BY ' . $order . ' LIMIT ' . $limit, __FILE__, __LINE__ ); // для листалки $paginationPost = 0; $paginationTopic = 0; // -ы if (mysql_num_rows($request) > 0) { $modif = false; loadServerAndBrowser(); while ($row = mysql_fetch_assoc($request)) { $paginationPost = $row['ID_MSG']; $paginationTopic = $row['ID_TOPIC']; parsecode($row['body']); $body = $row['body']; //$body = html_entity_decode($body); //$body = nl2br($body); //$body = preg_replace('/[\x00-\x08\x0B-\x0C\x0E-\x19]/', '', $body); $xml .= '' . "\n" . '' . htmlspecialchars($row['subject'], ENT_QUOTES, 'UTF-8', false). '' . "\n"; # if ($mode != 'comments') { $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '' . "\n"; $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '' . "\n"; # } # else { # $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'] . '' . "\n"; # $xml .= '' .$scripturl . '?topic=' . $row['ID_TOPIC'] . '.msg' . $row['ID_MSG'] . '#msg' . $row['ID_MSG'] . '' . "\n"; # } # if ($mode == 'comments') { # $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '' . "\n"; # } # $xml .= '' . $scripturl . '?topic=' . $row['ID_TOPIC'] . '' . "\n" $xml .= '' . htmlspecialchars ($body) . '' . "\n" . '' . (date('r', $row['posterTime'])) . '' . "\n" # . '' . $scripturl . '?action=profile;u=' . $row['ID_MEMBER'] . '' . "\n" . '' . $row['memberName'] . '' . "\n" . '' . "\n"; if ($modif == false) { $modif = true; header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $row['posterTime']) . ' GMT'); # дата самого свежего сообщения } } } // листалка назад, если это не последняя страница if ($post != $paginationPost && !empty($paginationTopic)) { # if ($mode != 'comments') { $xml .= '' . $boardurl . '/yarss.php?forum=' . $forum . '&topic=' . $paginationTopic . '' . "\n"; # } # else { # $xml .= '' . $boardurl . '/yarss.php?forum=' . $forum . '&post=' . $paginationPost . '&mode=' . $mode . '' . "\n"; # } } // ссылка на фид с комментами # if ($mode != 'comments') { # $xml .= '' . $boardurl . '/yarss.php?forum=' . $forum . '&mode=comments'; # } $xml .= ''; header('Content-Type: text/xml; charset=' . $characterSet); echo $xml; } } ?>