Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Сборник скриптов на PHP

Движок для сайта своими руками. Вариант первый: если у вас нету базы...

Каждый сайтостроитель в один прекрасный момент вдруг замечает, что он уже занимается не столько подготовкой новых метериалов для своего сайта, сколько банальными и рутинными вещами: там выковырял меню, заменил; там пересохранил, обновил; тут — copy, там — paste, а потом всё это save и upload. «Ну нет — думает вебмастер — так больше нельзя! Но что же делать?». А делать нужно движок для сайта...

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

Движком принято называть набор скриптов и программ, на основе которых держится, живёт и обновляется сайт. Движок может быть как простым PHP-скриптом и статьями, хранящимися в текстовых файлах определённого формата, так и сложным комплексом программных средств в связке с базами данных (MySQL, Oracle, etc.) и веб-службами, написанными на Java.

Лучшим (но при этом не самым сложным) был бы вариант с применением баз данных. Но чаще всего вебмастерам база данных недоступна, поскольку дают её (насколько мне известно) только на платных хостингах. Поэтому наш первый движок мы организуем при помощи PHP и набора файлов. При этом можно себя утешить тем, что на работоспособность нашего сайта не будут влиять дополнительные факторы риска, вносящиеся использованием баз данных (все, я полагаю, уже слышали о истории с дырой в Microsoft SQL Server 2000) (1).

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

Итак, для начала нам надо опредилить пару функций для чтения данных из файла. Перед тем, как приводить исходные коды, рассмотрим имеющиеся у нас (вернее, в PHP) средства для работы с файлами (а те, кто не в курсе — сразу и узнают).

Функции чтения файлов в PHP.

Вобщем, прочитать файл мы можем несколькими способами. Первый, и самый простой — это использовать функцию file(). Она, получив имя файла, сразу же возвращает массив строк этого самого файла:

...
$strings = file("myfolder/myfile.txt");
$first_string = $strings[0];
...

Сделаем такую себе самопальную базу данных. Для неё нам, во-первых, понадобятся такие функции: одна для чтения контента страницы (например, текста статьи) из внешнего файла — загрузка данных; функция для загрузки шаблона из файла — то есть, загрузка оформления (дизайна).

function loadTemplate($path)
/* функция загружает шаблон по указанному пути,
и возвращает его в виде строки, например,
для обработки функцией parceTemplate() */
{
$template = fopen($path, "r") or print("Не удалось загрузить файл шаблона [".$path."]");

if ($template)
return fread($template, filesize($path));
else
return false;

fclose($template);
}

function parceTemplate($template, $params_values)
/* функция синтаксически разбирает указанный шаблон,
заменяя названия параметров, служащих индексами
масива $params_values на их значения */
{
while (list($param, $value) = each($params_values))
{
$template = str_replace("¤{".$param."}¤", $value, $template);
}

return $template;
}


function readArticle($path)
/* функция читает указанный файл и возвращает
его содержимое в виде массива частей статьи,
разделенных конструкцией ¤{имя части}¤ */
{
$article = fopen($path, "r") or print("Не удалось загрузить файл статьи [".$path."]");

if ($article)
{
$astring = fread($article, filesize($path));
$result = split("[¤]{1}[{]{1}([ a-z_-]*)[}]{1}[¤]{1}", $astring);
$result[2] = eregi_replace("[ ,]*([ — ]{1})[, ]*", " — ", $result[2]);
$result[3] = eregi_replace("[ ,]*([ — ]{1})[, ]*", " — ", $result[3]);
$result[0] = basename($path);
return $result;
}
else
{
return false;
}
}

Где-то здесь надо было бы прикрутить гранитную плиту с надписью «Регулярным выражениям от благодарных фанатов», поскольку без этой удобной штуки было бы очень сложно создать вышеприведённые функции. Рассмотрим немного подробнее, как эти выражения устроены.

