Разработка сайта. Система поиска по сайту

Оглавление

	

	Введение

	1. О языке PHP

	1.1 Что такое РНР?

	1.2 Серверные и клиентские технологии

	1.3 История развития PHP

	2. Разработка программы

	2.1 Тематика

	2.2 Схема сайта

	2.3 Разработка php - скрипта системы поиска

	2.4 Блок-схемы файлов

	2.5 Руководство пользователя

	Заключение

	Список используемой литературы

	Приложение

	


Введение



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

	Одним из примеров нового направления информационных технологий может служить бурное развитие программ с открытым кодом (OSS - Open Source Software), свободно доступных как для распространения-, так и для модификации всеми желающими. Наиболее известной в этом смысле является операционная система Unix, в частности ядро Linux. Однако, хотя с помощью программ с открытыми исходниками создаются стабильные и очень полезные продукты, освоить их порой затруднительно. Отсутствие учебников для начинающих и удобных описаний не позволяет мощным технологиям стать настолько популярными, насколько они того заслуживают. РНР, весьма доступный язык написания сценариев для Web, представляет собой еще один прекрасный инструмент, который, хоть и обладает уникальными возможностями и легок в использовании, отпугивал многих до сегодняшнего дня.


1. О языке PHP



1.1 Что такое РНР?

	

	PHP - язык создания сценариев, который давно перерос свое название. Дело в том, что PHP - это аббревиатура от слов Personal Home Page. Первая версия PHP была создана Расмусом Лердорфом в 1994 г. и представляла собой набор инструментов для отслеживания посетителей Web-страницы. Со временем PHP из набора инструментов превратился в полноценный язык программирования, а его название было изменено как рекурсивное образование PHP HyperText Preprocessor (препроцессор гипертекста PHP).

	PHP - это серверный язык создания сценариев. Конструкции PHP, вставленные в HTML-текст, выполняются сервером при каждом посещении страницы. Результат их обработки вместе с обычным HTML-текстом передается браузеру.

	В настоящее время основной версией PHP является пятая.

	Существуют два основных конкурента PHP: Active Server Pages (ASP) компании Microsoft и ColdFusion компании Allaire. По сравнению с ними PHP обладает рядом преимуществ, в числе которых:

		Высокая производительность. PHP-программы работают быстрее, чем ASP.

		Функциональность. Разработку PHP-программы можно отделить от собственно разработки Web-страницы, что упростит жизнь и программисту, и дизайнеру.

		Цена. PHP абсолютно бесплатен.

		Простота в использовании. Имеющие опыт программирования на распространенных языках найдут синтаксис PHP хорошо знакомым.

		Переносимость. Один и тот же PHP-код можно использовать как в среде NT, так и на платформах UNIX.

сайт система поиск язык

	В качестве основной будет использоваться самая распространенная разновидность - MySQL. Это реляционная база данных с открытым исходным кодом, которая проста в использовании и поддерживается большинством хостинговых компаний.

	

1.2 Серверные и клиентские технологии

	

	В настоящее время существует множество клиентских и серверных технологий для построения Web-страниц. Клиентские технологии выполняются в браузере (JavaScript, VBScript, Java-апплеты, DHTML и т.д.), а серверные обрабатывает сервер и возвращает клиенту только HTML-код (Perl, ASP,РНР). Язык РНР не ограничивает вас и позволяет с легкостью использовать клиентские технологии совместно с инструкциями РНР. Но стоит ли их использовать без особой надобности? Я думаю, что нет, и это мы сейчас увидим.

	Рассмотрим клиентскую технологию на примере JavaScript. Если вы будете использовать этот код в своих проектах, то нет гарантии, что страница будет отображена в любом Web-браузере. Некоторые не поддерживают эту технологию, а там, где есть поддержка, пользователи иногда отключают JavaScript в целях безопасности. Таким образом, ваша страница может отображаться некорректно, и это вызовет лишние проблемы у посетителей.

	Не стоит использовать JavaScript, если он не принесет реальной выгоды.

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

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

	

