Показаны сообщения с ярлыком скрипты. Показать все сообщения
Показаны сообщения с ярлыком скрипты. Показать все сообщения

воскресенье, 18 марта 2012 г.

4:12 ночи эпопеи с дорвеями, сезон открыт

Скоро кончится март и основные кликеры будут готовится к сдачи различного рода зачётов, экзаменов и прочего. В общем. Сегодня завтра заканчиваю допиливать свои доры и запускать их в простор. и смотреть результат. Надо будет выложить, а не утонуть в офлайновой работе, как обычно это происходит весной.
--
Спокойной ночи не спящий.
--
Пока писал код и думал как лучше его сделать, гугл выдал интересный бложик, о бо всем по мелочи, но не все занают и запоминают мелочи, почитать стоит. Но не всё, а так для справки, чтобы знания освежить. ТЫК ТЫК

среда, 18 ноября 2009 г.

Сел поработать

Наконец-то более меннее разгреб работу, не считая того что надо обработать статистику, написать парочку служебных записок и разместить несколько информационных блоков на обслуживаемые сайты =) еще охото:
1) окучить zabbix
2)Прикрутить наконец-то VPN
3) всех клиентов засунуть в один чат
4) дописать проектик по обработке ссылок
5) разместить сайтик со старыми флеш роликами (случайно нашел старый архив с файлом на 10Гб), знаю конечно что есть, но охото свой. т.к. ныне мульт ру и др. мультяшники страдают херью...
6) Охото крссивую статистику на основе jquery...

на самом деле еще много чё охото, но решил все хотелки сюда вывалить т.к. устал в мозгу держать, надеюсь они меня отпустят, а то мозг разрывается )

Да кстате про странные комменты и жалобы на рукликс: всё бред, зависит от того какой поток и у кого заказываете, т.к. многие хотят много трафика за копейки, как правило недолив бывает только если ваш сервак отказывается его принимать )), в ближайшее время надеюсь закинуть скриптик проверки вкачиваемого траффика на сайт, потому-что у моих проектов увеличилась посещаемость, вот скрин с начала запуска трафик коллектора, меня радует он короче.
Считать, сколько получилось с одного сайта - ломало )), ну вот просто удалось реанимировать работоспособность людей которые говорили что мой траф коллектор работать не будет и прочее )... осталось дописать сохронялку трафика, чтоб быть уверенным что можно будет откручивать свои рекламные объявления
Ru Clicks такчто советую грамотно выбирать посетителей. =)

четверг, 4 сентября 2008 г.

Плагин для Wordpress - приблуда для работы с бакстером

Хотел давно сделать что-то подобное, да только времени небыло, появилось немного времени...
Для работы с партнерской программой от бакстера, для буржуев короче.
Т.е они заходят на сайт с данной программой и видят предупреждение гугла что на сайте вирус =), и Гуглу предлагаем пользователю скачать SpyShredder пользователь же не дурак(средне статистичекский американец), он захочет качественную защиту, поэтому предаставим им (пользователям эту возможность). Так вот в чем вся суть? структуру работы описывал в ЭТОМ ПОСТЕ Получилось что-то мутно-не здоровое. Т.к из меня писака ни какой расскажу как работает Даная приблуда для WORDPRESS.
Как обычно, устанавливаете у себя в папку плагины, как папка называется так и копируете в плагины, потом активируете, самое главно - не забыть проставить галки в настройка самого плагина, а то не кто не сможет попасть на вашу главную страницу и всех сливать будет на Шпийёнов. ну вот из партнерики извлекаете скрипт для всплывающих окон, вставляете куда надо, всё что надо вставлять впринципе подписано, так что проблемм возникнуть не должно. СКАЧАТЬ ПЛАГИН ДЛЯ WORDPRESS для работы в buckster.ru - ну вот => Реф ссылка

Естественно бета версия , не до конца все что надо доделано, попробуйте...... потом если что отпишитесь буду ждать....

Да надо тестите только на локалки а то всякого разного рода бред зальется во все поисковики.... как до дому доберусь перезалью... =/

четверг, 28 августа 2008 г.

Плагин для Wordpress

Всетаки взялся написать плагин, чтобы на Wordpress , была возможность заливать, т.е работать с англиским мусорным траффиком, ну там по партнерской программе разным системам заливать трафик. планируется сам плагин выложить в понедельник, Скорее всего будет приспособлеб под многие системы, на сколько будет забористый? - Надо тестить...

Тут мысль пришла, если сейчас системы продажи ссылок работают с ручным размещением, то почему не зайти в любой закладочник, и в него не расположить много ссылок с хорошим пиаром и тицом, наверно уже это кто-то прошарил, и давно дорого продает такие ссылки =))

четверг, 14 августа 2008 г.

wordpress синонимайзер

Извращаясь от без исходности немного переделал плагин
Работает, но если что не так я не виноват. =)
В общем ручной синонимайзер, применять так:
активируем - он создает таблицы
в комплекте лежит файлик, скачанный откуда-то из инетернета типа базы.

При загрузки учитывается 2 фактора:
1. если файл грузить польностью и врема работы скрипта у php где-то 20 - 25 сек, то файл полностью не успевает прогрузиться, поэтому надо его либо разбивать где-то на 3 части либо мелким копипастами вставлять в окно сверху(при так называемой настройки плагина).
2. формат кодовой страницы должен быть UTF-8 иначе загрузите в базу кучу вопросов.


Немножко переделалась сама таблица хранения слов.

Потому-что синонимы - слова одинаковые или похожие по смыслу и как-то засовывать их в разные синонимы не прикольно.

Скрипт добавления работает так:
в строку через запятую добавляете синонимы, следующая строка - другой синоним.
При посте случайным образом выбирается слово из всех возможных синонимов.
Извращаться с прилагательными глаголами - долго и геморно....
поэтому, найдя слово которое есть в базе тупо заменяется.
базы для англицкой и русской версии заточены под разборку данным парсером....
пользуйтесь...

Качать тут

понедельник, 28 июля 2008 г.

Как заработать на траффике или конвертируем китайцев и дойчландеров в монету.

Как заработать на траффике или конвертируем китайцев и дойчландеров в монету.

На самом деле все началось с того, что начальство решило посмотреть что же такое
счетчик посещений, незнаю на какие ресурсы оно решило сходить (хотя на самом
деле знаю =)) и заявило: "мне интересно знать с каких компьютеров заходят
пользователи", будучи сильно ленивым, спросил, вам нужны характеристики компьтеров?
их частота процессора? видеокарта и объем памяти? =)). Естественно получил,
странно вразумительный ответ: "Из каких городов к нам приходят на сайт? По каким
поисковым запросам нас находят?". Тут у меня настало шоковое состояние, как-то
не охото в пятницу вечером что ли бо делать, да и вообще делать на ПК - ДОСТАЛО
В КОНЕЦ.

До конца рабочего дня шефа оставалось минут 30, пришлось искать методы быстрого
решения "проблеммы". Зайдя в Гугл по запросу: "базы IP по городам России", найдены
были какие-то странно дешевые, аля работающие! и востребованные базы сомнительного
содержания, не раз приходилось покупать в инете дешевые, от производителя,
китайские корпуса для сотовых телефонов....

Благо в интернете существуют места где люди всетаки как-то общаются на адекватные
темы, было найдено 2 каталога IP адресов, один по странам, другой по городам России.
По городам России http://ip2city.ru/ , не знаю на сколько адекватные, но сравнивать
не счем было. Прикрутил к 2ух месячной статистике, построил круговую диаграмму
Шефа сразу обрадовалась... и потом ничего не говорила....

Увидев существования Базы по странам (http://ip-to-country.webhosting.info/)
в душу заползло что-то не понятное, тыкая
сонно в чуже блоги обнаружил на одном из них Добрую Контору, клавиша демо
меня порадовала. Полез смотреть статистику,
какой же очередной алень решил отправить заявление о том как же мы не правильно
работаем. Оказалось что это не алень а китаец =). Чего тебе надобно страче...

И его IP в банлисте. через 5 минут пришло еще 5 китайцев с разными IP, хотя может
это и не китайцы вовсе были, смотрю бан лист растет, уже превратился в целую подсеть.

Мысль мгновенно пролетала и оставила веселый осадок, денежный банный лист - просто
замечательно, китайцам явно нечего делать на русском гос. сервере. В понедельник
уже используя базу ip-to-country и ключевые porno, lesbos англицкие слова, для Yahoo,
соорудил забавный бан лист, для всех инакоязычных Ip адрессов, Yahoo довольно кушал
бан контент, а вот посетителей ждал сюрприз при движении мышкой над данным листом
(вспоминая дыры БК). Контора хорошая, если попал
к ним, то держит крепко на сколько возможно. И китайцы рады и мне забавно.

Ближе к делу.

Сначало нам ведь надо понять действительно ли человек пришел не из россии или
хотябы СНГ, ну т.е понять понимает ли он буковки на кириллице,
для этого надо определить его местонахождение по IP адресу, естественно что
если он пришел через прокси, то его тоже направит туда же куда мы захотим,
но подумав и ответив на вопрос: зачем человек заходит на сайт через прокси сервер?
нормальный человек не будет шифроваться и скрывать свой IP ну незачем ему это,
для него главная цель - найти инормацию или просто посмотреть веселые картинки.

Ну да ладно.

0,95 ШАГ .для этого регистрируемся в Конторе

1 ШАГ.

Нужно взять более менне свежие базы IP адресов, а то окажется что соседа по
дому слил добрым дядькам =)... идем и качаем CVS файл .

2 ШАГ. если хостинГ или это

позволяет использовать PHP + MySQL, то создаем там таблицу вида
(это для файлика all_networks.csv) качать с сайта: http://ip2city.ru/

CREATE TABLE `ip2city_networks` (
`CountryCode` char(2) NOT NULL default '',
`CityID` int(5) NOT NULL default '0',
`IPFrom` double NOT NULL default '0',
`IPTo` double NOT NULL default '0',
`NetName` varchar(75) NOT NULL default '',
KEY `Code` (`IPFrom`,`IPTo`)
);

3 ШАГ создали? Хорошо. Теперь нужно импоритровать скачанный нами файл в нашу табличку:
выполняем sql запрос:

LOAD DATA INFILE '/home/all_netwoks.csv' INTO TABLE `ip2city_networks`
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Краткое описание: /home/all_netwoks.csv - это естественно путь где лежит наш
файл, INTO TABLE `ip2city_networks` - вставить в такую-то таблицу данные,
линии разделяются переносом строки.

можно проэксперемментировать в денвере конечно, там удобно это делать.
вот теперь запросом вида:

$sql = 'SELECT CountryCode, CityID, NetName
FROM `ip2city_networks`
WHERE (`IPFrom` < '.$ip_num.') AND ('.$ip_num.'< `IPTo`)';

можно выковыривать оттуда нужные значения... теперь рассмотрим для крутого справочника значений IP 'Это у нас ip-to-country.csv' для него нужно создать немножко другую базу, чтобы в голове ничего не перепуталось названия значений у таблицы будут примерно одинаковые:

