Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хокинс С. - Администрирование Web-сервера Apache и руководст

.pdf
Скачиваний:
90
Добавлен:
13.09.2013
Размер:
4.5 Mб
Скачать

3.6.5. Код 504 Gateway Time out

Работая в режиме шлюза или proxy, сервер не получил вовремя ответ от сервера верхнего уровня.

3.6.6. КОД 505 HTTP Version not supported

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

272

Часть IV. Приложения

Приложение

и

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

И.1. Введение

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

Пусть у нас есть множество символов (назовем это множество "алфавитом", но это не обязательно символы от "а" до "z"), которое обозначим "I". Множество, не имею щее членов (пустой набор) отображается символом "0" Символ "и" обозначает объе динение двух множеств (например, объединение множеств {1,2,3} и {2,3,4} представ ляет собой множество {1,2,3,4}). Символ звездочка "*" обозначает нуль или более по вторений предыдущего символа. Наконец, символы "а" и "Ь" используются в качестве переменных.

Регулярными выражениями над алфавитом "£" являются строки, содержащие сле дующие элементы алфавита:

1. Регулярным выражением является множество "0" и любой член множества "2".

2.Если "а" и "Ь" являются регулярными выражениями, то таковым является и выражение "ab".

3.Если "а" и "Ь" являютсярегулярными выражениями, то таковым является вы ражение "aub".

4.Если "а" является регулярным выражением, то таковым является выражение "а*".

5.Любое выражение, которое не удовлетворяет условиям, изложенным в пп. 1 4, является нерегулярным выражением.

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

Как было показано выше, регулярные выражения традиционно представляются за гадочными греческими буквами. Однако в кодовой таблице ASCII не существует воз можностей отображать всю эту чушь, поэтому представление регулярных выражений в Internet производится полностью с помощью печатаемых символов. Далее вы можете увидеть некоторые из таких символов. При необходимости использовать литеральное выражение одного из символов, представленных в регулярном выражении (например, ис пользовать символ точки в конце предложения не в качестве группового символа),

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

273

этот символ необходимо предварять символом "\". Например, выражение "wor.." будет соответствовать "worry", "worst" и "words", a "wor.\." будет соответствовать как "word.", так и "work." и т.д.

И.1.1. Специальныесимволы

Начало строки. Например, следующая строка будет соответствовать любой строке, начинающейся с букв abed:

^abcd

$ Конец строки. Например, следующая строка будет соответствовать любой строке, которая завершается буквами abed:

abcd$

Соответствует любому символу.

И.1.2. Определение множества

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

[0123456789]

будет соответствовать одной цифре. Аналогичная функция может быть выполнена указанием диапазона символов ASCII от 0 до 9:

[0 9]

Очень могут пригодиться диапазоны [A Z] и [a z], с помощью которых задаются буквы в верхнем и нижнем регистрах соответственно.

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

[^0 9]

И.1.3. Повторение предыдущего шаблона

Зачастую очень удобно показать, что заданный шаблон будет повторяться опреде ленное количество раз. Для этого применяются следующие символы:

? Обозначает 0 или 1 повторениепредыдущего символа или множества символов.

+Обозначает 1 или более повторений предыдущего символа или множества символов.

Обозначает 0 или более повторений предыдущего символа или множества символов.

Для определения шаблона, задающего 0 или 1 гласную букву, можно воспользоваться следующим регу лярным выражением:

[aeiou]?

Для определения шаблона, задающего 1 или более цифр, можно воспользоваться следующим регуляр ным выражением:

[0 9]

274

Часть IV. Приложения

Для определения шаблона строки, левый символ которой является буквой, можно воспользоваться сле дующим регулярным выражением:

^[A Za z]

И.1.4. Объявление и работа с последовательностью символов

Чтобы в строке замены задать ссылку на уже имеющийся шаблон, необходимо за дать ее как последовательность символов. Последовательность символов выделяется квадратными скобками. Так, например, строка:

[ A Z a z ] * ( [ 0 9 ] ) [ A Z a z ] *

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

$1

Далее последовательностью символов будет $2, затем — $3 и т.д.

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

275

Приложение

к

ИНТЕРФЕЙС MOD_PERL API

К.1. Введение

В этой главе приведен простой перечень методов интерфейса с модулем mod_perl. Переменная $r содержит ссылку на запрошенный объект, который автоматически передается дескрипторам Perl при вызове.

К.1.1. Методы обработки клиентских запросов

$r = Apache$>request() ; $str = $r$>args();

$с = $r$>connection; $str = $r$>content() ;

$str = $r$>filename($newval) ; $r$>finfo();

$str = $r$>get_remote_host($lookup_type); $str = $r$>get_remote_logname();