1.3 История развития PHP



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

	Истоки PHP лежат в старом продукте, имевшем название PHP/FI. PHP/FI был создан Расмусом Лердорфом в 1995 году и представлял собой набор Perl-скриптов для ведения статистики посещений его резюме. Развитие web еще только начиналось, никаких специальных средств для решения этих задач не было, и к автору хлынул поток сообщений с вопросами. Лердорф начал бесплатно раздавать свой инструментарий, названный "Personal Homepages Tools" (PHP) - ("Инструменты для персональных домашних страниц"). Очень скоро потребовалась большая функциональность и Расмус пишет новую, намного более обширную версию на C, работающую с базами данных и позволяющую пользователям разрабатывать простейшие web-приложения. Расмус Лердорф решил выложить исходный код PHP/FI на всеобщее обозрение, исправление ошибок и дополнение.

	PHP/FI (Personal Home Page / Forms Interpreter - Персональная Домашняя страница / Интерпретатор Форм) включал в себя базовую функциональность сегодняшнего PHP. Он имел переменные в стиле Perl, автоматическую интерпретацию форм и возможность встраиваться в html-код. Собственно синтаксис языка имел много общего с Perl, хотя и был намного проще и ограниченнее.

	В 1997 выходит PHP/FI 2.0. Вторая версия C-имплементации обозначила группу пользователей: несколько тысяч людей по всему миру, с примерно 50,000 доменами, что составляло около 1% всего числа доменов Интернета. Несмотря на то, что разработкой занималось уже несколько людей, PHP/FI 2.0 все еще оставался крупным проектом одного человека.

	Официально PHP/FI 2.0 вышел только в ноябре 1997 года, после проведения большей части своей жизни в бета-версиях. Вскоре после выхода его заменили альфа-версии PHP 3.0.

	PHP3

	PHP 3.0 была первой версией, напоминающей PHP, каким мы знаем его сегодня. В 1997 году Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski) переписали код с начала: разработчики сочли PHP/FI 2.0 не пригодным для разработки приложения электронной коммерции, над которым они работали для проекта Университета. Для совместной работы над PHP 3.0 с помощью базы разработчиков PHP/FI 2.0 Энди, Расмус и Зив решили объединиться и объявить PHP 3.0 официальным преемником PHP/FI, разработка же PHP/FI была практически полностью прекращена.

	Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра. В последствии интерфейс написания расширений привлек к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Фактически, это и был главный ключ к успеху, но стоит добавить, что немаловажным шагом оказалась разработка нового, намного более мощного и полного синтаксиса с поддержкой ООП.

	Абсолютно новый язык программирования получил новое имя. Разработчики отказались от дополнения о персональном использовании, которое имелось в аббревиатуре PHP/FI. Язык был назван просто 'PHP' - аббревиатура, содержащая рекурсивный акроним: 'PHP: Hypertext Preprocessor' (PHP: Препроцессор Гипертекста).

	Первая статья о PHP была опубликована в чешском варианте 'Computerworld' весной 1998 и освещала PHP 3.0. Как и в случае с книгами, эта была первая в серии статья из множества посвященных PHP и опубликованных в различных известных журналах.

	К концу 1998, PHP использовался десятками тысяч пользователей. Сотни тысяч web-сайтов сообщали о том, что они работают с использованием языка. В то время PHP 3.0 был установлен приблизительно на 10% серверах Интернета!

	PHP 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичного тестирования.

	PHP4

	К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Расширения дали PHP 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работали не эффективно.

	Новый движок, названный 'Zend Engine' (от имен создателей: Zeev и Andi), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принесший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника PHP 3.0. В дополнение к улучшению производительности, PHP 4.0 имел еще несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

	Сегодня PHP используется сотнями тысяч разработчиков. Миллионы (!) сайтов сообщают о работе с PHP. Эти, а также многие другие факты, позволяют с уверенностью сказать, что PHP является одним из самых популярных языков web-программирования!

	Группа разработчиков PHP состоит из множества людей, работающих над ядром и расширениями PHP, и смежными проектами, такими, как PEAR и документации языка.

	PHP5

	Недавно вышла новая, пятая версия PHP (PHP5). PHP5 использует новую версию "движка" Zend - Zend Engine 2.

	В PHP5 объектная модель была значительно переработана. При этом было добавлено много новых возможностей, благодаря которым PHP5 получил некоторые черты таких объектно-ориентированных языков, как C++ и Java.

	Изменения коснулись производительности встроенных стандартных функций PHP. По некоторым оценкам, скорость работы стандартных функций в PHP5 увеличилась на 40% и более.

	Появились новые директивы файла настройки php. ini. Претерпела изменения и поддержка потоков. Были добавлены новые функции, а также функции графической библиотеки GD.

	Поддержка XML в версии PHP5 стала полной, поддерживаются новые расширения DOM и XML.


2. Разработка программы



2.1 Тематика

	

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

	Во всемирной почти все сайты имеют систему поиска (примеры: www.vkontakte.ru - система поиска по этому сайту позволяет найти одного человека из 35 млн.). Система поиска упрощает поиск требуемой информации, тем самым уменьшая время, затрачиваемое на нахождение информации.

	Мною был разработан сайт, позволяющий получить начальную информацию о языке PHP. Сайт предоставляет начальные сведения о языке. Система поиска упрощает доступ к информации.

	



Страницы сайта

-поиск

-пенель администрирования

Поисковая система

Результаты поиска

Страница с искомой информацией

ничего

Ввод пароля

Индексирование сайта и запись в БД, изменение пароля, просмотр информации о системе2.2 Схема сайта



	

	Пояснения к схеме сайта:

	страницы сайта, поиск, панель администрирования - содержание исходной страницы сайта (попадаем при переходе на начальную страницу);

	поисковая система - форма, в которую вводим искомую информацию;

	результаты поиска - страница, демонстрирующая результаты поиска, отсюда можем перейти к странице с искомой информацией и в случае "пустого" результата - на начальную страницу;

	страница с искомой информацией;

	ничего - страница перехода на начальную;

	ввод пароля - форма ввода пароля администрирования сайта;

	индексирование сайта и запись в БД, изменение пароля, просмотр информации о системе - администрирование сайта.

	

