|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Файлообменник с веб-интерфейсомФайлообменник с веб-интерфейсом1 Московский Государственный Технический Университет им. Н.Э. Баумана Калужский филиал Кафедра ЭИУ5-КФ Системы Автоматизированного Проектирования Курсовая работа на тему: «Файлообменник с веб-интерфейсом» Калуга, 2007 Содержание
Apache has been the most popular web server on the Internet since April 1996. The November 2005 Netcraft Web Server Survey found that more than 70% of the web sites on the Internet are using Apache, thus making it more widely used than all other web servers combined» Проект HTTP-сервера Apache - это попытка разработки и установки HTTP-сервера с открытыми исходными кодами для современных операционных систем, включая UNIX и Windows NT. Цель этого проекта - обеспечить безопасный, эффективный и масштабируемый сервер, который обеспечит HTTP-сервисы в соответствии с текущими стандартами HTTP. С апреля 1996 Apache стал наиболее популярным сервером интернета. В ноябре 2005 года обзор веб-серверов Netcraft обнаружил, что 70% сайтов интернета используют Apache, делая его таким образом более широко используемым, чем все другие веб-сервера вместе взятые..Кроме того, по Апачу много вполне понятной документации, он прост в установке и настройке, очень мало весит (меньше 5М), работает исключительно стабильно.Редакторы кодаДля написания кода я использовал 2 текстовых редактора.Первый - AkelPad - это бесплатный текстовый редактор для Windows, призванный заменить Блокнот, входящий в состав этой системы. Разработан Алексеем Кузнецовым, студентом 5го курса физтеха.Его преимущества: · маленький размер (менее 20 Кб в архиве) · работа с файлами произвольного размера (тогда как у Блокнота есть ограничение 64 Кб) · работа с кодировками: Windows, DOS, КОИ8-Р, различные варианты Unicode (UCS-2LE, UCS-2BE, UTF-8), а также с любой кодовой страницей, установленной в системе · корректное автоопределение кодировки · поиск и замена как обычных строк текста, так и последовательностей специальных символов · продуманные "горячие" клавиши назначены почти каждой команде (выход по ESC, сохранить по F2 и т.п.) · простота и отсутствие перегруженности ненужными и усложняющими работу функциямиПодробнее - akelpad.net.ruВторой - EditPlus. Это уже коммерческий (платный) редактор. Цитата:EditPlus is an Internet-ready 32-bit text editor, HTML editor and programmers editor for Windows. While it can serve as a good replacement for Notepad, it also offers many powerful features for Web page authors and programmers.· Syntax highlighting for HTML, CSS, PHP, ASP, Perl, C/C++/C#, Java, JavaScript and VBScript. Also, it can be extended for other programming languages based on custom syntax files.· Seamless Web browser for previewing HTML pages, and FTP commands for uploading local files to FTP server.· Other features include HTML toolbar, user tools, line number, ruler, URL highlighting, auto-completion, cliptext, column selection, powerful search and replace, multiple undo/redo, spell checker, customizable keyboard shortcuts, and more. EditPlus - это 32-разрядный текстовый редактор в среде Интернет, редактор HTML-кода и редактор программистов для Windows. В то время, как он служит отличной заменой Блокноту, он также предлагает ряд мощных средств для авторов веб-страниц и программистов. · Подсветка синтаксиса для HTML, CSS, PHP, ASP, Perl, C/C++/C#, Java, JavaScript и VBScript. Кроме того, он может быть расширен для других языков программирования, основываясь на файлах со стандартным синтаксисом. · Безупречный веб-браузер для предварительного просмотра HTML-страниц и команд FTP для загрузки локальных данных на FTP-сервер. · Другие средства, включая панель HTML-инструментов, инструменты пользователя, номера строк, линейка, подсветка URL, автозавершение вырезок текста, выбор колонок, мощный механизм поиска/замены, возможность многократной отмены/повтора, проверка орфографии, переназначаемые «горячие клавиши» и др.Уже не так быстр, как AkelPad, но довольно удобен в настройке и работе. Рекомендован 440hz.ru.Инструкция программистаСистемные требованияДля работы этого проекта необходим сервер и клиент. Сервер должен состоять из операционной системы с установленным веб-сервером, базой данных MySQL и интерпретатором PHP(4) версии не менее 4.3.2.Клиент должен иметь графический браузер, поддерживающий протокол HTTP, стандарты HTML4 и CSS2.Я использовал следующую конфигурацию:Сервер: Win32, Apache 2.0.55, PHP 4.4.2, MySQL 4.0.26Клиент: Win32, Opera 8.52Инструкция по установкеДля установки проекта необходимо в файл init.class прописать необходимые значения - путь к проекту, e-mail тех.поддержки и реквизиты БД (логин, пароль, имя БД).Веб-сервер настраивается следующим образом (на примере Apache):DocumentRoot "путь:/к/проекту/public_html"DirectoryIndex main.phpНу и ещё такая важная вещь - в php.ini параметр register_globals должен быть установлен в Off (сейчас это делают по умолчанию).Этого должно хватить для успешной работы проекта.Структура проектаОписание исходных кодовДля построения этого проекта, как видно из схемы на предыдущей странице, был взят принцип организации сайтов Руслана Курепина.Чтобы не объяснять всё с самого начала, приведу здесь сразу код главной страницы сайта и объясню построчно. Cтрочки пронумерованы.файл: public_html/main.php1. Открываем скобку - входим в режим PHP.<?2. Подключаем класс. Такая форма записи позволяет переносить проект по папкам, не исправляя каждый раз путь к файлу.require(str_replace('/public_html','/class',$_SERVER['DOCUMENT_ROOT']).'/main.class');3. Создаём экземпляр класса.$my=new class_main;4. Подключаем on_load.inc - действия, выполняющиеся для многих страниц.include($my->path_inc.'/on_load.inc');5. Заголовок страницы - отображается в двух местах.$title='Main Page';6. Навигатор.$navigator='<a href=/>Главная</a>';7. Все критические функции выполнены, мы знаем что страница загрузится - отправляем HTTP-заголовки (хидеры).$my->send_headers();8-9. Подключаем инклуды (подключаемые куски кода).include($my->path_inc.'/top.inc');include($my->path_inc.'/middle.inc');10. Выходим из режима PHP?>11-12. Выдаём HTML-код без обработки, а именно 2 строчки приветствия<p>какой-то текст на главной странице.<br>например, такой:<p>Здравствуйте!<br>Это файлообменник, моя курсовая за 4 семестр.<br>13-15. Подключаем нижнюю часть таблички.<?include($my->path_inc.'/bottom.inc');?>Следует заметить, что после 8 строчки я не использую flush()… наверное, это нецелесообразно в таком маленьком проекте.Теперь подробно рассмотрим инклуды.inc/top.inc1. Говорим браузеру, что это HTML 4.0<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">2. Начало HTML-кода.<html>3. Открываем head.<head>4. Подключаем иконку<link rel="shortcut icon" href="/i/logo.gif">5. Строка добавлена для поддержки просмотрщика счётчика, чтобы меньше модифицировать код. Суть: если вызван файл counter.php, то подключается нужный CSS-файл<? if(preg_match("/counter.php/",$_SERVER['REQUEST_URI'])) {?> <link rel="stylesheet" href="/css/css_engine.css" type="text/css"><?}?>6. Подключаем основную css-ку. В случае счётчика она выше по приоритету, чем предыдущая, поэтому затирает лишние стили.<link rel="stylesheet" href="/css/main.css" type="text/css">7. Говорим браузеру, что эта страница не предназначена для размещения во фреймах.<meta http-equiv="Window-target" content="_top">8. Сведения об авторе.<meta name="Author" content="<?=$my->copy_name?>">9. Мой любимый текстовый редактор<meta name="Generator" content="<?=$my->generator?>">10. Версия сайта.<meta name="Version" content="<?=$my->version?>">11. Заголовок - показывается вверху окна.<title><?=$title?> :: <?=$my->site_name?></title>12,13. Закрываем head, открываем body - начинаем рисовать страничку.</head><body>14. Таблица во всю ширину экрана<table width="100%" border=0>15,16. Надпись: File Exchanger.<tr><td valign="bottom"><nobr><h2 id="top_h3"><?=$my->site_name?></h3></nobr></td>17. Заголовок: Main Page (или какой там прописан в $title)<td rowspan=2 id="top_title"><?=$title?></td>18-20. Форма для гейта (вход-выход)<td rowspan=2><? include($my->path_inc.'/login_form.inc'); ?></td>21-23. пишем второй строчкой версию и закрываем таблицу</tr><tr><td valign=top><p id="top_version"><?=$my->version?></td></tr></table>24. навигатор, который мы заранее прописали в $navigator. <hr><p id="navv">навигатор :: <?=$navigator?><hr>Небольшое теоретическое отступление по поводу CSS.Вообще, существует три способа использования CSS.1. Включение CSS непосредственно в HTML-код. Например, так:<p style="text-align:center;color:#d00">Красный цвет по центруМожет использоваться для одноразовых включений в HTML (наряду с <font>) и в случаях, когда нецелесообразно менять существующие CSS-файлы или подключать новые.2. Включение CSS в блоке <head> страницы. Вот так:<html><head>...<style>red {color:#f00}</style></head><body>...<p class=red>Красный текст...</body></html>Такой способ не рекомендуется применять, однако это предпочтительно в одном случае - если дизайн сайта, настраивается под каждого пользователя индивидуально. Кодеру меньше работы - переменные дизайна банально вставляются на нужные места и нет смысла писать несколько CSS-ок.3. Подключение внешних CSS-файлов. Реализуется так:<link rel=stylesheet href=css/mycss.css type=text/css>И в нужную папку кладётся нужный файл.Как видно, в этом проекте я использую третий способ.inc/middle.inc1. основная таблица во весь экран.<table cellspacing=5 cellpadding=5 width="100%" border=0>2. она состоит из одной строчки.<tr><td width=200 valign="top">3. в первой ячейке - содержимое menu.inc.<? include($my->path_inc.'/menu.inc'); ?>4-5. во второй - результат гейта (вы зашли успешно либо вы не зашли вообще). Потом начинается основной текст.</td><td valign="top"><?=$my->gate_result?>inc/bottom.inc1-2. закрываем основную таблицу</td></tr></table>3. копирайт<p id="copy">© 2006 <a href="<?=$my->copy_url?>"><?=$my->copy_name?></a>.4-5. конец HTML</body></html>Теперь объясняю что за переменные типа $path_inc, $copy_name, $site_name, $generator, $version и др. Встречались в предыдущих инклудах. Эти глобальные переменные прописаны в init.class. Вот он:<?Называем класс и открываем скобкуclass class_init{Пути к проекту на диске - при переносе должны быть измененыvar $path_data='d:\Work\FileExchanger alpha\data';var $path_inc='d:\Work\FileExchanger alpha\inc';var $path_files='d:\Work\FileExchanger alpha\files';var $path_http='http://localhost/';копирайтvar $copy_name='stbear-l2';var $copy_url='http://copi.ru/68614';мой любимый редакторvar $generator='AkelPad 2.1.6';имя сайта - отображается в top.incvar $site_name='File Exchanger';адреса e-mailvar $email_support='stbear@centrum.cz';var $email_robot='robot@localhost';версияvar $version='alpha4+';время кэширования страниц (функция send_headers())var $cache_time=180;максимальный номер ошибки, которая отправляется админу.var $debug_level=50;указатель на соединение с базойvar $sql_link;реквизиты доступа к БДvar $sql_host='localhost';var $sql_login='root';var $sql_pass='';var $sql_db='db_files';запрос формируется в этой переменнойvar $sql_task;ошибки SQL (для дебага)var $sql_error;var $sql_errno;результат выполнения запросаvar $sql_res;Стартует соединение с БД, если этого не было сделано ранееfunction sql_start(){Устанавливаем соединение с SQL-сервером. Использовать pconnect предпочтительнееif(!$this->sql_link=@mysql_pconnect($this->sql_host,$this->sql_login,$this->sql_pass)) return(11);Выбираем нашу БД.if(!@mysql_select_db($this->sql_db)) return(12);return(0);}Основная функция для взаимодействия с БДfunction sql_run(){Если нет соединения с БД, вызывается sql_start()if(!$this->sql_link) if($err=$this->sql_start()) return($err);собственно выполняется запрос$this->sql_res=@mysql_query($this->sql_task,$this->sql_link);Проверяем, были ли ошибкиif($this->sql_errno=mysql_errno($this->sql_link)){Если была ошибка, запоминаем её описание и возвращаем ошибку 13 - «ошибка выполнения запроса»$this->sql_error=@mysql_error($this->sql_link);return(13);}return(0);}}конец?>Main.class нет смысла описывать из-за его размера.Распишу оставшийся инклуд.inc/on_load.inc<?Запускаем счётчикif($err=$my->counter()) $my->get_err($err);если есть переменная, полученная от формы входаif(@$_POST['gate_submit']){Проверяем логин и парольif($err=$my->gate_open()) $my->gate_result=$my->get_err($err);else $my->gate_result='<p class=ok>Вы успешно вошли в систему.';}Если пользователь решил выйти, удаляем сессиюif(isset($_GET['out'])) $my->gate_close();восстановление сессии по кукамelseif($err=$my->recognize_cookie()) $my->get_err($err);?>Для примера приведу функцию добавления файла.Ппеременные с говорящими именами - объявляются в начале классаvar $in_file_ext;var $in_file_cat;var $in_file_desc;var $in_file_name;var $in_file_user;var $in_file_id;var $in_file_enable;var $in_file_dt;var $in_file_size;объявление функцииfunction in_file_add(){Если пользователь не зарегистрирован, то что он тут делает?if(!$_SESSION['status']) return(6);проверка файла, теперь переменные «наполнились»if($err=$this->in_file_check()) return($err);файл и данные в порядке, составляем запрос$this->sql_task='insert into tbl_files(f_ext,f_name,f_desc,f_dt,f_size,f_user) values(\''.$this->in_file_ext.'\',\''.$this->in_file_name.'\',\''.$this->in_file_desc.'\',\''.$this->in_file_dt.'\',\''.$this->in_file_size.'\',\''.$this->in_file_user.'\')';а теперь выполняем запросif($err=$this->sql_run()) return($err);данные добавились, получаем ID$this->sql_task='select last_insert_id()';if($err=$this->sql_run()) return($err);if(!list($this->in_file_id)=mysql_fetch_row($this->sql_res)) return(14);перемещаем файлif(!move_uploaded_file($_FILES[$this->in_file_user]['tmp_name'],$this->path_files.'/'.$this->in_file_id.'.'.$this->in_file_ext)) {если он не перемещён, удаляем запись из базы...$this->sql_task='delete from tbl_files where f_id='.$this->in_file_id;if($err=$this->sql_run()) return($err);...и возвращаем ошибкуreturn(23);}Файл удачно перемещён, делаем связку с рубрикой$this->sql_task='insert into tbl_cats_files(cf_cat,cf_file) values(\''.$this->in_file_cat.'\',\''.$this->in_file_id.'\')';if($err=$this->sql_run()) return($err);если не стоит галка «Скрыть файл», разрешаем:if(!@$_POST['file_enable']){if($err=$this->in_file_enable()) return($err);if($err=$this->in_cat_file_enable()) return($err);}$this->result='<p class=ok>Файл успешно добавлен.Теперь он всегда доступен по ссылке :<br> <a href=http://'.$_SERVER['HTTP_HOST'].'/get.php?id='.$this->in_file_id.'>http://'.$_SERVER['HTTP_HOST'].'/get.php?id='.$this->in_file_id.'</a>.';Всё в порядке, возвращаем ноль.return(0);}Фрагмент public_html/file/add.php (форма)Enctype добавляется, тк мы используем POST-аплоад файлов<form enctype="multipart/form-data" action="<?=$_SERVER['REQUEST_URI']?>" method=post>Информация для пользователейПараметры добавляемого файла:<br><br>author: <?=$_SESSION['login']?>, date: <?=$my->get_dt()."\n"?>, рубрика:Тут выводится список рубрик<? echo $my->generate_option_list(); ?><br>Название файла: <input type=text name=file_name value="<?=@$_POST['file_name']?>" size=80 maxlength=50><br>Описание:<br><textarea name=file_desc cols=80 rows=5><?=@$_POST['file_desc']?></textarea>Имя файловой переменной - логин пользователя (так проще)<br><br>Сам файл: <input type=file name="<?=$_SESSION['login']?>"><br>Скрыть файл? <input type=checkbox name=file_enable value="тра-ля-ля!!!"<? if(@$_POST['file_enable']) echo 'checked'; ?>><font size=1>при включённой опции файл не будет отображаться в рубрике, но будет доступен по по сгенерированному URL-адресу</font><br><input type=submit name=submit value="Добавить!"></form>Принцип работы остальных функциональных частей аналогичен приведённым примерам. Кроме того, текст скриптов понятен и без комментариев.Инструкция пользователяДля запуска программы необходимо запустить любой браузер и в строке URL ввести localhost или 127.0.0.1. На вашем экране появится следующая страница (рис.1):Рис.1 Главная страница файлообменника.Теперь вам следует зарегистрироваться. Если у Вас еще нет своего имени (логина) и пароля, щелкните мышкой на пункте меню «Регистрация». На открывшейся странице (рис.2) заполните поля «логин», «пароль» , повторите Ваш пароль в поле «Исчо разок». Если данные введены верно, нажмите кнопку «Регистрировать».По умолчанию длина логина пользователя не может быть меньше 2 символов, а длина пароля - меньше 4.Если Вы зарегистрировались успешно, сообщение об этом появится на страничке (см.рис.3). Теперь Вы сможете войти в систему как зарегистрированный пользователь. Для этого введите логин и пароль в окошке справа вверху и нажмите кнопку «Войти». Если логин и пароль введены правильно, появится сообщение «Вы успешно вошли в систему» и следующая страничка (см.рис.4).Рис.2 Страница регистрации.Введите логин и пароль в окошке справа вверху и нажмите кнопку «Войти». Рис.3 Страница с сообщением об успешной регистрации.Рис.4. Страничка зарегистрированного пользователя.Слева странички расположено меню. Для простого пользователя оно состоит из трех разделов: - Рубрики;- Пользователи;- Файлы.Для пользователя со статусом «Администратор» добавлены разделы - Рубрики \редактирование\;- АдминистрированиеРассмотрим разделы меню подробнее1. Рубрики.Здесь перечислены темы, по которым группируются предлагаемые файлы. Щелчок левой кнопкой мыши по названию рубрики открывает перечень файлов выбранной тематики.В примере на рис.5 на странице одновременно отображается перечень из 5 файлов. Если в рубрике больше 5 файлов - вверху и внизу странице появляется список листов. Выбрав следующую страницу Вы можете прочитать продолжение списка файлов.Для каждого файла приводится краткая информация, автор, размер, дата последнего обновления, рейтинг популярности (количество скачиваний). Нажав на ссылку Download, относящуюся к выбранному Вами файлу, вы можете скачать его для дальнейшего использования.Рис.5. Перечень файлов рубрики TEST_CAT 1.ПользователиВ этом разделе только один пункт - «Настройка». Выбрав этот пункт вы можете изменить свой логин и пароль, количество файлов, одновременно отображаемых на странице, а также данные для связи с вами, такие как URL и ICQ (см.рис.6).Рис.6. Страница настройки характеристик работы пользователя.2. ФайлыЭтот раздел содержит пункты, позволяющие изменять файлы предлагаемых рубрик:- ДобавитьВ этом пункте вы можете выбрать файл для передачи в файлообменник, ввести его название, краткое описание. Файл можно поместить в одну из существующих рубрик (рис.7).Если Вы не хотите, чтобы имя Вашего файла появлялось в перечне файлов рубрики, его можно пометить как скрытый. При этом доступ к файлу можно будет осуществлять по ссылке. В любом случае этот параметр всегда можно изменить через страницу изменения файлов.Рис.7 Страница добавления файла.- ИзменитьВыбрав пункт Изменить, Вы открываете страничку с перечнем файлов по рубрикам(рис.8). У вас есть возможность выбрать рубрику и файл для внесения изменений.Если Вы простой пользователь, Вы можете редактировать только свои файлы. Если Вы администратор или модератор - Вам доступны файлы всех пользователей.Для внесения изменений в файл открывается страница как на рис.9. Вы можете изменить название файла, его описание, поменять рубрику, открыть/скрыть файл, загрузить иную версию файла. Рис.8. Страница со списком файлов для изменения.Рис.9 Страница изменения файла.- Удалить В перечне файлов (рис.10) Вы можете выбрать файл для удаления.Если Вы простой пользователь, Вы можете удалять только свои файлы. Если Вы администратор или модератор - Вам доступны файлы всех пользователей.Рис.10. Страничка удаления файла.РубрикиЭтот раздел доступен только администратору и содержит пункты, позволяющие изменять рубрики:- ДобавитьЗдесь вы можете создать новую рубрику. Для этого нужно ввести её название - оно будет отображаться в списке рубрик - и описание - оно появляется при просмотре содержимого рубрики (рис. 11).Рис.11 Страница добавления рубрики.- ИзменитьДля изменения рубрики вы выбираете её из списка (рис.12).Рис.12 Страница со списком рубрик для изменения.Открывается страница (рис.13), в которой вы сможете изменить название и описание рубрики, а также запретить или разрешить её.Рис.13 Страница изменения рубрики.- УдалитьДля удаления рубрики её нужно выбрать из списка (рис.14). Рис.14 Страница удаления рубрик.3. АдминРаздел «Администрирование» создан для контроля эффективности работы файлообменника.- СчетчикЭта страничка позволяет просмотреть результаты работы счётчика. Состоит из 2х частей: в первой части (рис. 15) подсчитывается число обращений к отдельным страницам сайта. Во второй части (рис. 16) записываются IP-адреса зашедших на сайт.Рис.15 Просмотр числа зашедших на различные URL сайта.Рис.16 Страница для просмотра данных о зашедших на сайт посетителях.- юзеры (пользователи)На этой страничке (рис.17) можно просмотреть список пользователей и совершить над ними простые действия: повысить до модератора (синяя стрелка вверх), снять статус модератора (жёлтая стрелка вниз) или удалить (красный крестик). Также можно просмотреть дополнительную информацию о пользователе, щёлкнув на его логине (рис.18). Щёлкнув по IP-адресу (если это не 127.0.0.1), вы увидите данные о провайдере.Рис.17 Страница для просмотра списка пользователей.Рис.18 Страница для просмотра информации о конкретном пользователе.- ошибкиНа этой страничке (рис. 19) вы можете просмотреть лог ошибок, которые не удалось оправить тех.поддержке посредством SMTP-сервера, чтобы вы могли принять меры для их устранения.Рис.19 Страница для просмотра лог-файла ошибок.ЗаключениеВ ходе курсовой работы был создан файлообменник, работающий под управлением PHP и MySQL.В следующей версии файлообменника мне хотелось бы добавить: 1. Более совершенный счётчик, осуществляющий автоопределение пользователей и ботов, зашедших на сайт с выводом удобной статистики.2. Работа с e-mail (регистрация, подтверждение, рассылка, аттачи)3. Сокрытие переменных в адресной строке (как на 440hz.ru)Задание на курсовой работе было выполнено полностью и в соответствии с техническим заданием.Список литературы1. Люк Веллинг, Лора Томсон «MySQL. Учебное пособие.» Москва, Вильямс, 20052. http://php.net - официальный сайт PHP3. http://phpclub.ru - сайт русских PHP-программистов.4. http://php.ru - новый русскоязычный сайт о PHP5. http://440hz.ru - персональный сайт Андрея Лугового, одного из создателей php.ru6. http://kurepin.ru - персональный сайт Руслана Курепина7. http://akelpad.net.ru - сайт редактора AkelPad8. http://editplus.com - сайт редактора EditPlus9. http://httpd.apache.org - официальная страница веб-сервера Apache10. http://phpwars.net - PHP Wars, сайт о практических применениях PHP11. http://pterodactyl.l2p.net - сайт Птеродактиля о PHP12. http://webdeveloper.net.ru - ещё один форум для веб-разработчиков |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |