Веб-студия, создание сайтов, создание Интернет-магазинов
-
Рубрики
-
Календарь
Май 2012 Пн Вт Ср Чт Пт Сб Вс « Авг 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Архивы
- Август 2011 (6)
- Март 2011 (3)
- Февраль 2011 (3)
- Ноябрь 2010 (7)
- Октябрь 2010 (2)
- Сентябрь 2010 (7)
- Август 2010 (8)
- Июль 2010 (11)
- Июнь 2010 (9)
- Май 2010 (16)
- Апрель 2010 (48)
- Март 2010 (23)
- Февраль 2010 (14)
- Январь 2010 (14)
- Декабрь 2009 (9)
- Ноябрь 2009 (6)
- Октябрь 2009 (8)
- Сентябрь 2009 (13)
- Август 2009 (22)
- Июль 2009 (30)
- Июнь 2009 (46)
- Май 2009 (28)
- Апрель 2009 (14)
- Март 2009 (8)
- Февраль 2009 (11)
Новые комментарии
- Галина к записи С Днем сисадмина!
- Примеры скриптов « Эхо блогосферы к записи Разбор XML файла с помощью PHP
- Примеры скриптов « Эхо блогосферы к записи Разбор XML файла с помощью PHP
- admin к записи Сделать спойлер
- admin к записи Сделать спойлер
- Sveta к записи Сделать спойлер
- Sveta к записи Сделать спойлер
- Димыч к записи Простой скрипт для создания превью
Новости на PHP и MySQL
Сейчас практически на любом веб-сайте существует такой раздел, как «Новости сайта». В нем публикуются новости, каким-либо образом связанные с работой сайта: добавление новых материалов, появление новых сервисов, пополнение в команде сайта – все это находит отражение в «Новостях сайта». Другими словами, при помощи новостей владелец сайта показывает посетителям историю развития своего веб-сайта.
У вас тоже есть свой веб-сайт? И вы публикуете на нем новости? Согласитесь, было бы очень неплохо несколько автоматизировать процесс работы над новостями (добавление, изменение, удаление). Об этом я и расскажу. В статье будет подробно рассмотрен вопрос создания достаточно простого скрипта на языке веб-программирования PHP для отображения новостей на сайте. Информация (в данном случае это – текст новостей) хранится на сервере, к ней можно обращаться при помощи скриптов.
Существует две возможности хранения информации на сервере – в виде текстовых файлов и с использованием баз данных (в Интернете чаще всего используется СУБД MySQL, она поддерживается практически всеми платными хостингами, да и многими бесплатными).
Для новичка в PHP лучше работать с текстовыми файлами. Это и проще, и нагляднее. Всегда можно просто открыть текстовый файл «вручную» и посмотреть, что в нем хранится.
Но для более-менее серьезных проектов гораздо практичнее использовать базы данных. Сами посмотрите – все более-менее серьезные общедоступные скрипты форумов вроде phpBB, Invision Power Board, VBulletin, используют для хранения информации именно базы данных.
Почему? При использовании даже для небольших веб-проектов у баз данных есть ряд преимуществ по сравнению с текстовыми файлами. Например:
1. Несравненно более быстрый доступ к информации, чем тот, который обеспечивают «обычные» текстовые файлы
2. При помощи SQL-запроса достаточно просто сделать поиск данных в таблицах базы данных
3. Многопользовательский доступ. При использовании баз данных не стоит беспокоиться о том, что к одному файлу для перезаписи могут одновременно обратиться два и более посетителей. Для предотвращения подобных сутаций при работе с текстовыми файлами используют блокировку файла для записи, что необходимо программировать самому разработчику.
Это далеко не все преимущества использования баз данных. В небольших проектах допустимо использовать текстовые файлы, однако если планируется создать большой и посещаемый проект – без баз данных не обойтись.
Скрипт новостей, описанный в этой статье, использует для хранения информации СУБД MySQL.
Для того, чтобы все приведенные в статье скрипты заработали на вашем компьютере без подключения к Интернету, у вас должен быть установлен локальный веб-сервер Apache с поддержкой PHP и MySQL.
Если же у вас на компьютере еще не установлен Apache, то самое время сделать это. Самому установить веб-сервер и настроить его правильную работу – достаточно сложная работа.
Могу вам посоветовать в таком случае воспользоваться комплектом «Денвер» (http://www.denwer.ru) – расшифровывается как «Джентельменский набор веб-разработчика». Это инсталлятор уже полностью настроенного веб-сервера Apache с поддержкой PHP, Perl и MySQL. Размер инсталлятор «Денвера» всего около 2 мегабайт (для сравнения – по отдельности дистрибутивы Apache, PHP, Perl и MySQL весят около 20 мегабайт!).
Установить веб-сервер с помощью «Денвера» не составит никакого труда. О процессе инсталляции подробно написано на сайта «Денвера». Кроме того, о дальнейшей работе с веб-сервером, установленным при помощи «Денвера», можно прочитать в статье, находящейся по адресу http://webmastak.com/tech/apache/129/denwer.html. Кроме того, после установки «Денвера» по адресу http://localhost/ также можно прочесть немало полезных советов
Если же вы не владеете приемами использованием MySQL при работе с PHP – могу посоветовать отличную книгу по этой теме, которая так и называется: «Разработка web-приложений на PHP и MySQL» (авторы: Люк Веллинг и Лаура Томсон, издательство «Диасофт», 2003).
Либо поищите в Интернете информацию на эту тему, например, на таких сайтах, как http://www.webmastak.com, http://www.webscript.ru, http://www.codenet.ru/webmast/php/
Так, с подготовкой к работе вроде бы закончили, теперь приступим непосредственно к написанию скриптов.
Для начала разберемся с самим процессом работы над модулем новостей.
1. Создаем таблицу в базе данных, заполняем ее тестовой информацией, пишем клиентскую часть, которая отвечает за вывод новостей на страницах сайта
2. Пишем администраторскую часть модуля новостей, которая отвечает за добавление, редактирование и удаление новостей из БД
3. Под конец я расскажу, какими стандартными методами можно защитить модуль администрирования новостей
Итак, начнем писать клиентскую часть новостного раздела.
Сначала определимся, что мы хотим в ней видеть. Как я считаю, она должна выполнять минимум три функции:
1. Выводить N последних новостей на главной странице сайта
2. Выводить нужную новость по запросу
3. Выводить перечень всех новостей (например, в разделе «Новости сайта») с выдачей результатов постранично (допустим, по 10 новостей на страницу)
Теперь давайте определимся со структурой таблицы с новостями в базе данных.
SQL-запрос для создания таблицы NEWS:
1 2 3 4 5 6 7 8 | CREATE TABLE `news` ( id int(11) NOT NULL auto_increment, tema varchar(200) NOT NULL default '', author varchar(100) NOT NULL default '', date date NOT NULL default '0000-00-00', text text NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM; |
Выполните это SQL-запрос, например, при помощи утилиты phpMyAdmin (на домашнем веб-сервере phpMyAdmin обычно располагается по адресу http://localhost/phpmyadmin/). В результате выполнения этого запроса будет создана таблица NEWS с следующими полями: ID (уникальное автоинкрементное поле), TEMA (тема новости), AUTHOR (автор новости – если новости на сайт добавляет не один человек, а несколько), DATE (дата добавления сообщения в формате год-месяц-день, например, 2005-09-01 – 1 сентября 2005) и TEXT (текст самой новости).
Давайте вставим несколько пробных новостей в эту таблицы, чтобы этими тестовыми данными можно было пользоваться во время настройки скрипта новостей.
SQL-запрос для вставки нескольких тестових новостей:
1 2 3 4 5 6 7 8 | INSERT INTO `news` VALUES (1,’Тема 1’,’Автор сайта’,’23.08.2005’, ’Это пробный текст первой новости<p>Текст после абзаца’); INSERT INTO `news` VALUES (2,’Тема 2’,’Приятель автора сайта’,’24.08.2005’, ’Это пробный текст второй новости<p>Текст после абзаца’); INSERT INTO `news` VALUES (3,’Тема 3’,’Знакомый приятеля автора сайта’,’25.08.2005’,’Это пробный текст третьей новости <p>Текст после абзаца’); |
После выполнения этого SQL-запроса в таблице NEWS будет создано три записи, то есть три новости, которыми можно «манипулировать» во время создания и настройки скрипта.
Модуль отображения новостей на сайте
Теперь внимательно изучите исходный текст скрипта, отображающего новости у посетителя сайта.
Листинг файла news.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <?
// Подключение к базе данных
@$db=mysql_connect('localhost','имя-пользователя-БД','пароль-пользователя-БД');
mysql_select_db('имя-базы-данных');
// Число выводимых новостей на страницу
$per_page=10;
/*
Извлекаем параметры из строки запроса news.php?***
Символ @ подавляет возможное предупреждение интерпретатора
PHP, если этого параметра нет в строке запроса
*/
@$action=$_GET['action'];
@$id=$_GET['id'];
/*
Если значение $action определено, а $id – не определено
*/
if (!$id && $action){
/*
При помощи этих строк мы подсчитываем число записей в таблице NEWS,
смотрим, чему равно значение параметра $page, извлекаемое также из строки запроса,
и выводим 10 новостей (поскольку $per_page=10), соответствующих номеру
страницы. Иными словами, осуществляется постраничный просмотр новостей –
не выдавать же посетителю все 100 новостей (если у вас на сайте будет 100 новостей)
на одной странице
*/
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
$start=abs($page*$per_page);
$q="SELECT count(*) FROM `news`";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];
$num_pages=ceil($total_rows/$per_page);
/*
А теперь непосредственно выводим перечень самих новостей: заголовок,
текст новости, дату и имя опубликовавшего автора.
Создаем SQL-запрос на вывод 10 новостей – в зависимости от значения
переменной $page
*/
echo '<h1>Новости проекта</h1>';
$sql="SELECT * FROM `news` ORDER BY `id` DESC LIMIT ".($page*$per_page).",".$per_page;
$result=mysql_query($sql);
$num_results=mysql_num_rows($result);
for ($i=0; $i<$num_results; $i++)
{
$row=mysql_fetch_array($result);
/*
Записываем в переменные значения нужных полей таблицы NEWS
*/
$id=$row["id"];
$author=$row["author"];
$date=$row["date"];
$tema=$row["tema"];
$text=$row["text"];
/*
А теперь выводим
*/
echo '<b>'.$tema.'</b><br />
<a href="/news/'.$id.'/">Добавил</a>: <b>'.$author.'</b>
('.$date.')<p> '.$text.' <hr />';
}
/*
А теперь мы выводим под новостями перечень страниц с новостями,
который выглядит примерно так:
[1-10] [11-20] [21-30]
И так далее – в зависимости от числа новостей
*/
for($i=1;$i<=$num_pages;$i++) {
if ($i-1 == $page) {
echo
"[".(abs($i*$per_page)-$per_page+1)." - ".abs($i*$per_page)."] ";
}
else {
echo '[<a
href="news.php?action=all&page='.$i.'">'.(abs($i*$per_page)-$per_page+1)." - ".ab
s($i*$per_page)."</a>] ";
}
}
}
if (!$action && !$id){
$sql="SELECT * FROM `news` ORDER BY `id` DESC LIMIT 0,10";
$result=mysql_query($sql);
$num_results=mysql_num_rows($result);
for ($i=0; $i<$num_results; $i++)
{
$row=mysql_fetch_array($result);
$id=$row["id"];
$author=$row["author"];
$date=$row["date"];
$tema=$row["tema"];
echo '('.$date.') <a href="news.php?id='.$id.'">'.$tema.'</a><p>';
}
}
/*
Если значение $id определено, а значение $action – неопределенно
То есть надо показать посетителю конкретную новость,
хранящуюся в таблице NEWS с ID = $id
*/
if (!$action && $id){
$sql="SELECT * FROM `news` WHERE `id`=".$id;
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$id=stripslashes($row["id"];
$author=$row["author"];
$date=$row["date"];
$text=$row["text"];
$tema= $row["tema"];
echo '<h1>'.$tema.'</h1>
Добавил: <b>'.$author.'</b> ('.$date.')<p> '.$text.' <p>
<a href="news.php?action=all">? Вернуться к новостям</a>';
}
?> |
У нас получается такая ситуация: при вызове news.php?action=all выводится последние 10 новостей; при вызове news.php?action=all&page=* выводится нужная страница с новостями; при вызове news.php?id=* выводится нужная новость. А чтобы на главную страницу выводить последние 10 новостей, надо просто написать:
1 2 3 | <? include(“news.php”); ?> |
Обратите внимание, что текст новости должен быть оформлен в виде HTML-кода, то есть если вам будет нужно сделать перенос текста на новую строку – просто введите
.
Так, с выводом новостей разобрались. Теперь давайте примемся за администраторскую часть.
Модуль администрирования новостей
Листинг файла news-admin.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 | <?
/*
Число новостей на страницу
*/
$per_page=10;
?>
<table cellpadding=2 cellspacing=2>
<tr><td>
<?
@$action=$_GET['action'];
switch($action):
/*
Если значение $action не определено
*/
case “”:
$action='edit';
break;
/*
Если нужно вывести форму для добавления текста новой новости
*/
case “add”:
?>
<form ACTION="news-admin.php?action=insert" METHOD="post">
<table WIDTH="600" BORDER=0 CELLPADDING=4 CELLSPACING=0 ALIGN="center" >
<tr><td WIDTH="25%"><b>Тема новости</b></a></td>
<td WIDTH="70%"><input TYPE="text" NAME="tema" SIZE="70"
MAXLENGTH="80" VALUE=""></td></tr>
<tr><td WIDTH="25%"><b>
Кто добавил</b></a></td>
<td WIDTH="70%"><input TYPE="text" NAME="author" SIZE="20"
MAXLENGTH="80" VALUE=""></td></tr>
<tr><td WIDTH="25%"><b>Дата</b></a></td>
<td WIDTH="70%"><input TYPE="text" NAME="date"
SIZE="20" MAXLENGTH="80"
VALUE="<?=date("Y-m-d");?>"></td></tr>
<tr><td WIDTH="100%" COLSPAN=2><b>
Текст новости</b></a></td></tr>
<tr><td WIDTH="100%" COLSPAN=2 ALIGN="center">
<textarea NAME="text" ROWS="10" COLS=”80”></textarea></td></tr>
<tr><td WIDTH="100%" COLSPAN=2 ALIGN="right">
<input TYPE="submit" VALUE="Опубликовать новость">
</td></tr></table>
</form>
<?
break;
/*
Если нужно вставить текст новой новости в таблицу NEWS
*/
case “insert”:
/*
Перед вставкой новости в таблицу базы данных добавляем к
символам ‘ символ (так называемый слэш, или slash).
Это необходимо для того, чтобы при вставке данных в БД не прозошло ошибки.
В текст, хранимом в БД после записи, не будет символов ’ – после вставки
они автоматически заменятся на ‘
*/
$tema=addslashes($tema);
$author=addslashes($author);
$date=addslashes($date);
$text=addslashes($text);
$sql="INSERT INTO `news`
VALUES ('','".$tema."','".$author."','".$date."','".$text."')";
$result=mysql_query($sql);
if (!$result) {echo "<script>alert('Ошибка при выполнении запроса к
БД!');</script>";}
else {echo "<script>alert('Новость добавлена.');</script>";}
echo "<script>self.location.replace('news-admin.php');</script>";
break;
case “edit”:
/*
Подсчет числа новостей в таблице NEWS и вывод их постранично
*/
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
$start=abs($page*$per_page);
$q="SELECT count(*) FROM news";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];
$sql="SELECT * FROM `news` ORDER BY `id` DESC LIMIT ".($page*$per_page).",".$per_page;
$result=mysql_query($sql);
$num_results=mysql_num_rows($result);
$num_pages=ceil($total_rows/$per_page);
echo "<div align=right>";
for($i=1;$i<=$num_pages;$i++)
{
if ($i-1 == $page)
{
echo
"[".(abs($i*$per_page)-$per_page+1)." - ".abs($i*$per_page)."] ";
} else
{
echo '[<a
href="news-admin.php?page='.$i.'">'.(abs($i*$per_page)-$per_page+1)." - ".abs($i*
$per_page)."</a>] ";
}
} echo "</div>";
echo "<table WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=5>";
for ($i=0; $i<$num_results; $i++)
{
$row=mysql_fetch_array($result);
$id=$row["id"];
$author=$row["author"];
$date=$row["date"];
$text=$row["text"];
$tema=$row["tema"];
echo '
<tr><td COLSPAN=2><b>'.$id.'. '.$tema.'</b>
</td></tr>
<tr><td COLSPAN=2><b>Автор:</b> '.$author.'
[<a href="news-admin.php?action=edit-news&id-news='.$id.'">Редактировать
новость</a>]
[<a href="news-admin.php?action=delete&id-news='.$id.'">Удалить новость</a>]
</td></tr>
<tr><td COLSPAN=2 CLASS=normal>'.$text.'
</td></tr>
';
}
echo "</table><br /><div align=right>";
for($i=1;$i<=$num_pages;$i++)
{
if ($i-1 == $page)
{
echo
"[".(abs($i*$per_page)-$per_page+1)." - ".abs($i*$per_page)."] ";
} else
{
echo '[<a
href="news-admin.php?page='.$i.'">'.(abs($i*$per_page)-$per_page+1)." - ".abs($i*
$per_page)."</a>] ";
}
} echo "</div><br />";
break;
/*
Если нужно отредактировать конкретную новость
*/
case “edit-news”:
$id_news=$_GET['id-news'];
/*
Создаем запрос на вывод конкретной новости (по значению ее поля ID)
*/
$sql="SELECT * FROM `news` WHERE `id`=".$id_news;
$result=mysql_query($sql);
$num_results=mysql_num_rows($result);
for ($i=0; $i<$num_results; $i++)
{
$row=mysql_fetch_array($result);
$id=$row["id"];
$author=$row["author"];
$date= $row["date"];
$text=$row["text"];
$tema=$row["tema"];
echo '
<form ACTION="news.php?action=update" METHOD="post">
<table WIDTH=600 BORDER=0 CELLSPACING=0 CELLPADDING=4>
<tr><td width=100>Тема:</td><td> <input TYPE=text NAME=tema
VALUE="'.$tema.'" SIZE=80></td></tr>
<tr><td width=100>Дата:</td><td><input TYPE=text NAME=date
VALUE="'.$date.'" size=20>
</td></tr>
<tr><td CLASS=normal
width=100><b>Автор:</b></td><td><input TYPE=text SIZE=20
NAME=author VALUE="'.$author.'">
</td></tr>
<tr><td COLSPAN=2 CLASS=normal><textarea NAME="text" ROWS="15"
COLS=80>'.$text.'</textarea>
</td></tr>
<tr ALIGN=center><td WIDTH="100%" colspan=2 align=right>
<input TYPE="hidden" NAME="idup" VALUE="'.$id.'">
<input TYPE="submit" VALUE="Сохранить измененную новость">
</td></tr></table><br /><br /></form>
';
}
break;
/*
Если нужно обновить текст какой-либо новости
*/
case “update”:
$tema=addslashes($tema);
$author=addslashes($author);
$date=addslashes($date);
$text=addslashes($text);
/*
Создаем запрос для обновления данных в конкретной строке
таблицы NEWS (Эта строка опять же определяется по значению поля ID)
*/
$sql="UPDATE `news` SET
`tema`='".$tema."',`date`='".$date."',`text`='".$text."',`author`='".$author."' WHERE
`id`='".$idup."'";
$result=mysql_query($sql);
if (!$result) {echo "<script>alert('Ошибка при выполнении запроса к
БД!');</script>";}
else {echo "<script>alert('Новость изменена.');</script>";}
echo "<script>self.location.replace('news-admin.php');</script>";
break;
/*
Если нужно удалить новость
*/
case “delete”:
$tema=addslashes($tema);
$author=addslashes($author);
$date=addslashes($date);
$text=addslashes($text);
/*
Создаем запрос на удаление конкретной новости.
Для определения номера этой новости используется поле ID.
Теперь видите, для чего было нужно это поле в таблице NEWS?
*/
$sql="DELETE FROM `news` WHERE `id`='".$iddel."'";
$result=mysql_query($sql);
if (!$result) {echo "<script>alert('Ошибка при выполнении запроса к
БД!');</script>";}
else {echo "<script>alert('Новость удалена.');</script>";}
echo "<script>self.location.replace('news-admin.php');</script>";
break;
?>
</div></td></tr></table>
<?
endswitch;
?> |
Защита файла администрирования новостей логином и паролем для входа
И давайте разберемся с таким вопросом, как защита скрипта администрирования новостей при помощи логина и пароля. Как вы наверное заметили, в самом исходном коде панели администрирования я нигде не использовал авторизацию посетителя. Но поскольку доступ к этой панели должны иметь только вы, то давайте воспользуемся так называемой «серверной аутентификацией».
Как это работает? Сервер запрашивает у посетителя логин и пароль, после чего браузер выводит на экран диалоговое окно, а после ввода логина и пароля передает их на сервер.
Привожу пример. Допустим, мы защищаем папку site.com/admin/ логином и паролем пи помощи серверной аутентификации. И допустим, что посетитель еще не ввел логин и пароль – он только собирается зайти в эту папку. При запросе www.site.com/admin/ у посетителя будет запрошен логин и пароль. И при запросе www.site.com/admin/home.html тоже будет запрошен логин и пароль. И при запросе www.site.com/admin/main/text.php — тоже. Однако если при входе на любую из страниц папки www.site.com/admin/ посетитель ввел логин и пароль, то дальше он может свободно перемещаться по любым документам внутри папки /admin/, логин и пароль у него не будут запрашиваться повторно. Если же посетитель ввел неверную пару «логин – пароль», то ему веб-сервер просто выдаст посетителю стандартную страницу с 401-ой ошибкой (неверная аутентификация).
Закрывается же «сессия работы с защищенной папкой» простым закрытием окна браузера. Просто и удобно.
Так что достаточно поместить файл news-admin.php в каталог /admin/ на вашем сайте и защитить его при помощи серверной защиты, чтобы кроме вас никто не имел к нему доступа.
Как воспользоваться серверной защитой какого-либо каталога? Если вы используете платный хостинг или любой бесплатный, поддерживающий PHP и MySQL, то вы должны иметь доступ к панели управления своим аккаунтом на хостинге. Популярные хостинги narod.ru, nm.ru и подобные им не подходят. Из бесплатных хостингов тут необходимо использовать такие хостинги, как holm.ru, fatal.ru, wallst.ru, aha.ru и подобные им.
Скорее всего в качестве панели управления у вас будет cPanel, IPS Manager, DirectAdmin или любая аналогичная. В любой из этих панелей управления среди прочего есть такая полезная функция, как «Защита директории» (как вариант, она еще может называться «Защита папки» или еще как-нибудь в этом духе). С ее помощью очень просто создать серверную защиту для любого каталога вашего сайта. Для этого необходимо лишь указать имя нужного каталога, логин и пароль, который вы хотите использовать для доступа к этому каталогу, а все остальное веб-сервер сделает автоматически. Можете пользоваться!
Кстати, при помощи этой же панели управления аккаунтом можно настроить доступ к одной папке для нескольких пользователей, для каждого со своим логином и паролем. Это может пригодиться в том случае, если над сайтом работает не один человек и доступ к защищенному каталогу должны иметь сразу несколько человек.
Если же вам интересно, как именно работает этот механизм серверной авторизации, то расскажу подробнее, как это происходит. В корне каталога, доступ к которому можно закрыть при помощи серверной защиты, необходимо создать файл с именем .htaccess (именно так, без расширения и с точкой впереди). Вообще, это уникальный файл. С его помощью можно создавать огромное количество настроек для веб-сервера.
Но в данном случае я расскажу лишь, как с его помощью можно создать серверную защиту для каталога. В .htaccess нужно записать следующую информацию:
1 2 3 4 5 | DirectoryIndex index.php AuthUserFile /home/<ИМЯ-АККАУНТА>/<ПУТЬ-ДО-НУЖНОЙ-ПАПКИ>/.htpass AuthName "Панель администрирования новостей" AuthType Basic require valid-user |
Строка «DirectoryIndex index.php» определяет, что если человек наберет адрес как www.site.com/ИМЯ-КАТАЛОГА/, то ему будет показан не перечень файлов этого каталога, а заглавная страница этого каталога, то есть в данном случае index.php В случае с модулем администрирования новостей вы можете написать так: «DirectoryIndex news-admin.php»
Строка «AuthUserFile …» определяет полный путь до файла, в котором хранятся логин и пароль для доступа к папке. Эта строка может выглядеть так: AuthUserFile /home/barkov.net/public_html/admin/.htpass Обратите внимание, что указывается именно полный, а не относительный адрес до файла с логином и паролем. То есть в данном случае логин и пароль хранятся в той же папке /admin/, что и файл .htaccess.
Строка AuthName определяет текст, выводимый в окне для ввода логина и пароля, которое выдается браузером при входе в защищенный каталог.
Теперь создайте файл с именем .htpass (как и .htaccess, с точкой впереди и без расширения). В файле .htpass хранится информация в следующем формате:
1 | <login>:<password> |
Например,
1 | admin:6qTIFolZGvK/g |
В данном случае пароль простой – kolobok, просто так он выглядит после обработки пароля утилитой htpasswd. А зашифровать пароль надо, иначе серверная аутентификация работать не будет. Подробно о работе с утилитой можно прочесть на различных интернет-ресурсах, посвященных веб-программированию либо в книге, о которой я рассказывал в начале статьи, «Разработка web-приложений на PHP и MySQL». Это достаточно объемная и интересная тема.
В любом случае, имеет смысл воспользоваться предлагаемой панелью управления настройкой серверной защиты каталога. Работая с панелью управления, практически невозможно ошибиться, чего к сожалению достаточно трудно избежать при ручной настройке .htaccess и .htpass.
Вот в основном и все. Описанный в статье модуль новостей можно расширять и дополнять, но свои основные функции он выполняет и сейчас.
Пока нет комментариев.
Вы должны зайти чтобы оставить комментарийt.
Нет трэкбэков.
|
General Office Technologies 2010 © All Rights Reserved. Architecture and Web Design: Alexander Morgan |