2.3 Разработка php-скрипта системы поиска



	В меню, на начальной странице, присутствует ссылка на страницу поиска.

	В страницу поиска встроена форма для поиска:

	

	<form method=get onSubmit=StartSearch () target=SearchWindow>

	<tr bgcolor=#faedca align=center><td>

	<table>

	<tr>

	<td align=center><input type=text name=query size=40 class=name onfocus="id=className" onblur="id=''"></td>

	<td align=center>

	<table border=0 cellspacing=1 cellpadding=0 bgcolor=#000000>

	<tr><td><input type=submit value=Искать. class=submit style=cursor: hand></td></tr>

	</table>

	</td>

	</tr>

	</table>

	

	Форма выполнена в виде таблицы. Обрабатывается файлом index. php.

	Пользователь набирает информацию для поиска, отправит информацию для поиска кнопкой "искать…", скрипт начинает искать требуемую информацию в заранее подготовленном администратором файле (data. dat).

	Он структурирован по следующей схеме:

	URL страницы содержащаяся информация в странице.

	Пример: http://www.localhost/term_paper/index.html Язык&nbsp; &shy; программирования&nbsp; &shy; PHP&nbsp; &shy; Язык программирования PHP.

	Результаты выводятся в форму:

	

	<table border=0 cellspacing=1 cellpadding=1 align=center width=650 bgcolor=#faad1e>

	<tr bgcolor=#fce1ae><td align=center><font face=verdana size=1 color=green><b>ПОИСК ОКОНЧЕН</td></tr>

	<tr bgcolor=#faedca><td>

	<table border=0 width=100%>

	<tr><td align=right valign=top width=170><font face=verdana size=1>Вы искали: </td><td><font face=verdana size=1 color=maroon><i>@query@</td></tr>

	<tr><td align=right valign=top><font face=verdana size=1>Найдено документов: </td><td><font face=verdana size=1 color=maroon><i>@docs@</td></tr>

	<tr><td align=right valign=top><font face=verdana size=1>Время затраченное на поиск: </td><td><font face=verdana size=1 color=maroon><i>@time@ сек. </td></tr>

	</table>

	</td></tr></table><table border=0><tr><td></td></tr></table>

	

2.4 Блок-схемы файлов



	

Проверка на ошибки (пустая строка)

Выполнение поиска в файле data.dat

Входные данные

Результат найден или нет

Вывод результата

начало

конец

Не найден

Пустая строкаindex. php

	

	


начало

Ввод пароля

Пароль верный?

Меню

-Запись в файл data.dat

-смена пароля

-просмотр информации

конец

Выход

нетadmin. php

	

2.5 Руководство пользователя



	Начальная страница. На странице присутствует меню навигации по сайту. Можно попасть на страницы: возможности PHP, преимущества PHP, история развития, первая программа, поиск (задание курсовой работы) и панель администрирования; получить ответ на вопрос "Что такое PHP?". Будет дано определение, расшифровка аббревиатуры "PHP".



	

	

	"Возможности PHP": узнаем о возможностях языка PHP. 







	"История развития": любой, изучающий любой язык программирования, должен знать его историю, а такой язык, как PHP не должен оставаться в стороне.



	

	

	"Первая программа": После изучения преимуществ PHP, истории языка, почему бы не попробовать написать программу? Эта страница поможет вам в этом.

	

	

	

	Страница "поиск". Вводим, нажимаем "искать…", получаем результат.

	

	

	

	Панель администрирования. Вводим пароль в форму, попадаем на следующую страницу:

	

	

	

	Здесь можно осуществить индексацию сайта (перезапись файла data. dat), в случае изменения каких-либо данных или добавления страниц в сайт. Сменить пароль для администратора. Посмотреть Версию установленного PHP интерпретатора. Узнать к какому семейству относится операционная система, установленная на сервере (Windows, Linux, Mac OS и пр.).


Заключение



	В ходе проделанной работы был разработан сайт с системой поиска информации по нему. Тематика сайта: введение в PHP. Можно узнать о языке программирования PHP, а именно: его возможностях, истории, получить ответ на вопрос: "Что такое PHP?". На одной из страниц будет продемонстрировано написание первой программы на PHP. Выполнено на пяти страницах.

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

	Все требования к работе выполнены.


Список используемой литературы



Ульман Л. Основы программирования на PHP: пер. с англ. - М.: ДМК Пресс, 2001. - 288 с.: ил. Самоучитель.

Кузнецов М.В., Симдянов И.В., Голышев С.В. РНР 5. Практика разработки Web-сайтов. - СПб.: БХВ-Петербург, 2005. - 960 с: ил.

Котеров Д.В., Костарев А.Ф. PHP5. - СПб.: БХВ - Петербург, 2005. - 1120 с.: ил

Фленов М.Е. РНР глазами хакера. - СПб.: БХВ-Петербург, 2005. - 304 с: ил.

Руководство по PHP. - http://www.php.net/manual/ru/

Клуб разработчиков PHP. - http://www.phpclub.ru/

PHP FAQ. Сайт с ответами на вопросы. - http://www.phpfaq.ru/