$str = $r$>header_in($hdr, $newval); $bool = $r$>header_only();

$href = $r$>headers_in(); $str = $r$>method($newval) ;

$num = $r$>method_number($nv); $u = $r$>parsed_uri();

$str = $r$>path_info($newval) ; $str = $r$>protocol();

$bool = $r$>proxyreq($newval); $r$>read($buf, $bytes_to_read); $s = $r >server # CM. Apache::Server $str = $r$>the_request() ;

$str = $r$>uri($newval);

K.1.2. Методы ответа сервера

$num = $r$>bytes_sent(); $r$>cgi_header_out($hdr, $newval); $str = $r$>content_encoding($newval);

$aref = $r$>content_languages($newval); $str = $r$>content_type($newval); $r$>custom_response($code, $uri);

276

Часть IV. Приложения

$str = $r$>err_header_out($hdr, $newval); $href = $r$>err_headers_out();

$str = $r$>handler($newval) ;

$str = $r$>header_out($hdr, $newval); $href = $r$>headers_out(};

$bool = $r$>no_cache($newval); $num = $r$>request_time(); $num = $r$>status($newval);

$str = $r$>status_line($newval);

K.1.3. Посылка данных клиенту

$r$>print(@list); $r$>printf($format, @args); $r$>rflush(); $r$>send_cgi_header($str);

$len = $r$>send_fd($filehandle); $r$>send_http_header($content_type);

K.1.4. Основные функции сервера

$r$>chdir_file($file); $r$>child_terminate(); $r$>hard_timeout($msg); $r$>internal_redirect($newplace); $r$>internal_redirect_handler($newplace); $bool = $r$>is_initial_req();

$bool = $r$>is_main(}; $r$>kill_timeout(); $str = $r$>location (); $req = $r$>last(); $req = $r$>main(); $req = $r$>next();

$str = $r$>notes($k, $v); # или $tab = $r$>notes() $req = $r$>prev(); $r$>register_cleanup($code_ref); $r$>reset_timeout();

$r$>soft_timeout($msg);

$str = $r$>subprocess_env($k, $v);

K.1.5. Методы конфигурирования сервера

$str = $r$>dir_config($k); $str = $r$>document_root(); $str = $r$>get_server_name(); $num = $r$>get_server_port ();

$str = $r$>server_root_relative($obj);

K.1.6 Класс Apache: : Log

$str = $r$>as_string(); $r$>log_reason($message, $file); $r$>log_error($message); $r$>warn($message);

$log = $r$>log(); $log = $s$>log();

$log$>emerg($str ... $code_ref); $log$>alert($msg ... $code_ref); $log$>crit(5msg ... $code_ref); $log$>error($msg ... $code_ref);

Приложение К. Интерфейс mod_perl API

277

$log$>warn($msg ... $code_ref); $log$>notice($msg ... $code_ref); $log$>info($msg ... $code_ref); $log$>debug($msg ... $code_ref);

K.1.7. Методы управления доступом

$opts = $r$>allow_options(); $str = $r$>auth_name($newval) ; $str = $r$>auth_type();

($rc, $pw) = $r$>get_basic_auth_pw(); $r$>note_basic_auth_fallure();

$aref = $r$>requires(); $flag = $r$>satisfies();

$bool = $r$>some_auth_required() ;

K.1.8. Специальные методы модуля mod_perl

$str = $r$>current_callback(); $bool = $r$>define($name); Apache$>exit($code);

$fh = Apache$>gensyra();

$aref = $r$>get_handlers($str); Apache$>httpd_conf($str); $bool= $r$>module($name);

$bool = Apache$>perl_hook($name); $r$>post_connection($code_ref); $r$>push_handlers($str => $code_ref); $r = Apache$>request($r); $r$>set_handlers($str => $aref);

K.1.9. Класс Apache::SubRequest

$subr = $r$>lookup_uri($uri);

$subr = $r$>lookup_flie($filename); $rc = $subr$>run();

K.1.10. Класс Apache::Server

$s = Apache$>server

$bool = $s$>is_virtual(); $s$>log_error();

$aref = $s$>names(); $s = $s$>next(); $num = $s$>port();

$str = s$>server_admin(); $str = s$>server_hostname() ; $num = s$>timeout($newval); $s$>warn();

K.1.11. Класс Apache::Connection

$bool = $c$>aborted(); $str = $c$>auth_type(); $addr = $c$>local_addr();

$addr = $c$>remote_addr($addr); $str = $c$>remote_host();

$str = $c$>remote_ip($ip); $str = $c$>remote logname(); $str = $c$>user($username);

278

Часть IV. Приложения

К.1.12. Класс Apache::Table