CREATE TABLE `ip2w_n`
( `IPFrom` double NOT NULL default '0',
`IPTo` double NOT NULL default '0',
`CountryCode` char(2) NOT NULL default '',
`CityID` char(5) NOT NULL default '0',
`Gos` varchar(75) NOT NULL default '',
KEY `Code` (`IPFrom`,`IPTo`) );

Так вот теперь у нас получилось, табличка, надо засунуть в нее значения. делаем запрос вида: качать с сайта http://ip-to-country.webhosting.info/:

LOAD DATA INFILE '/home/ip-to-country.csv' INTO TABLE `ip2w_n` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

т.к впринципе оба csv файла одинаково скомпановыны, то импорт тоже похож и запрос в БД впринципе тоже похож...

Получилось, что у нас в БД лежат какие-то цыфры с буквами, не все так страшно как мне кажется =)....

Так, надо наверно это куда-то встроить, и помочь добрым китайцам или великой америке получать немножко добра, они любит всякие такие штуки радостные. Т.к лень двигатель прогресса и в данный момент изучать ничего нового не охото будем встраивать в нюку, если есть пожелания встроить это куда-то в другое место пишите... 2.1 ШАГ.... Создание мега коварного тестового блока по захвату вселенной т.к блок - удобный инструмент.... допустим у вас есть блок с какой-нибудь информацией для посетителей или просто реклама, да на самом деле не важно, можно даже и в тело главно скрипта,пусть даже навигация.... создаем файлик: block-dieUSA.php в него запишем: <?php



if (eregi("block-dieUSA.php",$_SERVER['PHP_SELF'])) {

Header("Location: index.php");

die();

}

global $db;

if($result = $db->sql_query("SELECT Gos FROM `ip2w_n`

WHERE (`IPFrom` <= ".ip2long($_SERVER['REMOTE_ADDR']).")

AND (".ip2long($_SERVER['REMOTE_ADDR'])."<= `IPTo`)"))

{

while ($row = $db->sql_fetchrow($result)) {

$content = $row['Gos']."тут есть какая-то чтука"; //наеюсь понятно куда писать магические коды для системы =)

}$db->sql_freeresult($result);} else {$content = "запрос не удался!";}

?>

ну вот получилася блок который собственно определяет принадлежность человека к
стране, но забыли совсем про роботов, которые в основном должны приводить клиентов
на сайт, а иначе зачем тогда все это делается?
Но ведь есть довольно простой элемент для проверки роботов, т.к думаю
не все же захотят чтоб их сайт не могли индексировать.

Так теперь модифицируем код для определения присутствия нужного поискового робота:<?php



if (eregi("block-dieUSA.php",$_SERVER['PHP_SELF'])) {

Header("Location: index.php");

die();

}

global $db;

$userag = online_robots(online_skip($_SERVER['HTTP_USER_AGENT']));

if ($userag =="") {

if($result = $db->sql_query("SELECT Gos FROM `ip2w_n` WHERE

(`IPFrom` <= ".sprintf("%u",ip2long($_SERVER['REMOTE_ADDR'])).") AND

(".sprintf("%u",ip2long($_SERVER['REMOTE_ADDR']))."<= `IPTo`)"))

{

while ($row = $db->sql_fetchrow($result)) {

$content = $row['Gos']."";

}$db->sql_freeresult($result);} else {$content = "запрос не удался!";}

} else {$content ="Какой-нибудь ваш добрый контент для робота";}

function online_robots($useragent) {

global $r_or;

$r_or=false;

$remap_agents = array (

'antabot' => 'antabot (private)',

'aport' => 'Aport',

'Ask Jeeves' => 'Ask Jeeves',

'Asterias' => 'Singingfish Spider',

'Baiduspider' => 'Baidu Spider',

'Feedfetcher-Google'=> 'Feedfetcher-Google',

'GameSpyHTTP' => 'GameSpy HTTP',

'GigaBlast' => 'GigaBlast',

'Gigabot' => 'Gigabot',

'Accoona' => 'Google.com',

'Googlebot-Image' => 'Googlebot-Image',

'Googlebot' => 'Googlebot',

'grub-client' => 'Grub',

'gsa-crawler' => 'Google Search Appliance',

'Slurp' => 'Inktomi Spider',

'slurp@inktomi' => 'Hot Bot',

'lycos' => 'Lycos.com',

'whatuseek' => 'What You Seek',

'ia_archiver' => 'Alexa',

'is_archiver' => 'Archive.org',

'archive_org' => 'Archive.org',

'YandexBlog' => 'YandexBlog',

'YandexSomething' => 'YandexSomething',

'Yandex' => 'Yandex',

'StackRambler' => 'Rambler',

'WebAlta Crawler' => 'WebAlta Crawler',

'igdeSpyder' => 'igdeSpyder',

'Yahoo' => 'Yahoo',

'zyborg@looksmart' => 'WiseNut',

'WebCrawler' => 'Fast',

'Openbot' => 'Openfind',

'TurtleScanner' => 'Turtle',

'libwww' => 'Punto',

'msnbot' => 'MSN',

'MnoGoSearch' => 'mnoGoSearch',

'booch' => 'booch_Bot',

'WebZIP' => 'WebZIP',

'GetSmart' => 'GetSmart',

'NaverBot' => 'NaverBot',

'Vampire' => 'Net_Vampire',

'ZipppBot' => 'ZipppBot',

'Begun' => 'Begun Robot Crawler',

'W3C_Validator' => 'W3C Validator',

'W3C_CSS_Validator' => 'W3C CSS Validator',

);

//Список нужных роботов...

$remap_agents=array_change_key_case($remap_agents, CASE_LOWER);

$pmatch_agents="";

foreach ($remap_agents as $k => $v) {

$pmatch_agents.=$k."|";

}

$pmatch_agents=substr_replace($pmatch_agents, '', strlen($pmatch_agents)-1, 1);

if (preg_match( '/('.$pmatch_agents.')/i', $useragent, $match ))

if (count($match)) {

$r_or = @$remap_agents[strtolower($match[1])];

}

return $r_or;

}

function online_skip($text) {

$text=mysql_escape_string($text);

$text=stripslashes($text);

$text = str_replace("'",'`',$text);

$text = str_replace('"','`',$text);

return $text;

}

?>

Ну вот получили блок для определения того, кому показывать, а кому не показывать,
наш текст.

Подобным планом можно подсовывать забугорным ребятам всё, что угодно.
Если отойти от Базы Данных, то можно приспособить естественно функцию и для того,
чтоб сайты своей компании работали на SAPE и LINKFEED, конечно будет немного
нарушение правила размещения ссылок, но все равно на сайте приличной компании
директор смотрит, что находиться на сайте и не даст их размещать =).

Если у сайта маленький тИЦ и PR, то тоже нет смысла иметь скрытые ссылки,
в моей конторе тИЦ - 1800 - не много конечно,
но моим сайтам почему-то дал прирост в 50 тИЦ не ясно почему так много, не волнуйтесь
эти сайты никуда не выкладывал и не кто не знает кто ими правит =)))

ВЫВОДЫ: Поставленная задача была решина в полном объеме и весь драгоценный
забугорный траффик будет перенаправлен на нужную нам страницу.
В принциепе данным методом можно встроить в любую CMS, главное знать метод
формирования. Ну и собственно можно в блок и не встраивать, а в само тело CMS.
Это уже на ваше усмотрение.

Минусми данных действий является то, что ip адреса появляются новые
и время от времени, нужно будет обнавлять данную базу для поддержания ее в
актуальном состоянии.

Сам процесс выборки довольно весомый, время запроса к БД вырастает в 10 раз,
если сайт размещать на платном хостинге, то это не имеет большого смысла так как
для сервера это не будет большой нагрузкой.

В целях малой оптимизации можно удалить из базы Российские, Казахстанские IP адреса.

Как-то странно получается сайты становяться двуличными как люди.....

воскресенье, 20 июля 2008 г.

Оптимизация сайта на движке PHP-Nuke.

Решил выложить оптимизацию нюки или как тренировался на ней, в следствии того что

когда подумал о создании сайта, люди посоветовали: ты что будешь писать сайт сам?

Ну ты дурак, есть же готовые сайты CMS называются, и дали адрес где можно скачать,

это была 8 я русская версия php-nuke. Подумал: что за хрень? И давай искать другие

cms системы. Наткнулся на DLE, mambo, slaed, post-nuke, small-nuke, Joomla.



В историю впадать не буду, ближе к телу. Короче, на тот момент для меня был понятен

довольно простой язык программирования pascal и не более, посмотрев исходные файлы

cms понял, что с классами у меня напряг ничего не понимаю, в литературе довольно

доступно объяснили php - не классовый язык программирования, хотя классы более

менее полноценно ввелись в 4 версии, все сайтики с классами отпали, потом

понял что существует еще так называемая скорость работы сайта или интерпритация

кода сервером, оказалось что www.PHP-nuke.org – самая требовательная к ресурсам,

но было уже поздно, т.к на нее рисовался дизайн, а переделывать уже не

хотелось(вот такое я ленивое дерево). Сейчас конечно многие возразят и скажут:

а 5 ка на что? Ну не доходят руки до классов, если понять их на самом деле все

просто и нету ничего страшного.



Итак, вот что получилось после некоторого времени доработки и прочего извращения.

ЕСЛИ кто-то увидит куски своего кода не обижайтесь и не пинайте ногами,

копирайты ваши поставлю, т.к не помню что от куда брал.


1. Основа: PHPNUKE_80_RUS_291006.zip =) запросов на гостя - 66. Для определения

количства запросов на сайте, делаем довлольно простую вещь: тут типа код <php>

находим любой редактор блокнот тоже подходит, но в нем не удобно смотреть,

много буковок и все сливаются, многие файлы идут *nix форматом соответственно

страдает перенос строк, я пользуюсь PSPAD адрес в интернете : www.pspad.com

качаете русскую версию и удобно смотрите, конечно есть и другие редакторы но

о них сейчас разговора нет (и мега профи с каким-нибудь образованием это читать

не будут посчитая ниже следующее бредом, но сам в свое время искал тупил не мог

в одном месте все найти решил выложить может что кому поможет),

далее, открываем файл footer.php (находиться в корневой

директории сайта, тамже где и mainfile.php, admin.php, modules.php) находи там

function footmsg() и после $total_time = ($end_time - $start_time);

дописываем:



$sqlnums= $db->num_queries;

$all= $db->all_db;

$total_time = ""._PAGEGENERATION." ".substr($total_time,0,5)." Секунд";

$total_time.=' <br>Время запроса к БД: '.$all;



if (file_exists(INCLUDE_PATH."admin/config_rus.php")) {

include(INCLUDE_PATH."admin/config_rus.php");

if ($show_sqlcount==true) {

global $db;

$sqlnums= $db->num_queries;

$total_time .= " и ".$sqlnums." запросов к БД";

}

} // это помоему из очередного коварного релиза на rus-phpnuke.com



в этом же файле находим сроки:

themefooter();

if (file_exists("includes/custom_files/custom_footer.php")) {

include_once("includes/custom_files/custom_footer.php");

}



И после них добавляем:



// Показ запросов, произведенных к БД при формировании страницы