Приложение



	Листинг index. php

	<? php

	function error ($error,$file) {exit ('<font face=verdana size=1 color=#de0000><b>'. $error. '<br> ['.htmlspecialchars ($file). '] </b></font>'); }

	@set_time_limit (0);

	@SetLocale (LC_ALL,"ru_RU. CP1251");

	function CheckConf ($conf)

	{

	while (list ($section,$array) =each ($conf))

	while (list ($key,$value) =each ($array))

	if (! strlen ($value))

	error ("В файле параметров скрипта, а именно в секции <font color=green>". $section. "</font>, пуст ключ <font color=green>". $key. "</font>",$conf ['dir'] ['path']. "/inc/config. inc. dat");

	}

	$term_paper=parse_ini_file (". /inc/config. inc. dat",1) or error ("не могу загрузить основной файл параметров",". /inc/config. inc. dat");

	include ($term_paper ['file'] ['functions']);

	CheckConf ($term_paper);

	while (list ($section,$array) =each ($term_paper))

	while (list ($key,$value) =each ($array))

	$term_paper ['other'] [chr (73). chr (110). chr (105). ucfirst (strtolower ($section)). ucfirst (strtolower ($key))] =$value;

	settype ($FirstTime=term_paper_time (),"integer");

	if (isset ($_GET ['query']))

	{

	$query=$UserQuery=term_paper_stripslashes ($_GET ['query']);

	preg_match_all ("/\w+/",$query,$QueryArray);

	$TempQuery=array_unique ($QueryArray [0]);

	$QueryArray [0] =$term_paper ['result'] =null;

	while (list (,$value) =each ($TempQuery))

	$QueryArray [0] [] =$value;

	$result=array ();

	$found=0;

	if (! $QueryCount=count ($QueryArray [0]))

	{

	ParseTemplate ($term_paper ['templates'] ['top']);

	if (empty ($query))

	$term_paper ['other'] ['error'] =$term_paper ['error'] ['EmptyQuery'];

	else

	$term_paper ['other'] ['error'] =$term_paper ['error'] ['EmptyQueryAfterStrip'];

	ParseTemplate ($term_paper ['templates'] ['error']);

	ParseTemplate ($term_paper ['templates'] ['bottom']);

	exit;

	}

	elseif ($QueryCount==1)

	$query=$QueryArray [0] [0];

	else

	{

	$query=" (";

	for ($i=0; $i<$QueryCount; $i++)

	if ($i! =$QueryCount-1)

	$query. =$QueryArray [0] [$i]. "|";

	else

	$query. =$QueryArray [0] [$i];

	$query. =")";

	}

	if (! empty ($query))

	{

	ParseTemplate ($term_paper ['templates'] ['top']);

	$OpenDataFile=fopen ($term_paper ['file'] ['data'],'r');

	flock ($OpenDataFile,1);

	flock ($OpenDataFile,2);

	while (! feof ($OpenDataFile))

	if (preg_match ("/". $query. "/i",$string=fgets ($OpenDataFile)))

	{

	/*

	list ($term_paper ['other'] ['link'],$term_paper ['other'] ['document']) =split (" ",$string,2);

	$term_paper ['other'] ['document'] =substr ($term_paper ['other'] ['document'],0,$term_paper ['other'] ['MaxChars']);

	$term_paper ['other'] ['document'] =trim (preg_replace ("/". $query. "/i","<b>\\0</b>",$term_paper ['other'] ['document'])).". ";

	ParseTemplate ($term_paper ['templates'] ['result']);

	flush ();

	*/

	$result [] =$string;

	$found++;

	}

	fclose ($OpenDataFile);

	if (! $found)

	{

	$term_paper ['other'] ['error'] =$term_paper ['error'] ['NoFound'];

	ParseTemplate ($term_paper ['templates'] ['error']);

	}

	else

	{

	$term_paper ['other'] ['navigation'] =term_paper_array_navigation (

	(isset ($result))? $result: null,

	(isset ($term_paper ['other'] ['MaxShow']))? $term_paper ['other'] ['MaxShow']: null,

	(isset ($term_paper ['other'] ['MaxPages']))? $term_paper ['other'] ['MaxPages']: null,

	"? query=". $UserQuery. "&SearchPage=",

	(isset ($_GET ['SearchPage']))? $_GET ['SearchPage']: null,

	null,

	null,

	(isset ($term_paper ['color'] ['NotActive']))? $term_paper ['color'] ['NotActive']: null,

	null,

	(isset ($term_paper ['color'] ['CurrentPage']))? $term_paper ['color'] ['CurrentPage']: null,

	null,

	null,

	" "

	);

	$term_paper ['strings'] =$term_paper_array_navigation;

	while (list ($number,$string) =each ($term_paper ['strings'] ['result_strings']))

	{

	$term_paper ['other'] ['num'] =$term_paper ['strings'] ['count_all_strings'] - $term_paper ['strings'] ['start_string'] - $number;

	list ($term_paper ['other'] ['link'],$term_paper ['other'] ['title'],$term_paper ['other'] ['document']) =split (" ",$string,3);

	$term_paper ['other'] ['document'] =substr ($term_paper ['other'] ['document'],0,$term_paper ['other'] ['MaxChars']);

	$term_paper ['other'] ['document'] =trim (preg_replace ("/". $query. "/i","<b>\\0</b>",$term_paper ['other'] ['document'])).". ";

	ParseTemplate ($term_paper ['templates'] ['result']);

	flush ();

	}

	}

	$term_paper ['other'] ['query'] =htmlspecialchars ($UserQuery);

	$term_paper ['other'] ['docs'] = (empty ($found))?"ноль": $found;

	$term_paper ['other'] ['time'] =round (term_paper_time () - $FirstTime,3);

	ParseTemplate ($term_paper ['templates'] ['stat']);

	if (! empty ($found))

	ParseTemplate ($term_paper ['templates'] ['navigation']);

	ParseTemplate ($term_paper ['templates'] ['bottom']);

	}

	}

	else

	{

	$LoadingBody=null;

	$OpenLoadingFile=fopen ($term_paper ['dir'] ['templates']. chr (47). $term_paper ['template'] ['parse']. chr (47). $term_paper ['templates'] ['loading'],'r');

	$LoadingBody=fread ($OpenLoadingFile,filesize ($term_paper ['dir'] ['templates']. chr (47). $term_paper ['template'] ['parse']. chr (47). $term_paper ['templates'] ['loading']));

	fclose ($OpenLoadingFile);

	$term_paper ['other'] ['LoadingHtmlCode'] =addslashes (term_paper_strip_new_line ($LoadingBody));

	ParseTemplate ($term_paper ['templates'] ['form']);

	}

	? >

	<br><br><br>

	<div align="center">

	<table>

	<tr><a href=". /down.html">На главную</a></tr>

	<tr><img src=". /img/logo_pic. gif"></tr>

	</table></div>

	Листинг admin. php

	<? php

	function error ($error,$file) {exit ('<font face="verdana" size="1" color="#de0000"><b>'. $error. '<br> ['.htmlspecialchars ($file). '] </b></font>'); }

	@set_time_limit (0);

	@SetLocale (LC_ALL,"ru_RU. CP1251");

	if (isset ($_GET))

	while (list ($key,$value) =each ($_GET))

	$$key=$value;

	header ("Expires: Mon, 26 Jul 1997 05: 00: 00 GMT");

	header ("Last-Modified:". gmdate ("D, d M Y H: i: s")." GMT");

	header ("Cache-Control: no-store, no-cache, must-revalidate");

	header ("Cache-Control: post-check=0, pre-check=0", false);

	header ("Pragma: no-cache");

	function read_dir ($dir)

	{

	if ($OpenDir=opendir ($dir))

	{

	while ( ($file=readdir ($OpenDir))! ==false)

	{

	if ($file! =". "&&$file! =". ")

	{

	if (is_dir ($dir. chr (47). $file))

	{

	if (! is_readable ($dir. chr (47). $file))

	error ("нет прав для чтения текущий папки",$dir. chr (47). $file);

	elseif (! is_writeable ($dir. chr (47). $file))

	error ("нет прав для записи в текущую папку",$dir. chr (47). $file);

	else

	read_dir ($dir. chr (47). $file);

	}

	else

	{

	if (! is_readable ($dir. chr (47). $file))

	error ("нет прав для чтения файла",$dir. chr (47). $file);

	elseif (! is_writeable ($dir. chr (47). $file))

	error ("нет прав для записи в файл",$dir. chr (47). $file);

	}

	}

	}

	}

	else error ("нет прав",$dir);

	}

	function CheckConf ($conf)

	{

	while (list ($section,$array) =each ($conf))

	while (list ($key,$value) =each ($array))

	if (! strlen ($value))

	error ("В файле параметров скрипта, а именно в секции <font color=green>". $section. "</font>, пуст ключ <font color=green>". $key. "</font>",$conf ['dir'] ['path']. "/". $conf ['dir'] ['inc']. "/config. inc. dat");

	}

	if (! is_readable (". /inc")) error ("нет прав для чтения текущий папки",". /inc");

	elseif (! is_writeable (". /inc")) error ("нет прав для записи в текущую папку",". /inc");

	elseread_dir (". /inc");

	$term_paper=parse_ini_file (". /inc/config. inc. dat",1);

	CheckConf ($term_paper);

	include (". /inc/functions. inc. php");

	if (isset ($_SERVER ['QUERY_STRING']) &&$_SERVER ['QUERY_STRING'] =="exit")

	{

	$_COOKIE=null;

	setcookie ($term_paper ['script'] ['prefix']. "password",null);

	}

	#$term_paper ['sections'] =array (

	#10=>"Создание базы (индексация сайта)",

	#20=>"Смена пароля",

	#);

	$term_paper ['sections'] =array (

	'Основное меню'=>array (

	'10'=>'создание базы (индексация сайта) '

	),

	'Пароль'=>array (

	'20'=>'смена пароля'

	),

	'Информация'=>array (

	'30'=>'версия PHP интерпретатора',

	'40'=>'операционная система'

	)

	);

	function CheckPostRequest ()

	{

	global $term_paper;

	if (! count ($_POST)) return 0;

	elseif (! isset ($_POST ['password'])) return 0;

	elseif (strlen ($_POST ['password']) ==32) return 0;

	else

	{

	setcookie ($term_paper ['script'] ['prefix']. "password",md5 ($_POST ['password']));

	$_COOKIE [$term_paper ['script'] ['prefix']. "password"] =md5 ($_POST ['password']);

	return 1;

	}

	}

	function CheckAdminPassword ($password)

	{

	global $term_paper;

	$PasswordFile=term_paper_read_file (". /inc/password. inc. dat");

	if (! isset ($password)) return 0;

	elseif (! isset ($PasswordFile [0])) return 0;

	elseif (strlen ($password) ==32&&isset ($_COOKIE [$term_paper ['script'] ['prefix']. "password"]) &&$_COOKIE [$term_paper ['script'] ['prefix']. "password"] ==$PasswordFile [0]) return 1;

	elseif ($password==$PasswordFile [0]) return 1;

	elsereturn 0;

	}

	if (CheckPostRequest ()) $term_paper ['access'] =CheckAdminPassword ($_COOKIE [$term_paper ['script'] ['prefix']. "password"]);

	else$term_paper ['access'] =CheckAdminPassword ( (! isset ($_COOKIE [$term_paper ['script'] ['prefix']. "password"]))? null: $_COOKIE [$term_paper ['script'] ['prefix']. "password"]);

	if (empty ($term_paper ['access']))

	{

	if (isset ($_POST ['password'])) $term_paper ['status'] ="пароль не опознан, повторите ввод";

	$term_paper ['section'] ['name'] ="Вход в управление";

	$term_paper ['result'] ='<br><table border="0" align="center" cellspacing="0" cellpadding="1">

	<form method="post">

	<tr><td align="right"><font face="verdana" size="1" color="maroon">Пароль: </td><td><input type="password" name="password" size="30" class="name" onfocus="id=className" onblur="id=\'\'"" style="font: italic; width: 165px" value=""></td></tr>

	<tr><td height="10"></td></tr>

	<tr><td align="right" colspan="2">

	<table border="0" cellspacing="0" cellpadding="1" bgcolor="#000000">

	<tr><td><input type="submit" value="Выполнить вход" class="submit" style="width: 163px"></td></tr>

	</table>

	</td></tr>

	<tr><td height="20"></td></tr>

	</form>

	</table>';

	}

	else

	{

	$term_paper ['status'] ="<a href='?". term_paper_char_generator ("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",32). "'><font color=#de0000>Главное меню</font></a>";

	$term_paper ['result'] = (! isset ($term_paper ['result']))? null: $term_paper ['result'];

	$term_paper ['section'] ['name'] ="Выберите нужное Вам действие";

	$term_paper ['result']. ="<table border=0 width=80% align=center>";

	$term_paper ['NewSections'] =array ();

	#while (list ($a,$b) =each ($term_paper ['sections']))

	#$term_paper ['result']. ="<tr><td><a href='? section=". ( ($a+1) *2*3*4*5*6*7*8*90). "'><font face=verdana size=1>". $void++. chr (46). chr (32). ucfirst ($b). "</a></td></tr>";

	while (list ($a,$b) =each ($term_paper ['sections']))

	{

	$term_paper ['result']. ="<tr><td><font face=verdana size=1><b><font color=maroon>". $a. "</font></b><ul type=square>";

	while (list ($key,$value) =each ($b))

	{

	$term_paper ['result']. ="<li><a href='? section=". ( ($key+1) *2*3*4*5*6*7*8*90). "'><font face=verdana size=1><i>". ucfirst ($value). "</i></a></li>";

	$term_paper ['NewSections'] [$key] =$value;

	}

	$term_paper ['result']. ="</ul></td></tr>";

	}

	$term_paper ['result']. ="</table>";

	$term_paper ['result']. ="</td></tr><tr><tr><td bgcolor=maroon colspan=2></td></tr><tr><td colspan=2 bgcolor=#faedcf>";

	if (empty ($section)) $term_paper ['result']. ="<center><br><font face=verdana size=1 color=green>Сделайте выбор</font></br><br></center>";

	#elseif (! isset ($term_paper ['sections'] [ ($section-1) /2/3/4/5/6/7/8/90])) $term_paper ['result']. ="<br><center><font face=verdana size=1 color=#de0000>Выбраный Вами раздел не существует</font></cebter><br><br>";

	elseif (! isset ($term_paper ['NewSections'] [ ($section-1) /2/3/4/5/6/7/8/90])) $term_paper ['result']. ="<br><center><font face=verdana size=1 color=#de0000>Выбраный Вами раздел не существует</font></cebter><br><br>";

	else

	{

	#$term_paper ['status']. =" <font color=blue>"</font> <font color=green>". $term_paper ['section'] ['name'] =ucfirst ($term_paper ['sections'] [$case=floor ( ($section-1) /2/3/4/5/6/7/8/90)]). "</font>";

	$term_paper ['status']. =" <font color=blue>"</font> <font color=green>". $term_paper ['section'] ['name'] =ucfirst ($term_paper ['NewSections'] [$case=floor ( ($section-1) /2/3/4/5/6/7/8/90)]). "</font>";

	$term_paper ['result']. ="<table border=0 width=98% align=center><tr><td><font face=verdana size=1>";

	switch ($case)

	{

	case "10":

	if (! isset ($_POST ['dir']) ||! isset ($_POST ['url']))

	$term_paper ['result']. =

	'<script language="javascript" type="text/javascript">

	<! - -

	function StartSubscripting ()

	{

	OpenSubscriptingWindow=open ("","SubscriptingWindow","toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=no,left=50,top=50,width=700,height=500");

	OpenSubscriptingWindow. focus ();

	OpenSubscriptingWindow. document. open ();

	OpenSubscriptingWindow. document. write ("<html> <head> <title>Индексация. </title> <meta http-equiv=\"pragma\" content=\"no-cache\"> <meta http-equiv=\"content-type\" content=\"text/html; charset=windows-1251\"></head><body bgcolor=#ffffff> <table border=0 width=100% height=100%> <tr><td align=center><font face=verdana size=4 color=green><i>Идёт индексация сайта, пожалуйста, подождите. </td></tr> </table> </body> </html>");

	OpenSubscriptingWindow. document. close ();

	}

	->

	</script>

	<table border=0 width=100%>

	<form method=post onSubmit=StartSubscripting () target=SubscriptingWindow>

	<tr><td height=10></td></tr>

	<tr><td align=center><font face=verdana size=1 color=maroon><i>Укажите папку, в которой берёт начало Ваш сайт (без / в конце): </td></tr>

	<tr><td align=center><input type=text name=dir size=52 class=name onfocus="id=className" onblur="id=\'\'"" style="font: italic; width: 346px" value="'.htmlspecialchars ( (isset ($_SERVER ['DOCUMENT_ROOT']))? $_SERVER ['DOCUMENT_ROOT']: null). '"></td></tr>

	<tr><td height=10></td></tr>

	<tr><td align=center><font face=verdana size=1 color=maroon><i>Укажите URL, который соответствует папке,<br>которую Вы указали (без / в конце): </td></tr>

	<tr><td height=10></td></tr>

	<tr><td align=center><input type=text name=url size=52 class=name onfocus="id=className" onblur="id=\'\'"" style="font: italic; width: 346px" value="http://'.htmlspecialchars ( (isset ($_SERVER ['HTTP_HOST']))? $_SERVER ['HTTP_HOST']: null). '"></td></tr>

	<tr><td height=10></td></tr>

	<tr><td align=center>

	<table border=0 cellspacing=0 cellpadding=1 bgcolor=#000000>

	<tr><td><input type=submit value="Начать индексирование" class=submit style="width: 150px"></td></tr>

	</table>

	</td></tr>

	<tr><td height=10></td></tr>

	<tr><td align=center><font face=verdana size=1 color=#de0000><i> (скорость индексации зависит от быстроты Вашего компьютера,<br>обязательно дождитесь окончания индексации) </td></tr>

	</form>

	</table>';

	else

	{

	if (! is_dir ($_POST ['dir']))

	$term_paper ['result']. ="<center><font face=verdana size=1 color=#de0000><b><br><br><br><br>Указанная Вами папка не существует<br><br><br><br><br></b></font></center>";

	elseif (! is_readable ($_POST ['dir']))

	$term_paper ['result']. ="<center><font face=verdana size=1 color=#de0000><b><br><br><br><br>Нет прав для чтения указанной Вами папки<br><br><br><br><br></b></font></center>";

	else

	{

	$_POST ['dir'] =preg_replace ("/\\\+/",chr (47),$_POST ['dir']);

	preg_match_all ("/\w+/",term_paper_stripslashes ($term_paper ['other'] ['NotAllowed']),$NotAllowedArray);

	$NotAllowedTemp=array_unique ($NotAllowedArray [0]);

	$NotAllowedArray [0] =null;

	while (list (,$value) =each ($NotAllowedTemp))

	$NotAllowedArray [0] [] =$value;

	if (! $NotAllowedCount=count ($NotAllowedArray [0]))

	$NotAllowed=chr (32);

	else

	{

	$NotAllowed=" (";

	for ($i=0; $i<$NotAllowedCount; $i++)

	if ($i! = ($NotAllowedCount-1))

	$NotAllowed. =$NotAllowedArray [0] [$i]. "|";

	else

	$NotAllowed. =$NotAllowedArray [0] [$i];

	$NotAllowed. =")";

	}

	function DirSubscripting ($dir)

	{

	global $term_paper,$OpenData,$NotAllowed;

	if (is_readable ($dir2=$dir))

	{

	$OpenDir=opendir ($dir);

	while ( ($file=readdir ($OpenDir))! ==false)

	{

	if ($file! =". "&&$file! =". "&&! preg_match ("/". $NotAllowed. "/i",$file))

	{

	if (is_dir ($dir. chr (47). $file))

	DirSubscripting ($dir. chr (47). $file);

	else

	{

	$OpenFile=fopen ($dir. chr (47). $file,'r');

	$content=fread ($OpenFile,filesize ($dir. chr (47). $file));

	preg_match ("! <title> (. *) </title>! is",$content,$title);

	$content=term_paper_strip_new_line (strip_tags ($content));

	$content=preg_replace ("/ +/s"," ",$content);

	preg_match_all ("/\w+/i",$content,$ContentArray);

	if (! empty ($title [1]))

	{

	$title [1] =term_paper_strip_new_line ($title [1]);

	preg_match_all ("/\w+/i",$title [1],$NewTitle);

	$title [1] =null;

	while (list (,$string) =each ($NewTitle [0]))

	$title [1]. =$string. chr (32);

	}

	$dir2=eregi_replace (strtolower ($_POST ['dir']),"",$dir2);

	$content=null;

	while (list (,$string) =each ($ContentArray [0]))

	$content. =$string. chr (32);

	if (! empty ($content))

	fwrite ($OpenData,$_POST ['url']. $dir2. chr (47). $file. chr (32). ( (isset ($title [1]))? str_replace (" ","&nbsp; &shy; ",$title [1]): str_replace (" ","&nbsp; ",$term_paper ['other'] ['untitled'])). chr (32). $content. chr (13). chr (10));

	fclose ($OpenFile);

	}

	}

	}

	}

	}

	$OpenData=fopen ($term_paper ['file'] ['data'],'w');

	DirSubscripting ($_POST ['dir']);

	fclose ($OpenData);

	$term_paper ['result']. ="<center><font face=verdana size=1 color=green><b><br><br><br><br>Сайт удачно проиндексирован<br><br><br><br><br></b></font></center>";

	}

	}

	break;

	case "20":

	if (empty ($_POST))

	$term_paper ['result']. =<<<HTML

	<br><i><font face=verdana color=#de0000>Будьте внимательны! </font><br><i><ul type=square><li>После изменения пароля старый действовать больше не будет. </li><li>Для того чтобы не забыть новый пароль, запишите его где-нибудь. </li><li>В пароль могут входить: русские, латинский буквы и цифры. </li><li>Учитывается регистр. </li></ul></i>

	<br>

	<form method=post>

	<center>Новый пароль: <input type=password name=NewPassword size=52 class=name onfocus="id=className" onblur="id=''"" style="font: italic; width: 346px"></center>

	<br><br>

	<center>

	<table border=0 cellspacing=0 cellpadding=1 bgcolor=#000000>

	<tr><td><input type=submit value=Применить class=submit style="width: 70px"></td></tr>

	</table>

	</center>

	</form>

	HTML;

	else

	{

	if (empty ($_POST ['NewPassword'])) $term_paper ['result']. ="<br><center><font color=#de0000>Вы не ввели новый пароль. </font><br><br>. <a href='? section=148780800'>вернуться на шаг назад</a><br><br></center>";

	elseif (! eregi ("^ [a-zа-яё0-9] +$",$_POST ['NewPassword'])) $term_paper ['result']. ="<br><center><font color=#de0000>Пароль должен состоять, только из русских, латинский букв и цифр. </font><br><br>. <a href='? section=148780800'>вернуться на шаг назад</a><br><br></center>";

	else

	{

	$term_paper ['okay'] =1;

	$OpenPasswordFile=fopen (". /inc/password. inc. dat","w");

	flock ($OpenPasswordFile,1);

	flock ($OpenPasswordFile,2);

	fwrite ($OpenPasswordFile,md5 ($_POST ['NewPassword']));

	fclose ($OpenPasswordFile);

	setcookie ($term_paper ['script'] ['prefix']. "password",md5 ($_POST ['NewPassword']));

	$term_paper ['result']. ="<br><center><font color=green>Новый пароль успешно внесён в базу. </font><br><br></center>";

	}

	}

	break;

	case "30":

	$term_paper ['section'] ['name'] ="Версия PHP интерпретатора";

	$term_paper ['result']. ="<br><center>Версия PHP интерпретатора - <i><font color=maroon>". phpversion (). "</font></i><br><br>". ( (php_sapi_name () =="cgi")?"<font color=green>Установлен в качестве CGI</font>": "<font color=#de0000>Установлен в качестве модуля</font>"). "</center><br>";

	break;

	case "40":

	$term_paper ['section'] ['name'] ="Операционная система";

	list ($os) =split (" ",php_uname (),2);

	$term_paper ['result']. ="<br><center>Операционная система - <i><font color=maroon>". $os. "</font></i></center><br>";

	break;

	case "100":

	echo "цикл не работает";

	}

	$term_paper ['result']. ="</font></td></tr></table>";

	}

	}

	if (empty ($term_paper ['status'])) $term_paper ['status'] ="вход не выполнен";

	? >

	<html>

	<head>

	<title><? =$term_paper ['script'] ['name'],", версия: ",$term_paper ['script'] ['version']? > " Управление " <? =ereg_replace ("< [^>] +>", "",ucfirst ($term_paper ['status']))? ></title>

	<meta http-equiv="content-type" content="text/html; charset=windows-1251">

	<meta http-equiv="pragma" content="no-cache">

	<? if (isset ($term_paper ['okay'])) echo '<meta http-equiv="refresh" content="3; url=? '. term_paper_char_generator ("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890",32). '">';? >

	<style type="text/css">

	<! - -

	a: link{color: #000000; text-decoration: none; }

	a: active{color: #000000; text-decoration: none; }

	a: visited{color: #000000; text-decoration: none; }

	a: hover{color: #de0000; text-decoration: none; }

	. name{border: 1px; border-style: solid; height: 16px; border-color: #000000; background-color: #ffe6b7; font-family: verdana; font-size: 10px; color: #de0000; }

	#name{border: 1px; border-style: solid; height: 16px; border-color: #000000; background-color: #fef1d8; font-family: verdana; font-size: 10px; color: #de0000; }

	. submit{border: 0px; height: 14px; background-color: #ffe6b7; font-family: verdana; font-size: 10px; color: #000000; }

	->

	</style>

	</script>

	</head>

	<body bgcolor=#ffffff background="images/background. gif" style="cursor: default" topmargin=3>

	<table border=0 align=center cellspacing=0 cellpadding=1>

	<tr><td align=right><font face=verdana size=1 style="background-color: #ffffff" color=#de0000><? =$term_paper ['status']? ></font></td></tr>

	<tr><td>

	<table width=500 align=center cellspacing=1 cellpadding=1 bgcolor=#faad1e>

	<tr align=center bgcolor=#faedca height=44><td><font face=verdana size=6 color=#FAD27D><b><? =$term_paper ['script'] ['name']? ></i></b></font></td></tr>

	<tr><td align=cetner bgcolor=#faedc0>

	<table border=0 align=center cellspacing=0 cellpadding=1 width=470>

	<tr><td height=10></td></tr>

	<tr><td bgcolor=maroon colspan=2></td></tr>

	<tr><td align=center bgcolor=#faedca colspan=2><font face=verdana color=maroon size=1><? = (isset ($term_paper ['section'] ['name']))? $term_paper ['section'] ['name']: ''? ></font></td></tr>

	<tr><td bgcolor=maroon colspan=2></td></tr>

	<tr><td height=10></td></tr>

	<tr><td bgcolor=maroon colspan=2></td></tr>

	<tr><td colspan=2 bgcolor=#faedca><? = (isset ($term_paper ['result']))? $term_paper ['result']: ''? ></td></tr>

	<tr><td bgcolor=maroon colspan=2></td></tr>

	<tr><td height=10></td></tr>

	</table>

	</td></tr>

	</table>

	</td></tr>

	<?

	if (! empty ($term_paper ['access']))

	{

	echo "<tr><td align=right><font face=verdana size=1> (<a href='? exit'>закрыть сессию</a>) </font></td></tr>";

	}

	? >

	</table>

	<br><br><br>

	<div align="center">

	<table>

	<tr><a href=". /down.html">На главную</a></tr>

	<tr><img src=". /img/logo_pic. gif"></tr>

	</table></div>

	</body>

	</html>

	Изображения хранятся в папке "img", скрипты поиска в папке "search".