Писать много раз об одном и том же нет смысла, поэтому я процитирую одну из статей о регулярных выражениях (Источник: http://sitemaker.ru/):

Регулярные выражения.

Немного истории.

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

С тех пор, регулярные выражения прошли через множество итераций, и текущий стандарт сохраняется ISO (Международной организацией по стандартизации) и определен Open Group, совместным усилием различных технических некоммерческих организаций (2).

Соответствие символов.

Трудность регулярных выражений состоит в том, что Вы хотите искать или чему это должно соответствовать. Без этой концепции, RE бесполезны. Каждое выражение будет содержать некоторую команду о том, что искать:

Соответствие символов в регулярных выражениях
Оператор Описание Пример Результат
. Соответствует любому одному символу .ord Будет соответствовать «ford», «lord», «2ord», и т.д. в файле sample.txt.
[] Соответствует любому одному символу, заключенному в квадратные скобки [cng]ord Будет соответствовать только «cord», «nord» и «gord»
[^] Соответствует любому одному символу, не заключенному в квадратные скобки [^cn]ord Будет соответствовать «lord», «2ord» и т.д., но не «cord» или «nord»
[a-zA-Z] Соответствует любой букве [a-zA-Z]ord Будет соответствовать «aord», «bord», «Aord», «Bord» и т.д.
[^0-9] Соответствует любой нецифре в промежутке 0-9 [^0-9]ord Будет соответствовать «Aord», «aord» и т.д., но не «2ord» и т.д.

Операторы повторения.

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

Операторы повторения в регулярных выражениях
Оператор Описание Пример Результат
? Соответствует определенному символу единожды, если тот существует ?erd Будет соответствовать «berd», «herd», и т.д. и «erd»
* Соответствует определенному символу многократно, если тот существует n.*rd Будет соответствовать «nerd», «nrd», «neard» и т.д.
+ Соответствует определенному символу один или более раз [n]+erd Будет соответствовать «nerd», «nnerd» и т.д., но не «erd»
{n} Соответствует определенному символу точно n раз [a-z]{2}erd Будет соответствовать «cherd», «blerd» и т.д., но не «nerd», «erd», «buzzerd» и т.д.
{n,} Соответствует определенному символу минимум n раз .{2,}erd Будет соответствовать «cherd» и «buzzerd», но не «nerd»
{n,N} Соответствует определенному символу минимум n раз, но не более чем N раз n[e]{1,2}rd Будет соответствовать «nerd» и «neerd»

Якоря.

Якоря описывают где соответствовать шаблону. Они могут быть удобными, когда Вы ищете общие строковые комбинации.

Якоря регулярных выражений
Оператор Описание Пример Результат
^ Соответствует началу строки ereg_replace("^/", "blah") Вставляет «blah» в начало строки
$ Соответствует концу строки ereg_replace("$/", "blah") Вставляет «blah» в конец строки
\< Соответствует началу слова ereg_replace("\<", "blah") Вставляет «blah» в начало слова
    \<blah Соответствует «blahfield» и т.д.
\> Соответствует концу слова ereg_replace("\>", "blah") Вставляет «blah» в конец слова
    \>blah Соответствует «soupblah» и т.д.
\b Соответствует началу или концу слова \bblah Соответствует «blahcake» и «countblah»
\B Соответствует середине слова \Bblah Соответствует «sublahper» и т.д.

(конец цитаты, источник описания: http://sitemaker.ru/)

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

¤{имя части}¤
содержание части
...
...
...
¤{ещё одно имя части}¤
её содержание и так далее...

Символы ¤{ и }¤ используется для отделения частей друг от друга. Имя части же никакого значения не имеет и может быть любым набором символов английского алфавита, пробела, подчеркивания или дефиса.

Для вывода списка статей используется цикл, перебирающий все файлы из нужного каталога. Если он натыкается на файл *.art, то сразу на радостях добавляет его в масив. В зависимости от указанного параметра, он может либо добавить имя этого файла, либо название содержащейся в нём статьи, либо сразу готовую ссылку на эту статью.

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

Ccылки после изложенного.

  1. описание вируса, поражающего Microsoft SQL Server 2000
  2. описание синтаксиса регулярных выражений от Open Group










helloworld.ru © 2001-2021
Все права защищены