if (file_exists(INCLUDE_PATH."admin/config_rus.php")) {

include(INCLUDE_PATH."admin/config_rus.php");

if ($show_debug==true) {

$sqlqueries=$db->text_queries;

echo "<center><b>Запросы к БД:</b></center><HR><font class=\"content\">

".$sqlqueries."</font>";

echo "<BR>";

}

}





Потом открываем: db/mysql.php, находим там функцию:

function sql_query($query = "", $transaction = FALSE)


заменеяем её на:

function sql_query($query = "", $transaction = FALSE) {// Remove any pre-existing queries

unset($this->query_result); if($query != ""){

$time1 = microtime();

$this->query_result = @mysql_query($query, $this->db_connect_id); $time2 = microtime();

$time3= explode(" ",$time1);

$time4= explode(" ",$time2);

$time_result=(float)$time4[1]-(float)$time3[1]+(float)$time4[0]-(float)$time3[0];

$this->all_db+=$time_result; } if($this->query_result) {

$this->num_queries += 1;

$this->text_queries.="<BR>".$query." $time_result";

unset($this->row[$this->query_result]);

unset($this->rowset[$this->query_result]);

return $this->query_result; } else {

return ( $transaction == END_TRANSACTION ) ? true : false; }}




так теперь самое главное копируем: файлы из папки в корень директории. или создаем свои:

ТУТ ТИПА АРХИВЧИГ. - если нету свойства рус нук ставиться в корень сайта

теперь заходим в админ панель и свойства_rus там ставим что показывать или не показывать.

2. Создаем папку config в корневом каталоге. Теперь превратим один

конфигурационный запрос в файлик (открываем mainfile.php):

Находим строки:

$result = $db->sql_query("SELECT * FROM ".$prefix."_config");

$row = $db->sql_fetchrow($result); $sitename = filter($row['sitename'], "nohtml");

-------- // типа много такихже фильтров.....

$copyright = filter($row['copyright']);

$Version_Num = filter($row['Version_Num'], "nohtml");

Перед $result добавим:

if (!file_exists("cache/global.php")) {


После $Version_Num = filter($row['Version_Num'], "nohtml"); надо поставить:

$content1 = "\$version = \"php-nuke(8.1)\";\n";

$content1 .= "\$sitename = \"$sitename\";\n";

$content1 .= "\$nukeurl = \"$nukeurl\";\n";

$content1 .= "\$site_logo = \"$site_logo\";\n";

$content1 .= "\$slogan = \"$slogan\";\n";

$content1 .= "\$startdate = \"$startdate\";\n";

$content1 .= "\$adminmail = \"$adminmail\";\n";

$content1 .= "\$anonpost = \"$anonpost\";\n";

$content1 .= "\$Default_Theme = \"$Default_Theme\";\n";

$content1 .= "\$overwrite_theme = \"$overwrite_theme\";\n";

$content1 .= "\$foot1 = \"$foot1\";\n";

$content1 .= "\$foot2 = \"$foot2\";\n";

$content1 .= "\$foot3 = \"$foot3\";\n";

$content1 .= "\$commentlimit = \"$commentlimit\";\n";

$content1 .= "\$anonpost = \"$anonpost\";\n";

$content1 .= "\$minpass = \"$minpass\";\n";

$content1 .= "\$pollcomm = \"$pollcomm\";\n";

$content1 .= "\$articlecomm = \"$articlecomm\";\n";

$content1 .= "\$broadcast_msg = \"$broadcast_msg\";\n";

$content1 .= "\$my_headlines = \"$my_headlines\";\n";

$content1 .= "\$top = \"$xtop\";\n";

$content1 .= "\$storyhome = \"$storyhome\";\n";

$content1 .= "\$user_news = \"$user_news\";\n";

$content1 .= "\$oldnum = \"$oldnum\";\n";

$content1 .= "\$ultramode = \"$ultramode\";\n";

$content1 .= "\$banners = \"$banners\";\n";

$content1 .= "\$backend_title = \"$backend_title\";\n";

$content1 .= "\$backend_language = \"$backend_language\";\n";

$content1 .= "\$language = \"$language\";\n";

$content1 .= "\$locale = \"$locale\";\n";

$content1 .= "\$multilingual = \"$multilingual\";\n";

$content1 .= "\$useflags = \"$useflags\";\n";

$content1 .= "\$notify = \"$notify\";\n";

$content1 .= "\$notify_email = \"$notify_email\";\n";

$content1 .= "\$notify_subject = \"$notify_subject\";\n";

$content1 .= "\$notify_message = \"$notify_message\";\n";

$content1 .= "\$notify_from = \"$notify_from\";\n";

$content1 .= "\$moderate = \"$moderate\";\n";

$content1 .= "\$admingraphic = \"$admingraphic\";\n";

$content1 .= "\$httpref = \"$httpref\";\n";

$content1 .= "\$httprefmax = \"$httprefmax\";\n";

$content1 .= "\$httprefmode = \"$httprefmode\";\n";

$content1 .= "\$CensorMode = \"$CensorMode\";\n";

$content1 .= "\$CensorReplace = \"$CensorReplace\";\n";

$content1 .= "\$copyright = \"$copyright\";\n";

$content1 .= "\$Version_Num = \"$Version_Num\";\n";

$fo = fopen("config/global.php", 'w+');

$content1 = "<?php\nif (!defined(\"NUKE_FILE\")) die(\"Illegal File Access\");

\n\n".$content1."\n?>";// - 'эту строку после создания файала можно удалить'

fwrite($fo,$content1);

fclose($fo);

unset($content1);

} else {

include('config/global.php');

}




потом после создания config/global.php можно весь текст поменять на:

include('config/global.php');


получиться:



// Error reporting, to be set in config.php

if($display_errors = 1) {

ini_set('display_errors', 1);

error_reporting(E_ALL^E_NOTICE);

} else {

ini_set('display_errors', 0);

error_reporting(0);

}



define('NUKE_FILE', true);

include('config/global.php');

т.е меняем смело всю колонку на: include('config/global.php');

начинается медленно закрадываться сомнение, что это получается ?

было так много?? А стало одна строчка?! Не одна…