Stab = Apache::Table$>new($r, $tab$>add($key,$str_or_aref) $tab$>clear();

$tab$>do($code_ref); $tab$>merge($key, $str_or_aref); $tab$>set($key, $str);

$str = $tab$>get($key); $tab$>unset($key);

K.1.13. Класс Apache::URI

$uri = Apache::URI$>parse($r, $string_uri); $str = $uri$>unparse();

$str = $uri$>cowponent($newval) ;

(где component может принимать одно из значений: fragment, hostinfo, hostname, password, path_info, path, port, query, rpath, scheme, user)

K.1.14. Класс Apache: :Util

$str = Apache::Util::escape_html($html);

$str = Apache::Util::escape_uri($uri) ;

$str = Apache::Util::ht_time($time, $fmt, $bool)

$secs = Apache::Util::parsedate($date_str);

$num = Apache::Util::size_string($num);

$str = Apache::Util::unescape_uri($uri);

$str = Apache::Util::unescape_uri_infо($uri);

Приложение К. Интерфейс mod_perl API

279

Приложение

л

ОПЕРАТОРЫ ЯЗЫКА РНР

В этом приложении...

 

Л.1. Функции сервера Apache

 

Л.2. Функции работы с числами произвольной точности

 

Л.З. Функции массивов

281

Л.4. GZlib

283

Л.5. Работа с базой данных DBM

284

Л.6. Календарные функции

285

Л.7. Функции взаимодействия с базой данных dBase

286

Л.8. Функции взаимодействия с базой данных DBM

 

Л.9. Функции работы с каталогами

287

Л.10. Функция динамической загрузки

 

Л.11. Функции шифрования

287

Л.12. FilePro

288

Л.13. File System Functions

288

Л.14. Функции для работы с данными в FDF формате

291

Л.15. FTP функции

292

Л.16. Хеш функции

293

Л.17. Функции HTTP

293

Л.18. СУБД Informix

293

Л.19. Почтовые функции

295

Л.20. Математическиефункции

295

Л.21. СУБД MS SQL

297

Л.22. Разные функции

 

Л.23. Функции взаимодействия с СУБД mSQL

299

Л.24. Функции, работающие с СУБД MySQL

 

Л.25. Сетевые функции

303

Л.26. Функции NIS

304

Л.27. ODBC функции

304

Л.28. СУБД Oracle

307

Л.29. СУБД Oracle 8

307

Л.ЗО. Регулярные выражения языка Perl

309

Л.31. Функции POSIX

309

Л.32. Функции выполнения программ

311

Л.ЗЗ.Recode

 

Л.34. Функции, работающие с сеансами

311

Л.35. Функции протокола SNMP

 

Л.36. Строковые функции

313

Л.37. Функции СУБД Sybase

316

Л.38. Функции URL

316

Л.39. Функции, управляющие переменными

317

280

Часть IV. Приложения

Л.1. Функции сервера Apache

apache_lookup_uri. Эта функция выполняет частичный запрос к заданному URI и возвращает информацию о нем.

class apache_lookup_uri(string filename)

apache_note. Функция приема и установки заметок о запросе Apache. string apache_note(string note_name[, string note_value]) getallheaders. Выбрать все заголовки HTTP запроса.

array getallheaders(void)

virtual. Выполнить подзапрос Apache. int virtual(string filename)

Л.2. Функции работы с числами произвольной точности

bcadd. Сложить два числа произвольной точности. string bcadd(string left operand,

string right operand [, int scale])

bccomp. Сравнить два числа произвольной точности.

int bccomp(string left_operand, string right_operand [, int scale])

bcdiv. Разделить два числа произвольной точности.

string bcdiv(string left_operand, string right_operand [, int scale])

bcmod. Взять модуль числа произвольной точности.

string bcmod(string left operand, string modulus)

bcmul. Умножить два числа произвольной точности.

string bcmul(string left operand, string right operand [, int scale])

bcpow. Возвести число произвольной точности в степень, представленную числом произвольной точности.

string bcpow(string x, string у [, int scale])

bcscale. Установить стандартный параметр масштабирования для всех математических функций.

string bcscale (int scale)

bcsqrt. Взять квадратный корень числа произвольной точности. string bcsgrt(string operand, int scale)

bcsub. Вычесть одно число произвольной точности из другого.

string bcsub(string left_operand, string right_operand [, int scale])

Л.З. Функции массивов

array. Создать массив. array a r r a y ( . . . )

array_count_values. Подсчитать значения массива. array array_count_values(array input)

array_flip. Сбросить весь массив.

Приложение Л. Операторы языка РНР

281

Соседние файлы в предмете Основы электротехники и электроники