добавляем в конец mainfile.php перед ?> :
function save_conf($fp, $content, $type="") {

if (file_exists($fp) && $content) {

$fp = fopen($fp, "w");

$content = (intval($type)) ? "<?php\nif (!defined(\"ADMIN_FILE\"))

die(\"Illegal File Access\");\n\n".$content."\n ?> " : " <?php\n

if (!defined(\"NUKE_FILE\")) die(\"Illegal File Access\"); \n\n ".$content." \n ?>";

fwrite($fp, $content);

fclose($fp);

}

}



Если попытаетесь проверить и посмотреть что получиться то увидите белый экран,

это нормально, т.к все основные переменные должны быть в файле.

Далее открываем

admin/modules/settings.php и смотрим что там за вата такая,

находим:
$row = $db->sql_fetchrow($db->sql_query("SELECT sitename, nukeurl,

site_logo, slogan, startdate, adminmail, anonpost, Default_Theme, foot1,

foot2, foot3, commentlimit, anonymous, minpass, pollcomm, articlecomm,

broadcast_msg, my_headlines, top, storyhome, user_news, oldnum,

ultramode, banners, backend_title, backend_language, language, locale,

multilingual, useflags, notify, notify_email, notify_subject,

notify_message, notify_from, moderate, admingraphic, httpref,

httprefmax, CensorMode, CensorReplace from ".$prefix."_config"));

$sitename = filter($row['sitename'], "nohtml", 0, preview);

--------------- // куча всяких переменных

$httprefmax = intval($row['httprefmax']);

$CensorMode = intval($row['CensorMode']);

$CensorReplace = filter($row['CensorReplace'], "nohtml");




и все это многообразие меняем на:

include("config/global.php");
находим:

case "ConfigSave":

global $prefix, $db, $admin_file;

до строк:

Header("Location: ".$admin_file.".php?op=Configure");

break;


все что между этими строками меняем на:

$content = "\$version = \"php-nuke(8.1)\";\n";

$content .= "\$sitename = \"$xsitename\";\n";

$content .= "\$nukeurl = \"$xnukeurl\";\n";

$content .= "\$site_logo = \"$xsite_logo\";\n";

$content .= "\$slogan = \"$xslogan\";\n";

$content .= "\$startdate = \"$xstartdate\";\n";

$content .= "\$adminmail = \"$xadminmail\";\n";

$content .= "\$anonpost = \"$xanonpost\";\n";

$content .= "\$Default_Theme = \"$xDefault_Theme\";\n";

$content .= "\$overwrite_theme = \"$xoverwrite_theme\";\n";

$content .= "\$foot1 = \"$xfoot1\";\n";

$content .= "\$foot2 = \"$xfoot2\";\n";

$content .= "\$foot3 = \"$xfoot3\";\n";

$content .= "\$commentlimit = \"$xcommentlimit\";\n";

$content .= "\$anonpost = \"$xanonpost\";\n";

$content .= "\$minpass = \"$xminpass\";\n";

$content .= "\$pollcomm = \"$xpollcomm\";\n";

$content .= "\$articlecomm = \"$xarticlecomm\";\n";

$content .= "\$broadcast_msg = \"$xbroadcast_msg\";\n";

$content .= "\$my_headlines = \"$xmy_headlines\";\n";

$content .= "\$top = \"$xtop\";\n";

$content .= "\$storyhome = \"$xstoryhome\";\n";

$content .= "\$user_news = \"$xuser_news\";\n";

$content .= "\$oldnum = \"$xoldnum\";\n";

$content .= "\$ultramode = \"$xultramode\";\n";

$content .= "\$banners = \"$xbanners\";\n";

$content .= "\$backend_title = \"$xbackend_title\";\n";

$content .= "\$backend_language = \"$xbackend_language\";\n";

$content .= "\$language = \"$xlanguage\";\n";

$content .= "\$locale = \"$xlocale\";\n";

$content .= "\$multilingual = \"$xmultilingual\";\n";

$content .= "\$useflags = \"$xuseflags\";\n";

$content .= "\$notify = \"$xnotify\";\n";

$content .= "\$notify_email = \"$xnotify_email\";\n";

$content .= "\$notify_subject = \"$xnotify_subject\";\n";

$content .= "\$notify_message = \"$xnotify_message\";\n";

$content .= "\$notify_from = \"$xnotify_from\";\n";

$content .= "\$moderate = \"$xmoderate\";\n";

$content .= "\$admingraphic = \"$xadmingraphic\";\n";

$content .= "\$httpref = \"$xhttpref\";\n";

$content .= "\$httprefmax = \"$xhttprefmax\";\n";

$content .= "\$httprefmode = \"$xhttprefmode\";\n";

$content .= "\$CensorMode = \"$xCensorMode\";\n";

$content .= "\$CensorReplace = \"$xCensorReplace\";\n";

$content .= "\$copyright = \"$xcopyright\";\n";

$content .= "\$Version_Num = \"$xVersion_Num\";\n";

save_conf("config/global.php", $content);




3. Ну теперь наверное самое простое =).

избавимся от счетчика,который находиться внутри портала, поразмыслив можно понять

что на свете существует множество серверов со статистикой: рамблер топ, лайфинтернет,

маил, и.д и.п....

открываем файл header.php и комментируем строку: include("includes/counter.php");

4. Модифицируем функцию слежения за пользователем, типа кто присутствует на сайте

и в каком количестве.не будем те адреса котоые ни как не определются.

Находим функцию:

function online() {

global $user, $prefix, $db, $userinfo;

$ip = $_SERVER["REMOTE_ADDR"];

$guest = 0;

$uname = $userinfo['username'];

if (!$uname) {

$uname = "$ip";

$guest = 1;

}

$past = time()-300;

$db->sql_query("DELETE FROM ".$prefix."_session WHERE time < '$past' OR uname='".addslashes($uname)."'");

$ctime = time();

if ($uname!="") {

$uname = substr("$uname", 0,25);

$db->sql_query("INSERT INTO ".$prefix."_session (uname, time, host_addr, guest)

VALUES ('$uname', '$ctime', '$ip', '$guest')");

} $db->sql_freeresult($result);

}

меякм на:

function ip(){

if( getenv('REMOTE_ADDR'))

{$user_ip = getenv('REMOTE_ADDR');}

elseif( getenv('HTTP_FORWARDED_FOR'))

{$user_ip = getenv('HTTP_FORWARDED_FOR');}

elseif( getenv('HTTP_X_FORWARDED_FOR'))

{$user_ip = getenv('HTTP_X_FORWARDED_FOR');}

elseif( getenv('HTTP_X_COMING_FROM'))

{$user_ip = getenv('HTTP_X_COMING_FROM');}

elseif( getenv('HTTP_VIA'))

{$user_ip = getenv('HTTP_VIA');}

elseif( getenv('HTTP_XROXY_CONNECTION'))

{$user_ip = getenv('HTTP_XROXY_CONNECTION');}

elseif( getenv('HTTP_CLIENT_IP'))

{$user_ip = getenv('HTTP_CLIENT_IP');}

else{$user_ip='unknown';}

if(15 < strlen($user_ip)){

$ar = split(', ', $user_ip);

for($i=sizeof($ar)-1; $i > 0; $i--){

if($ar[$i]!='' and !preg_match('/[a-zA-Zа-яА-Я]/', $ar[$i]))

{$user_ip = $ar[$i];

break;

}

if($i==sizeof($ar)-1){$user_ip = 'unknown';}

}

}

if(preg_match('/[a-zA-Zа-яА-Я]/', $user_ip)){$user_ip = 'unknown';}

return $user_ip;

}



function online() {

global $user, $prefix, $db, $userinfo;

$ip = ip();

$guest = 0;

$uname = $userinfo['username'];

if (!$uname) {

$uname = "$ip";

$guest = 1;

}

$past = time()-300;

$db->sql_query("DELETE FROM ".$prefix."_session WHERE time < '$past' OR uname='"

.addslashes($uname)."'");

$ctime = time();

if ($uname!="") {

$uname = substr("$uname", 0,25);

$db->sql_query("INSERT INTO ".$prefix."_session (uname, time, host_addr, guest)

VALUES ('$uname', '$ctime', '$ip', '$guest')");

} $db->sql_freeresult($result);

}

5.Оптимизируем функцию блоков чтоб был 1 запрос

Открываем mainfile.php находим:

function blocks($side) {

global $storynum, $prefix, $multilingual, $currentlang, $db, $admin, $user;

if ($multilingual == 1) {

$querylang = "AND (blanguage='$currentlang' OR blanguage='')";

} else {

$querylang = "";

}

if (strtolower($side[0]) == "l") {

$pos = "l";

} elseif (strtolower($side[0]) == "r") {

$pos = "r";

} elseif (strtolower($side[0]) == "c") {

$pos = "c";

} elseif (strtolower($side[0]) == "d") {

$pos = "d";

}

$side = $pos;

$sql = "SELECT bid, bkey, title, content, url, blockfile, view,

expire, action, subscription FROM ".$prefix."_blocks

WHERE bposition='$pos' AND active='1' $querylang ORDER BY weight ASC";

$result = $db->sql_query($sql);

while($row = $db->sql_fetchrow($result)) {

$bid = intval($row['bid']);

$title = filter($row['title'], "nohtml");

$content = $row['content'];

$url = filter($row['url'], "nohtml");

$blockfile = filter($row['blockfile'], "nohtml");

$view = intval($row['view']);

$expire = intval($row['expire']);

$action = filter($row['action'], "nohtml");

$action = substr($action, 0,1);

$now = time();

$sub = intval($row['subscription']);

if ($sub == 0 OR ($sub == 1 AND !paid())) {

if ($expire != 0 AND $expire <= $now) {

if ($action == "d") {

$db->sql_query("UPDATE ".$prefix."_blocks SET active='0', expire='0'

WHERE bid='$bid'");

return;

} elseif ($action == "r") {

$db->sql_query("DELETE FROM ".$prefix."_blocks WHERE bid='$bid'");

return;

}

}

if ($row['bkey'] == "admin") {

adminblock();

} elseif ($row['bkey'] == "userbox") {

userblock();

} elseif (empty($row['bkey'])) {

if ($view == 0) {

render_blocks($side, $blockfile, $title, $content, $bid, $url);

} elseif ($view == 1 AND is_user($user) || is_admin($admin)) {

render_blocks($side, $blockfile, $title, $content, $bid, $url);

} elseif ($view == 2 AND is_admin($admin)) {

render_blocks($side, $blockfile, $title, $content, $bid, $url);

} elseif ($view == 3 AND !is_user($user) || is_admin($admin)) {

render_blocks($side, $blockfile, $title, $content, $bid, $url);

}

}

}

}

$db->sql_freeresult($result);

}

И польностью её меняем на код который описан ниже.

function crblocks() {

global $db,$prefix,$tableblocks;

$block_info = array();

$sql = "SELECT bid, bkey, title, content, url, blockfile, time, refresh,

view, expire, action, subscription, bposition FROM ".$prefix."_blocks

WHERE active='1' ORDER BY bposition, weight ASC";

$result = $db->sql_query($sql);



while($row = $db->sql_fetchrow($result)) {

// $refresh2 ="";

// $time2 ="";

$bid = intval($row['bid']);

$bkey = filter($row['bkey'], "nohtml");

$title = reg_ex($row['title']);

$content = stripslashes($row['content']);

$url = reg_ex($row['url']);

$blockfile = reg_ex($row['blockfile']);

$view = intval($row['view']);

$expire = intval($row['expire']);

$action = reg_ex($row['action']);

$action = substr($action, 0,1);

$refresh2 = reg_ex($row['refresh']);

$time2 = reg_ex($row['time']);

$now = time();

$sub = intval($row['subscription']);

$side = reg_ex($row['bposition']);

$block_info[] = array('bid'=>$bid, 'bkey'=>$bkey, 'title'=>$title,

'content'=>$content, 'url'=>$url, 'blockfile'=>$blockfile, 'view'=>$view,

'expire'=>$expire, 'action'=>$action, 'subscription'=>$sub,

'refresh'=>$refresh2, 'time'=>$time2, 'side'=>$side);



} $tableblocks = $block_info;

// print_r(array_change_key_case($tableblocks, CASE_UPPER));

$db->sql_freeresult($result);

//die();

}

function blocks($side) {

global $storynum, $prefix, $currentlang, $db, $admin, $user, $tableblocks;

foreach($tableblocks as $v1) {

$side2[0] = strtolower($v1['side']);

$side[0] = strtolower($side);

if ($side2[0] == "$side[0]") {

if (strtolower($side[0]) == "l") {

$pos = "l";

} elseif (strtolower($side[0]) == "r") {

$pos = "r";

} elseif (strtolower($side[0]) == "c") {

$pos = "c";

} elseif (strtolower($side[0]) == "d") {

$pos = "d";

}

$side = $pos;

if ($sub == 0 OR ($sub == 1 AND !paid())) {

if ($expire != 0 AND $expire <= $now) {

if ($v1['action'] == "d") {

$db->sql_query("UPDATE ".$prefix."_blocks SET active='0', expire='0' WHERE bid='$v1[bid]'");

return;

} elseif ($action == "r") {

$db->sql_query("DELETE FROM ".$prefix."_blocks WHERE bid='$v1[bid]'");

return;

}

}

if ($v1['bkey'] == "admin") {

adminblock();

} elseif ($v1['bkey'] == "userbox") {

userblock();

} elseif (empty($v1['bkey'])) {

if ($v1['view'] == 0) {

render_blocks($v1['side'], $v1['blockfile'], $v1['title'], $v1['content'],

$v1['bid'], $v1['url'], $v1['block_info']);

} elseif ($v1['view'] == 1 AND is_user($user) || is_admin($admin)) {

render_blocks($v1['side'], $v1['blockfile'], $v1['title'], $v1['content'],

$v1['bid'], $v1['url'], $v1['block_info']);

} elseif ($v1['view'] == 2 AND is_admin($admin)) {

render_blocks($v1['side'], $v1['blockfile'], $v1['title'], $v1['content'],

$v1['bid'], $v1['url'], $v1['block_info']);

} elseif ($v1['view'] == 3 AND !is_user($user) || is_admin($admin)) {

render_blocks($v1['side'], $v1['blockfile'], $v1['title'], $v1['content'],

$v1['bid'], $v1['url'], $v1['block_info']);

}



}

}

}

}

}

В том же файле(mainfile.php) после $start_time = $mtime; добавляем

crblocks();

В замен стандартной функции очистки переменных от лишних данных в самый конец

mainfile.php перед ?> добавим:

function reg_ex($str) {

$search = array ("'<script[^>]*?>.*?</script>'si", // Вырезает javaScript

"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги

"'([\r\n])[\s]+'", // Вырезает пробельные символы

"'&(quot|#34);'i", // Заменяет HTML-сущности

"'&(amp|#38);'i",

"'&(lt|#60);'i",

"'&(gt|#62);'i",

"'&(nbsp|#160);'i",

"'&(iexcl|#161);'i",

"'&(cent|#162);'i",

"'&(pound|#163);'i",

"'&(copy|#169);'i",

"'&#(\d+);'e"); // интерпретировать как php-код



$replace = array ("",

"",

"\\1",

"\"",

"&",

"<",

">",

" ",

chr(161),

chr(162),

chr(163),

chr(169),

"chr(\\1)");



$str = preg_replace($search, $replace, $str);

return $str;

}

6. теперь займемся скоростью работы системы в целом и фильтрацией,

фильтры написаны так что сами заставлябт тупить всю систему

т.к в основном вся фильтрация

идет через функцию fileter модифицируем и её.... для это находим её:

function filter($what, $strip="", $save="", $type="") {

if ($strip == "nohtml") {

$what = check_html($what, $strip);

// $what = htmlentities(trim($what), ENT_QUOTES);

// If the variable $what doesn't comes from a preview screen should be converted

if ($type != "preview" AND $save != 1) {

$what = html_entity_decode($what, ENT_QUOTES);

}

}

if ($save == 1) {

$what = check_words($what);

$what = check_html($what, $strip);

$what = addslashes($what);

} else {

$what = stripslashes(FixQuotes($what,$strip));

$what = check_words($what);

$what = check_html($what, $strip);

}

return($what);

}

ПРиводим функцию к виду:

function filter($what, $strip="", $save="", $type="") {

if ($strip == "nohtml") {

$what = reg_ex($what);

$what = htmlspecialchars(trim($what), ENT_QUOTES, 'cp1251');

// If the variable $what doesn't comes from a preview screen should be converted

if ($type != "preview" AND $save != 1) {

$what = html_entity_decode($what, ENT_QUOTES);

}

}

if ($save == 1) {

$what = check_words($what);

$what = check_html($what, $strip);

$what = addslashes($what);

} else {

$what = stripslashes(FixQuotes($what,$strip));

$what = check_words($what);

$what = check_html($what, $strip);

}

return($what);

}

после строк:

unset($matches);

unset($loc);

if(isset($_SERVER['QUERY_STRING'])) {

if (preg_match("/([OdWo5NIbpuU4V2iJT0n]{5}) /", rawurldecode($loc=$_SERVER['QUERY_STRING']),

$matches)) {

die('Illegal Operation');

}

}




Надо добавить(для того, чтоб если на php выключено добавлние слешей к ",

это делал сам двигатель):

if (!get_magic_quotes_gpc()) {

function add_slashes($value) {

if (is_array($value)) {

$value = array_map("add_slashes", $value);

} elseif (!empty($value) && is_string($value)) {

$value = addslashes($value);

}

return $value;

}

$_GET = add_slashes($_GET);

$_POST = add_slashes($_POST);

$_COOKIE = add_slashes($_COOKIE);

$_REQUEST = add_slashes($_REQUEST);

}

Далее находим эти строчки в том же файле:

if (!defined('ADMIN_FILE')) {

foreach ($_GET as $sec_key => $secvalue) {

if ((eregi("<[^>]*script*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*object*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*iframe*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*applet*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*meta*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*style*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*form*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*img*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*onmouseover*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*body*\"?[^>]*>", $secvalue)) ||

(eregi("\([^>]*\"?[^)]*\)", $secvalue)) ||

(eregi("\"", $secvalue)) ||

(eregi("inside_mod", $sec_key))) {

die ($htmltags);

}

}

foreach ($_POST as $secvalue) {

if ((eregi("<[^>]*onmouseover*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]script*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]*body*\"?[^>]*>", $secvalue)) ||

(eregi("<[^>]style*\"?[^>]*>", $secvalue))) {

die ($htmltags);

}

}

}

За менсто них ставим эти:

if (!defined('ADMIN_FILE')) {

foreach ($_GET as $var_name=>$var_value) {

if (preg_match("/<.*?(script|body|object|iframe|applet|meta|style|form|img|onmouseover).*?>/i",

urldecode($var_value)) || preg_match("/\([^>]*\"?[^)]*\)/", $var_value) ||

preg_match("/\"|\'/", $var_value)) die("HTML in GET - ".$var_name." = ". $var_value."");

if (preg_match("/^(http\:\/\/|ftp\:\/\/|\/\/|https:\/\/|php:\/\/|\/\/)/i", $var_value))

die("URL in GET - ".$var_name." = ". $var_value);

$security_string = "/UNION|OUTFILE|SELECT|ALTER|INSERT|DROP|".$prefix."_admins|".$prefix."_users|ModAdmin|SaveAdmin|EditAdmin|DelAdmin/i";

$security_decode = base64_decode($var_value);

if (preg_match($security_string, $security_decode))

die("Hack base64 in GET - ".$var_name." = ". $var_value."");

if (preg_match($security_string, $var_value)) die("Hack in GET - ".$var_name." = ". $var_value."");

$security_slash = preg_replace("/\/\*.*?\*\//", "", $var_value);

if (preg_match($security_string, $security_slash)) die("Hack in GET - ".$var_name." = ". $var_value."");

}

foreach ($_POST as $var_name=>$var_value) {

if (preg_match("/<.*?(script|body|object|iframe|applet|meta|style|form|onmouseover).*?>/i", urldecode($var_value)))

die("HTML in POST - ".$var_name." = ". $var_value."");

if (preg_match("/^(http\:\/\/|ftp\:\/\/|\/\/|https:\/\/|php:\/\/|\/\/)/i", $var_value))

die("URL in POST - ".$var_name." = ". $var_value);

$security_string = "/UNION|OUTFILE|SELECT|ALTER|INSERT|DROP|".$prefix."_admins|".$prefix."_users|ModAdmin|SaveAdmin|EditAdmin|DelAdmin/i";

$security_decode = base64_decode($var_value);

if (preg_match($security_string, $security_decode))

die("Hack base64 in POST - ".$var_name." = ". $var_value."");

if (preg_match($security_string, $var_value))

die("Hack in POST - ".$var_name." = ". $var_value."");

$security_slash = preg_replace("/\/\*.*?\*\//", "", $var_value);

if (preg_match($security_string, $security_slash))

die("Hack in POST - ".$var_name." = ". $var_value."");

}

}



foreach ($_COOKIE as $var_name=>$var_value) {

if (preg_match("/<.*?(script|body|object|iframe|applet|meta|style|form|img|onmouseover).*?>/i",

$var_value)) die("Hack in COOKIE - ".$var_name." = ". $var_value."");

if (preg_match("/^(http\:\/\/|ftp\:\/\/|\/\/|https:\/\/|php:\/\/|\/\/)/i", $var_value))

die("Hack in COOKIE - ".$var_name." = ". $var_value);

$security_string = "/UNION|OUTFILE|SELECT|ALTER|INSERT|DROP|FROM|WHERE|UPDATE|".$prefix."_admins|"

.$prefix."_users|ModAdmin|SaveAdmin|EditAdmin|DelAdmin/i";

$security_decode = base64_decode($var_value);

if (preg_match($security_string, $security_decode)) die("Hack base64 in COOKIE - ".$var_name." = ". $var_value."");

if (preg_match($security_string, $var_value)) die("Hack in COOKIE - ".$var_name." = ". $var_value."");

$security_slash = preg_replace("/\/\*.*?\*\//", "", $var_value);

if (preg_match($security_string, $security_slash)) die("Hack in COOKIE - ".$var_name." = ". $var_value."");

}



reset($_GET);

reset($_POST);

reset($_COOKIE);

//если кому потребуется можне репроты отослать т.е различные записи, отправка данных об адресах,

имен, кто ломитсья....

7 теперь убирем запрос отвечающий за главную страницу.

открваем admin/modules/modules.php, находим строки:

находим:

echo "<br>";

OpenTable();

echo "<br><center><font class=\"option\">" . _MODULESADDONS . "</font><br><br>"

."<font class=\"content\">" . _MODULESACTIVATION . "</font><br><br>"

."" . _MODULEHOMENOTE . "<br><br>" . _NOTINMENU . "<br><br>"

."<form action=\"".$admin_file.".php\" method=\"post\">"

."<table border=\"1\" align=\"center\" width=\"90%\"><tr><td align=\"center\" bgcolor=\"$bgcolor2\">"

."<b>"._TITLE."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._CUSTOMTITLE."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._STATUS."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._VIEW."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._GROUP."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._FUNCTIONS."</b></td></tr>";

$main_m = $db->sql_fetchrow($db->sql_query("SELECT main_module from " . $prefix . "_main"));

$main_module = $main_m['main_module'];

Меняем на:

echo "<br>";

OpenTable();

echo "<br><center><font class=\"option\">" . _MODULESADDONS . "</font><br><br>"

."<font class=\"content\">" . _MODULESACTIVATION . "</font><br><br>"

."" . _MODULEHOMENOTE . "<br><br>" . _NOTINMENU . "<br><br>"

."<form action=\"".$admin_file.".php\" method=\"post\">"

."<table border=\"1\" align=\"center\" width=\"90%\"><tr><td align=\"center\" bgcolor=\"$bgcolor2\">"

."<b>"._TITLE."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._CUSTOMTITLE."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._STATUS."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._VIEW."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._GROUP."</b></td><td align=\"center\" bgcolor=\"$bgcolor2\">

<b>"._FUNCTIONS."</b></td></tr>";

include('config/module_main.php');

находим:

function home_module($mid, $ok=0) {

global $prefix, $db, $admin_file;

$mid = intval($mid);

if ($ok == 0) {

include ("header.php");

GraphicAdmin();

title("" . _HOMECONFIG . "");

OpenTable();

$row = $db->sql_fetchrow($db->sql_query("SELECT title from " . $prefix . "_modules where mid='$mid'"));

$new_m = filter($row['title'], "nohtml");


удаляем запрос $row2 = $db->sql_fetchrow($db->sql_query("SELECT main_module from " . $prefix . "_main"));

за место него: include('config/module_main.php');

находим:$old_m = filter($row2['main_module'], "nohtml");

заменяем его на: $old_m = filter($main_module, "nohtml");

находим строки:

$row3 = $db->sql_fetchrow($db->sql_query("SELECT title from " . $prefix . "_modules where mid='$mid'"));

$title = filter($row3['title'], "nohtml", 1);

$active = 1;

$view = 0;

$res = $db->sql_query("update " . $prefix . "_main set main_module='$title'");

$res2 = $db->sql_query("update " . $prefix . "_modules set active='$active', view='$view' where mid='$mid'");

Header("Location: ".$admin_file.".php?op=modules");
Их меняем на:

$row3 = $db->sql_fetchrow($db->sql_query("SELECT title from " . $prefix . "_modules where mid='$mid'"));

$title = filter($row3['title'], "nohtml", 1);

$active = 1;

$view = 0;

$content = "\$main_module = \"$title\";\n";

save_conf("config/module_main.php", $content);

$res2 = $db->sql_query("update " . $prefix . "_modules set active='$active', view='$view' where mid='$mid'");

Header("Location: ".$admin_file.".php?op=modules");

Находим:

function module_edit($mid) {

global $prefix, $db, $admin_file;

$main_m = $db->sql_fetchrow($db->sql_query("SELECT main_module from " . $prefix . "_main"));

$main_module = $main_m['main_module'];


Меняем:

function module_edit($mid) {

global $prefix, $db, $admin_file;

include('config/module_main.php');

Открываем файл index.php в корне директории, находим:
$modpath = '';

define('MODULE_FILE', true);

$_SERVER['PHP_SELF'] = "modules.php";

$row = $db->sql_fetchrow($db->sql_query("SELECT main_module from ".$prefix."_main"));

$name = $row['main_module'];

define('HOME_FILE', true);
Заменяем на:

$modpath = '';

define('MODULE_FILE', true);

$_SERVER['PHP_SELF'] = "modules.php";

//$row = $db->sql_fetchrow($db->sql_query("SELECT main_module from ".$prefix."_main"));

include('config/module_main.php');

$name = $main_module;

define('HOME_FILE', true);

теперь в каталоге config создаем файл: module_main.php, при обнавлении страницы будет ошибка,

но после захода в настройку установки стартового модуля, после его сохранения ошибки уйдут.

8. Нужно поработить главное зло системы это вездесуший блок модули.

открываем файл blocks/block-modules.php и меняем его содержимое на это:

<?php

if(!defined('NUKE_FILE')) die('Block wrong call: '.$_SERVER['PHP_SELF']);

global $prefix, $db, $admin, $sape, $sapelink4;

include('config/module_main.php');

$ThemeSel = get_theme();

if (file_exists("themes/$ThemeSel/module.php")) {

include("themes/$ThemeSel/module.php");

if (is_active("$default_module") AND file_exists("modules/$default_module/index.php")) {

$def_module = $default_module;

} else {

$def_module = "";

}

}

if (is_admin($admin)) {

$result2 = $db->sql_query("SELECT title FROM " . $prefix . "_modules");

while ($row2 = $db->sql_fetchrow($result2)) {

$title = stripslashes($row2['title']);

$a = 0;

$handle=opendir('modules');

while ($file = readdir($handle)) {

if ($file == $title) {

$a = 1;

}

}

closedir($handle);

if ($a == 0) {

$db->sql_query("DELETE FROM ".$prefix."_modules WHERE title='$title'");

}

}

}

$content .= "<br/><a href=\"/\"><b>"._HOME."</b></a><br/>";

$result3 = $db->sql_query("SELECT title, custom_title, view FROM " . $prefix . "_modules

WHERE active='1' AND title!='$def_module' AND inmenu='1' ORDER BY custom_title ASC");

while ($row3 = $db->sql_fetchrow($result3)) {

$m_title = stripslashes($row3['title']);

$custom_title = $row3['custom_title'];

$view = intval($row3['view']);

$m_title2 = ereg_replace("_", " ", $m_title);

if ($custom_title != "") {

$m_title2 = $custom_title;

}

if ($m_title != $main_module) {

if ((is_admin($admin) AND $view == 2) OR $view != 2) {

$content .= "<a href=\"modules.php?name=$m_title\" title=\"".$m_title2." \"><b>$m_title2</b></a><br/>";

}

}

}

$content .= "";

if (is_admin($admin)) {

$handle=opendir('modules');

while ($file = readdir($handle)) {

if ( (!ereg("[.]",$file)) ) {

$modlist .= "$file ";

}

}

closedir($handle);

$modlist = explode(" ", $modlist);

sort($modlist);

unset($temp);

$srow4="select title, mid from ".$prefix."_modules";

$res4=$db->sql_query($srow4);

unset($row44);unset($row4);

$row44=array();

while( $row4=$db->sql_fetchrow($res4)) {

$row44[]=$row4[0];

}



$row444=array();

$row444=array_diff($modlist,$row44);

if(!empty($row444))

foreach ($row444 as $k=>$v) {

$mod_uname=str_replace("_"," ",$v);

$db->sql_query("INSERT INTO ".$prefix."_modules VALUES (NULL, '$v', '$mod_uname', '0', '0', '1', '0','')");

}

$content .= "<br><center><b>"._INVISIBLEMODULES."</b><br>";

$content .= "<font class=\"tiny\">"._ACTIVEBUTNOTSEE."</font></center><br>";

$result5 = $db->sql_query("SELECT title, custom_title FROM ".$prefix."_modules

WHERE active='1' AND inmenu='0' ORDER BY title ASC");

while ($row5 = $db->sql_fetchrow($result5)) {

$mn_title = stripslashes($row5['title']);

$custom_title = $row5['custom_title'];

$mn_title2 = ereg_replace("_", " ", $mn_title);

if ($custom_title != "") {

$mn_title2 = $custom_title;

}

if ($mn_title2 != "") {

$content .= "<strong><big>&middot;</big></strong>&nbsp;<a href=\"modules.php?name=$mn_title\">$mn_title2</a><br>\n";

$dummy = 1;

} else {

$a = 1;

}

}

if ($a == 1 AND $dummy != 1) {

$content .= "<strong><big>&middot;</big></strong>&nbsp;<i>"._NONE."</i><br>\n";

}

$content .= "<br><center><b>"._NOACTIVEMODULES."</b><br>";

$content .= "<font class=\"tiny\">"._FORADMINTESTS."</font></center><br>";

$result6 = $db->sql_query("SELECT title, custom_title FROM ".$prefix."_modules



WHERE active='0' ORDER BY title ASC");

while ($row6 = $db->sql_fetchrow($result6)) {

$mn_title = stripslashes($row6['title']);

$custom_title = $row6['custom_title'];

$mn_title2 = ereg_replace("_", " ", $mn_title);

if ($custom_title != "") {

$mn_title2 = $custom_title;

}

if ($mn_title2 != "") {

$content .= "<strong><big>&middot;</big></strong>&nbsp;<a href=\"modules.php?name=$mn_title\">$mn_title2</a><br>\n";

$dummy = 1;

} else {

$a = 1;

}

}

if ($a == 1 AND $dummy != 1) {

$content .= "<strong><big>&middot;</big></strong>&nbsp;<i>"._NONE."</i><br>\n";

}

}

ob_start();

$content .= ob_get_contents();

ob_end_clean();

?>

Промежуточные результаты в режиме гостя имее 51 запрос на главной странице и

время генерации страницы уменьшенное в 5 раз, при стандартных новстях,

голосовании, и + еще какие-то 3 блока. Теперь делаем супер магический ход, отключаем

блок с голосованием, и что мы видим? О чудо! при госте у нас оказывеися 24 запроса! =)



Итак продолжим, теперь перейдем к пользователям:

находим в файле mainfile.php:

function is_admin($admin) {

global $prefix, $db;

if(!is_array($admin)) {

$admin = base64_decode($admin);

$admin = addslashes($admin);

$admin = explode(":", $admin);

$aid = addslashes($admin[0]);

$pwd = "$admin[1]";

} else {

$aid = addslashes($admin[0]);

$pwd = "$admin[1]";

}

if ($aid != "" AND $pwd != "") {

$aid = substr("$aid", 0,25);

$result = $db->sql_query("SELECT pwd FROM ".$prefix."_authors WHERE aid='$aid'");

$row = $db->sql_fetchrow($result);

$pass = $row['pwd'];

if($pass == $pwd && $pass != "") {

return 1;

}

}

return 0;

}

function is_user($user) {

global $prefix, $db, $user_prefix;

if(!is_array($user)) {

$user = base64_decode($user);

$user = addslashes($user);

$user = explode(":", $user);

$uid = "$user[0]";

$pwd = "$user[2]";

} else {

$uid = "$user[0]";

$pwd = "$user[2]";

}

$uid = addslashes($uid);

$uid = intval($uid);

if ($uid != "" AND $pwd != "") {

$result = $db->sql_query("SELECT user_password FROM ".$user_prefix."_users WHERE user_id='$uid'");

$row = $db->sql_fetchrow($result);

$pass = $row['user_password'];

if($pass == $pwd && $pass != "") {

return 1;

}

}

return 0;

}

function is_group($user, $name) {

global $prefix, $db, $user_prefix;

if(!is_array($user)) {

$user = base64_decode($user);

$user = addslashes($user);

$user = explode(":", $user);

$uid = "$user[0]";

$pwd = "$user[2]";

} else {

$uid = "$user[0]";

$uid = intval($uid);

$pwd = "$user[2]";

}

if ($uid != "" AND $pwd != "") {

$result = $db->sql_query("SELECT user_password FROM ".$user_prefix."_users WHERE user_id='$uid'");

$row = $db->sql_fetchrow($result);

$pass = $row['user_password'];

if($pass == $pwd && $pass != "") {

$result2 = $db->sql_query("SELECT points FROM ".$user_prefix."_users WHERE user_id='$uid'");

$row2 = $db->sql_fetchrow($result2);

$points = intval($row2['points']);

$result3 = $db->sql_query("SELECT mod_group FROM ".$prefix."_modules WHERE title='$name'");

$row3 = $db->sql_fetchrow($result3);

$mod_group = $row3['mod_group'];

$result4 = $db->sql_query("SELECT points FROM ".$prefix."_groups WHERE id='$mod_group'");

$row4 = $db->sql_fetchrow($result4);

$grp = intval($row4['points']);

if (($points >= 0 AND $points >= $grp) OR $mod_group == 0) {

return 1;

}

}

}

return 0;

}

Все счастие заменяем на:

function is_admin($admin) {

global $prefix, $db;

if(defined("ADMIN_SET")) return true;

elseif(defined("NOT_ADMIN_SET")) return false;

else{

if(!is_array($admin)) {

$admin = base64_decode($admin);

$admin = addslashes($admin);

$admin = explode(":", $admin);

$aid = addslashes($admin[0]);

$pwd = "$admin[1]";

} else {

$aid = addslashes($admin[0]);

$pwd = "$admin[1]";

}

if ($aid != "" AND $pwd != "") {

$aid = substr("$aid", 0,25);

$result = $db->sql_query("SELECT pwd FROM ".$prefix."_authors WHERE aid='$aid'");

$row = $db->sql_fetchrow($result);

$pass = $row['pwd'];

if($pass == $pwd && $pass != "") {

define("ADMIN_SET", true);

return true;

}

}

define("NOT_ADMIN_SET", true);

return false;

}

}



if(!defined("USER_SET") and !defined("NOT_USER_SET") and $user){

if(!is_array($user)) {

$user_main = base64_decode($user);

$user_main = addslashes($user_main);

$user_main = explode(":", $user_main);

$uid_main = "$user_main[0]";

$pwd_main = "$user_main[2]";

} else {

$uid_main = "$user[0]";

$pwd_main = "$user[2]";

}

$uid_main = addslashes($uid_main);

$uid_main = intval($uid_main);

if ($uid_main != "" AND $pwd_main != "") {

$result_main = $db->sql_query("SELECT * FROM ".$user_prefix."_users WHERE user_id='$uid_main' LIMIT 1");

$userinfo = $db->sql_fetchrow($result_main);

$pass_main = $userinfo['user_password'];

if($pass_main == $pwd_main && $pass_main != "") {

define("USER_SET", true);

}else{

define("NOT_USER_SET", true);

}

}else{

define("NOT_USER_SET", true);

}

}elseif(!defined("USER_SET") and !defined("NOT_USER_SET") and !$user){

define("NOT_USER_SET", true);

}

function is_user($user) {

if(defined("USER_SET")) return true;

if(defined("NOT_USER_SET")) return false;

}

function is_group($user, $name) {

global $prefix, $db, $userinfo, $group_use;

if (is_user($user) and $group_use==1) {

$result = $db->sql_query("SELECT m.mod_group, g.points FROM ".$prefix."_modules AS m LEFT JOIN ".$prefix."_groups AS g ON(g.id=m.mod_group) WHERE m.title='".addslashes($name)."' LIMIT 1");

$group_info = $db->sql_fetchrow($result);

$points = intval($userinfo['points']);

$mod_group = intval($group_info['mod_group']);

$grp = intval($group_info['points']);

if (($points >= 0 AND $points >= $grp) OR $mod_group == 0) {

return 1;

}

}elseif($group_use==0) return 1;

return 0;

}
Получили довольно быстрый способ получения информации является ся ли пользователь пользователем =)

теперь собственно блок пользователя, находим:

function userblock() {

global $user, $cookie, $db, $user_prefix;

if((is_user($user)) AND ($cookie[8])) {

$sql = "SELECT ublock FROM ".$user_prefix."_users WHERE user_id='$cookie[0]'";

$result = $db->sql_query($sql);

$row = $db->sql_fetchrow($result);

$title = ""._MENUFOR." $cookie[1]";

themesidebox($title, $row[ublock]);

}

}

И меняем это за счет полученной переменно в $userinfo

function userblock() {

global $user, $userinfo;

if(is_user($user) and $userinfo['ublockon']==1) {

$title = ""._MENUFOR." ".$userinfo['username'];

themesidebox($title, $userinfo['ublock']);

}

}
Немного поменяем систему работы с банерамы, а то надоело что поисковики говорят,

что баннер отстой, да и сделаю прямые ссылки =) людям не плохи и мне не плохо, зато

подстчет работает без ущерба....



Находим:
function ads($position)

и меняем всю на :

function ads($position) {

global $prefix, $db, $admin, $sitename, $adminmail, $nukeurl, $adsinfo;

$position = intval($position);

if(!is_array($adsinfo) or !$adsinfo){

$adsinfo = array();

$rows = $db->sql_query("SELECT * FROM ".$prefix."_banner WHERE active='1' ORDER BY position");

while($ads_result = $db->sql_fetchrow($rows)){

$adsinfo[$ads_result['position']][$ads_result['bid']] = $ads_result;

}

}

if(!empty($adsinfo[$position])){

$bid = array_rand($adsinfo[$position]);

$now_ads = $adsinfo[$position][$bid];

if(!is_admin($admin)) $db->sql_query("UPDATE ".$prefix."_banner SET impmade=impmade+1 WHERE bid='$bid'");

$imageurl = filter($now_ads['imageurl'], nohtml);

$clickurl = filter($now_ads['clickurl'], nohtml);

$alttext = filter($now_ads['alttext'], nohtml);

$cid = $now_ads['cid'];

$imptotal = intval($now_ads['imptotal']);

$impmade = intval($now_ads['impmade']);

$clicks = intval($now_ads['clicks']);

$date = $now_ads['date'];

$ad_class = filter($now_ads['ad_class'], nohtml);

$ad_code = $now_ads['ad_code'];

$ad_width = intval($now_ads['ad_width']);

$ad_height = intval($now_ads['ad_height']);

/* Check if this impression is the last one and print the banner */

if (($imptotal <= $impmade) AND ($imptotal != 0)) {

$db->sql_query("UPDATE ".$prefix."_banner SET active='0' WHERE bid='$bid'");

$result = $db->sql_query("SELECT name, contact, email FROM ".$prefix."_banner_clients WHERE cid='$cid'");

$row = $db->sql_fetchrow($result);

$c_name = filter($row['name'], nohtml);

$c_contact = filter($row['contact'], nohtml);

$c_email = filter($row['email'], nohtml);

if (!empty($c_email)) {

$from = "$sitename <$adminmail>";

$to = "$c_contact <$c_email>";

$message = _HELLO." $c_contact:\n\n";

$message .= _THISISAUTOMATED."\n\n";

$message .= _THERESULTS."\n\n";

$message .= _TOTALIMPRESSIONS." $imptotal\n";

$message .= _CLICKSRECEIVED." $clicks\n";

$message .= _IMAGEURL." $imageurl\n";

$message .= _CLICKURL." $clickurl\n";

$message .= _ALTERNATETEXT." $alttext\n\n";

$message .= _HOPEYOULIKED."\n\n";

$message .= _THANKSUPPORT."\n\n";

$message .= "- $sitename "._TEAM."\n";

$message .= "$nukeurl";

$subject = "$sitename: "._BANNERSFINNISHED."";

mail($to, $subject, $message, "From: $from\nX-Mailer: PHP/" . phpversion());

}

}

if ($ad_class == "code") {

$ad_code = stripslashes(FixQuotes($ad_code));

$ads = "<center>$ad_code</center>";

} elseif ($ad_class == "flash") {

$ads = "<center>

<OBJECT classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"

codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0\"

WIDTH=\"$ad_width\" HEIGHT=\"$ad_height\" id=\"$bid\">

<PARAM NAME=movie VALUE=\"$imageurl\">

<PARAM NAME=quality VALUE=high>

<EMBED src=\"$imageurl\" quality=high WIDTH=\"$ad_width\" HEIGHT=\"$ad_height\"

NAME=\"$bid\" ALIGN=\"\" TYPE=\"application/x-shockwave-flash\"

PLUGINSPAGE=\"http://www.macromedia.com/go/getflashplayer\">

</EMBED>

</OBJECT>

</center>";

} else {

$ads = "<center><a href=\"".$clickurl."\" onClick=\"this.href='index.php?op=ad_click&amp;bid=".$bid."'\" target=\"_blank\"><img src=\"".$imageurl."\" border=\"0\" title=\"".$alttext."\"/></a></center>";

}

} else {

$ads = "";

}

return $ads;

}

Так прикольно, сразу вылезло что кто сидит на таг. через php-nuke является рефералом

твердого Михаила =)


9.теперь разбиремся c модулем узер инфо! ура! дошел всетака, уже 2 часа пишу эту хрень

немножко подустал, ну ладно, двигаемся...

в mainfile.php После закрывающей скобки function online() {}



добавляем функцию:

function online_robots($useragent) {

global $r_or;

$r_or=false;



# Выясняем принадлежность к поисковым роботам

$remap_agents = array (

'antabot' => 'antabot (private)',

'aport' => 'Aport',

'Ask Jeeves' => 'Ask Jeeves',

'Asterias' => 'Singingfish Spider',

'Baiduspider' => 'Baidu Spider',

'Feedfetcher-Google'=> 'Feedfetcher-Google',

'GameSpyHTTP' => 'GameSpy HTTP',

'GigaBlast' => 'GigaBlast',

'Gigabot' => 'Gigabot',

'Accoona' => 'Google.com',

'Googlebot-Image' => 'Googlebot-Image',

'Googlebot' => 'Googlebot',

'grub-client' => 'Grub',

'gsa-crawler' => 'Google Search Appliance',

'Slurp' => 'Inktomi Spider',

'slurp@inktomi' => 'Hot Bot',



'lycos' => 'Lycos.com',

'whatuseek' => 'What You Seek',

'ia_archiver' => 'Alexa',

'is_archiver' => 'Archive.org',

'archive_org' => 'Archive.org',



'YandexBlog' => 'YandexBlog',

'YandexSomething' => 'YandexSomething',

'Yandex' => 'Yandex',

'StackRambler' => 'Rambler',



'WebAlta Crawler' => 'WebAlta Crawler',

'igdeSpyder' => 'igdeSpyder',

'Yahoo' => 'Yahoo',

'zyborg@looksmart' => 'WiseNut',

'WebCrawler' => 'Fast',

'Openbot' => 'Openfind',

'TurtleScanner' => 'Turtle',

'libwww' => 'Punto',



'msnbot' => 'MSN',

'MnoGoSearch' => 'mnoGoSearch',

'booch' => 'booch_Bot',

'WebZIP' => 'WebZIP',

'GetSmart' => 'GetSmart',

'NaverBot' => 'NaverBot',

'Vampire' => 'Net_Vampire',

'ZipppBot' => 'ZipppBot',

'Begun' => 'Begun Robot Crawler',

'W3C_Validator' => 'W3C Validator',

'W3C_CSS_Validator' => 'W3C CSS Validator',

);



$remap_agents=array_change_key_case($remap_agents, CASE_LOWER);



$pmatch_agents="";

foreach ($remap_agents as $k => $v) {

$pmatch_agents.=$k."|";

}

$pmatch_agents=substr_replace($pmatch_agents, '', strlen($pmatch_agents)-1, 1);



if (preg_match( '/('.$pmatch_agents.')/i', $useragent, $match ))



if (count($match)) {

$r_or = @$remap_agents[strtolower($match[1])];

}



return $r_or;

}

и функцию:

function online_skip($text) {

$text=mysql_escape_string($text);

$text=stripslashes($text);

$text = str_replace("'",'`',$text);

$text = str_replace('"','`',$text);

return $text;

}




открываем blocks/block-User_Info.php

и его содержимое меняем на это:

<?php

if ( !defined('BLOCK_FILE') ) {

Header("Location: ../index.php");

die();

}

$bots ="";

$content = "";

global $user, $prefix, $user_prefix, $db, $anonymous, $locale, $location;

$month = date('M');

$curDate2 = "%".$month[0].$month[1].$month[2]."%".date('d')."%".date('Y')."%";

$ty = time() - 300;

$preday = strftime('%d', $ty);

$premonth = strftime('%B', $ty);

$preyear = strftime('%Y', $ty);

$curDateP = "%".$premonth[0].$premonth[1].$premonth[2]."%".$preday."%".$preyear."%";

$who_online_now = ""; $guest_online_now = "";

$online_sql = "SELECT * FROM ".$prefix."_session";

$online_query = $db->sql_query($online_sql); $i = 1;

while ($online_row = $db->sql_fetchrow($online_query)){

$current_robot = online_skip(online_robots($online_row[useragent]));

if ($current_robot!="") {

if (is_admin($admin)) { $rt=filter($online_row['location'], "");}

$bots .= "<font color=red>$current_robot</font> $rt <br>"; $f++;

} else {

if (isset($online_row[guest]) and $online_row[guest] == 0) {

if ($i < 10) { $a++;

$who_online_now .= "0" .$i." :&nbsp;<a href=\"modules.php?name=Your_Account&amp;op=userinfo&amp;username=$online_row[uname]\"><font color=\"#3572AD\">$online_row[uname]</font></a><br>\n";

} else {$a++;

$who_online_now .= $i.":&nbsp;<a href=\"modules.php?name=Your_Account&amp;op=userinfo&amp;username=$online_row[uname]\"><font color=\"#3572AD\">$online_row[uname]</font></a> $online_row[location]<br>\n";

}

$who_online_now .= ($i != $member_online_num ? " " : "");

$i++;

} else {$b++;

if (is_admin($admin)) { $guest_online_now .= " ".$online_row['location']."<br>\n";}

}

}

$hala="";

}

if ($f == 0) {$f=0;}

if ($a == 0) {$member_online_num = 0;} else {$member_online_num = $a;}

if ($b == 0) {$guest_online_num = 0;} else {$guest_online_num = $b;}

$who_online_num = $guest_online_num + $member_online_num + $f;

$who_online_num = intval($who_online_num);



$botes = $who_online_num-$guest_online_num-$member_online_num;

$content .= "<img src=\"images/blocks/group-3.gif\" height=\"16\" width=\"16\" alt='"._BVISIT."' /> <b><u>"._BVISIT.":</u></b>\n<br>\n";

$content .= "<img src=\"images/blocks/ur-anony.gif\" height=\"16\" width=\"16\" alt='"._BVIS."' /> "._BVIS.": <b>$guest_online_num</b><br>\n";

$content .= "<img src=\"images/blocks/ur-member.gif\" height=\"16\" width=\"16\" alt='Зарегистрированные пользователи'/> Зарегестрированных пользователей: <b>$member_online_num</b><br>\n";

$content .= "<img src=\"images/blocks/ur-registered.gif\" height=\"16\" width=\"16\" alt='"._BTT."'/> "._BTT.": <b>$who_online_num</b> из них роботов:<b>$botes</b> <br>\n $hala";

if (is_admin($admin)) {if ($bots !="") {

$content .= "<hr><img src=\"images/blocks/group-2.gif\" height=\"16\" width=\"16\" alt='Поисковые системы'/> <b><u>Боты на линии:</u></b><br>$bots";

}

}



if ($member_online_num > 0) {

$content .= "<hr>\n<img src=\"images/blocks/group-1.gif\" height=\"16\" width=\"16\" alt='"._BON."'/> <b><u>"._BON.":</u></b><br>$who_online_now";

}



?>

Реккомендую этот блок поставить за место родного кто на сайте, он делает один

запрос и обрабатывается быстрее чем родные блоки.



Вот теперь у нас гостевой предел запросов на главной = 19 и 0.1 секунда открытия

страницы, уже ощущается, что сайт преобразовался из тяжелого ольшого слабого

(относительно размера) мутанта в не что меньшее и быстрое.


Ну а теперь последние 3 дополнения и я наконец лягу спать....


10.так модифицируем admin.php, посмотрев дикие запросы в бд при адимнистрировании,

стало понятно что нормальный человек не будет каждый свой запрос обновлять модули

в системе, по этому поводу, находим:

$handle=opendir('modules');

$modlist = "";

while ($file = readdir($handle)) {

if ( (!ereg("[.]",$file)) ) {

$modlist .= "$file ";

}

}

closedir($handle);

$modlist = explode(" ", $modlist);

sort($modlist);

for ($i=0; $i < sizeof($modlist); $i++) {

if(!empty($modlist[$i])) {

$row = $db->sql_fetchrow($db->sql_query("SELECT mid from " . $prefix . "_modules where title='$modlist[$i]'"));

$mid = intval($row['mid']);

if (empty($mid)) {

$db->sql_query("insert into " . $prefix . "_modules values (NULL, '$modlist[$i]', '$modlist[$i]', '0', '0', '1', '0', '')");

}

}

}


и это комменитруем, далее заходим в папку admin/modules, созаем в ней файл modup.php,

в него вставляем:

<?php



if (!defined('ADMIN_FILE')) {

die ("Access Denied");

}



global $prefix, $db, $admin_file;

$aid = substr("$aid", 0,25);

$row = $db->sql_fetchrow($db->sql_query("SELECT radminsuper FROM " . $prefix . "_authors WHERE aid='$aid'"));

if ($row['radminsuper'] == 1) {



function main_mod() {

global $db, $bgcolor2, $admin_file, $prefix;

include ("header.php");

GraphicAdmin();

OpenTable();

echo "<center><font class=\"title\"><b>Обновление модулей</b></font></center>";

CloseTable();

echo "<br>";



$handle=opendir('./modules');

$modlist = "";

while ($file = readdir($handle)) {

if ( (!ereg("[.]",$file)) ) {

$modlist .= "$file ";

}

}

closedir($handle);

$modlist = explode(" ", $modlist);

sort($modlist);

for ($i=0; $i < sizeof($modlist); $i++) {

if(!empty($modlist[$i])) {

$row = $db->sql_fetchrow($db->sql_query("SELECT mid from " . $prefix . "_modules where title='$modlist[$i]'"));

$mid = intval($row['mid']);

if (empty($mid)) {

$db->sql_query("INSERT INTO modules values (NULL, '$modlist[$i]', '$modlist[$i]', '0', '0', '1', '0', '')");

}

}

}

include("footer.php");

}



switch($op) {



case "modup":

main_mod();

break;



}



} else {

echo "Access Denied";

}



?>

потом заходим в папку admin/links тут создаем файл links.modup.php

в него помещаем:

<?php

if (!defined('ADMIN_FILE')) {

die ("Access Denied");

}



global $admin_file;

if ($radminsuper==1) {

adminmenu("".$admin_file.".php?op=modup", "Обновление модулей", "preferences.gif");

}



?>

и наконец admin/case создаем файл case.modup.php

и в него вставляем:

<?php

if (!defined('ADMIN_FILE')) {

die ("Access Denied");

}



switch($op) {

case "modup":

include("admin/modules/modup.php");

break;



}

?>
все имеем у админа на тойже главной странице 34 запроса =) поздравляю управленческий

тюнинг почти закончен.



11. открываем includes/ipban.php, находим:

$numrow = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_banned_ip WHERE ip_address='$ip'"));

if ($numrow != 0) {

echo "<br><br><center><img src='images/admin/ipban.gif'><br><br><b>You has been banned by the administrator</b></center>";

die();

}

$ip_class = explode(".", $ip);

$ip = "$ip_class[0].$ip_class[1].$ip_class[2].*";

$row = $db->sql_fetchrow($db->sql_query("SELECT ip_address FROM ".$prefix."_banned_ip WHERE ip_address='$ip'"));

$ip_class_banned = explode(".", $row[ip_address]);

if ($ip_class_banned[3] == "*") {

if ($ip_class[0] == $ip_class_banned[0] && $ip_class[1] == $ip_class_banned[1] && $ip_class[2] == $ip_class_banned[2]) {

echo "<br><br><center><img src='images/admin/ipban.gif'><br><br><b>You has been banned by the administrator</b></center>";

die();

}

}

Меняем это на:

$ip_class = explode(".", $ip);

$ip2 = "$ip_class[0].$ip_class[1].$ip_class[2].*";

//ADD

$numrow = $db->sql_numrows($db->sql_query("SELECT id FROM ".$prefix."_banned_ip WHERE ip_address='$ip' OR ip_address='$ip2'"));

if ($numrow != 0) {

echo "<br><br><center><img src='images/admin/ipban.gif'><br><br><b>You has been banned by the administrator</b></center>";

die();

}

в этом же файле находим:

$ip = $_SERVER['REMOTE_ADDR'];

$past = time()-2;

$sql = "DELETE FROM ".$prefix."_antiflood WHERE time < '$past'";

$db->sql_query($sql);

$ctime = time();

$db->sql_query("INSERT INTO ".$prefix."_antiflood (ip_addr, time) VALUES ('$ip', '$ctime')");

$numrow = $db->sql_numrows($db->sql_query("SELECT * FROM ".$prefix."_antiflood WHERE ip_addr='$ip'"));

if ($numrow >= 3) {

echo "<br><br><center><b>Sorry, too many page loads in so little time!</b></center>";

die();

}

unset($ip);


и заменяем на:

if ($antiflood_pages>0) {

$ip = $_SERVER['REMOTE_ADDR'];

$past = time()-2;

$sql = "DELETE FROM ".$prefix."_antiflood WHERE time < '$past'";

$db->sql_query($sql);

$ctime = time();

$db->sql_query("INSERT INTO ".$prefix."_antiflood (ip_addr, time) VALUES ('$ip', '$ctime')");

$numrow = $db->sql_numrows($db->sql_query("SELECT * FROM ".$prefix."_antiflood WHERE ip_addr='$ip'"));

if ($numrow >= $antiflood_pages) {

echo "<br><br><center><b>Извините, но Вы открываете слишком много страниц за малый промежуток времени!</b></center>";

die();

}

unset($ip);

}

так теперь у гостя 18 запросов. если отключить антифлуд, который меня лично бесит,

то будет 15 запросов, у админа гд-то 34-36

сижу и думаю,сайт меняться каждый раз ведь не может, т.е каждый запрос, не добавляется нового модуля

ну новости какие разместят, одного часа хватит ведь =) ... короче в кеш его! Но!

Сначало его зажмем.

открываем mainfile.php и туда перед функцией function makePass вставляем:


function CheckCanGzip(){

if (headers_sent() || connection_aborted()){

return 0;

}

if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip";

if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";

return 0;

}



/* $level = compression level 0-9, 0=none, 9=max */

function GzipOut($debug=0, $level=1){

global $config, $Timer, $db, $tpl, $Size, $Crc, $s;

header ("Last-Modified: " . date('r', time()-60*60*10) ." GMT");

$ENCODING = CheckCanGzip();

if ($ENCODING){

$Contents = ob_get_contents();

ob_end_clean();

if ($debug){

$s = "<!--Несжатая: ".strlen($Contents)."; ";

$s .= "Сжатая: ".

strlen(gzcompress($Contents, $level)).

"-->";

$Contents .= $s;

}

header("Content-Encoding: $ENCODING");

print "\x1f\x8b\x08\x00\x00\x00\x00\x00";

$Size = strlen($Contents);

$Crc = crc32($Contents);

$Contents = gzcompress($Contents, $level);

$Contents = substr($Contents, 0, strlen($Contents) - 4);

print $Contents;

print pack('V', $Crc);

print pack('V', $Size);

exit;

}else{

ob_end_flush();

if ($debug){

echo "<!--Страница не была сжата-->";

}

exit;

}



}


находим в mainfil.php строики:



if ($phpver >= '4.0.4pl1' && isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'],'compatible')) {

if (extension_loaded('zlib')) {

@ob_end_clean();

ob_start('ob_gzhandler');

}

} elseif ($phpver > '4.0' && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && !empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {

if (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {

if (extension_loaded('zlib')) {

$do_gzip_compress = true;

ob_start(array('ob_gzhandler',5));

ob_implicit_flush(0);

if (ereg("MSIE", $_SERVER['HTTP_USER_AGENT'])) {

header('Content-Encoding: gzip');

}

}

}

}

и удаляем их чтоб не мешали работать.

Открываем файл header.php и туда добавляем:

после define('NUKE_HEADER', true);

данные буковки:

ob_start();

ob_implicit_flush(0);

Открываем footer.php находим строки:

echo "</body>\n</html>";

ob_end_flush();

die();

}



foot();

и меняем их на:

echo "</body>\n</html>";

}



foot();

GzipOut(true,"5");

die();
Ну вот собственно получили довольно приличный нук, похожий чем-то на smallNuke,

так теперь прикиним теоретически, что если к сайту будут ходить человек эдак 30-40 в сутки,

это же мало =) и соответственно он будет работать нормально и относительно быстро,

теперь если вы развились, понавешали кучу блоков и всякой интересной и уникальной

информации, нужно будет думать чтот с этим делать, это надо кешировать.

мда полазив по сайту понял что меня конкретно бесит антифлуд...

Вот, финальные размышления, если заменить модуль NEWS на какой-нибудь менее запросливый,

и поставить модуль ajax голосования, то можно впринципе еще уменьшить запросы т.к основная нагрузка идет именно от него,

не оптимизировано практически ничего и скорее всего сам автор этого делать не будет,

поэтому система PHP-Nuke так и останется отличным материалом для изучения для тех,

кто не особо разбирается в PHP, потому-что с нее многие начали и взяли кучу элементов,

например Slaed, Post Nuke, smallNuke..... это конечно не полный список, но эту систему можно отлично

манетизоровать(естественно уже оптимизированную, а то многие просто могут отказаться оказываеть услуги хостинга,

хотя в наше время эта CMS не является такой мега нагружающей систему как многие пишут

да и компьютеры уже давно не пентиумы 166ММХ)

если надо че написать пишите поможем чем сможем....

Во нашел кусочки от наворотов http://mynuke.ru
великий человек много написал, там кстате есть оптимизация модуля новостей....
Самописные содули еще есть тут и вот тут так что ищите.....

забыл совсем, что не выложил собраный архив с данными модификациями...

Тык Тык UpToLike