Man regcomp (3): функции регулярных выражений POSIX. Скачать Reg Organizer - очистка и оптимизация системы Тщательный reg comp php
#include
#include
int regcomp(regex_t *
preg
, const char *
regex
, int
cflags
);
int regexec(const regex_t *
preg
, const char *
string
, size_t
nmatch
,
regmatch_t
pmatch
, int
eflags
);
size_t regerror(int
errcode
, const regex_t *
preg
, char *
errbuf
,
size_t
errbuf_size
);
void regfree(regex_t *
preg
);
ОПИСАНИЕ
Компилирование регулярных выражений POSIX
Функция regcomp () используется для компиляции регулярного выражения в формат, который подходит для последующих поисков с помощью regexec ().regcomp () передаётся указатель на область хранения буферного шаблона preg , указатель на заканчивающуюся null строку regex и флаги cflags , используемые для определения типа компиляции.
Все поиски регулярных выражений должны выполняться с помощью скомпилированного буферного шаблона, поэтому regexec () должна всегда вызываться с адресом буферного шаблона, инициализированного функцией regcomp ().
Значение cflags может состоять из поразрядного or нуля или нескольких следующих значений:
REG_EXTENDED Использовать синтаксис расширенных регулярных выражений POSIX во время интерпретации regex . Если не включён этот флаг, то используется синтаксис простых регулярных выражений POSIX. REG_ICASE Не учитывать регистр. Последующие поиски regexec () с использованием данного буферного шаблона не будут зависеть от регистра. REG_NOSUB Не сообщать положение совпадений. Параметры nmatch и pmatch для regexec () игнорируются, если данный буферный шаблон был скомпилирован с этим включённым флагом. REG_NEWLINE Операторы совпадения с любым символом не совпадают с символом новой строки.Список несовпадающих символов ([^...] ) без символа новой строки не совпадает с новой строкой.
Оператор сравнения по началу строки (^ ) совпадает с пустой строкой сразу после новой строки независимо от того, что eflags , флаги выполнения regexec (), содержат REG_NOTBOL .
Оператор сравнения по концу строки ($) совпадает с пустой строкой до символа начала строки независимо от того, что eflags содержит REG_NOTEOL .
Сравнение с регулярным выражением POSIX
Функция regexec () используется для сравнения строки, завершающейся null, с предварительно обработанным буферным шаблоном preg . Аргументы nmatch и pmatch используются для предоставления информации о местонахождении любых совпадений. Значение eflags может быть поразрядным ИЛИ одного или обоих значений REG_NOTBOL и REG_NOTEOL . Данные значения определяют поведение процесса сравнения так, как описано ниже. REG_NOTBOL Оператор сравнения по началу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ). Этот флаг может использоваться, когда в regexec () передаются отдельные части строки, и начало такой строки в данном случае не должно интерпретироваться как начало новой строки. REG_NOTEOL Оператор сравнения по концу строки всегда завершается с ошибкой (но смотрите описанный выше флаг компиляции REG_NEWLINE ).Байтовые смещения
Если REG_NOSUB не установлен при компиляции буферного шаблона, то возможно получать информацию о положении совпадений. Значение pmatch должно быть определено так, чтобы иметь, по крайней мере, nmatch элементов. Они заполняются regexec () адресами внутристрочных совпадений. Смещения подвыражения, начинающегося с i -й открытой скобки, сохраняется в pmatch[i] . Адрес совпадения всего регулярного выражения сохраняется в pmatch (заметим, что чтобы вернуть смещения совпадений N подвыражений, значение nmatch должно быть не менее N+1 ). Любые неиспользованные элементы структуры будут содержать значение -1.Структура regmatch_t
, являющаяся типом pmatch
, определена в
Typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t;
Каждый элемент rm_so , не равный -1, показывает начальное смещение следующего совпадения наибольшей подстроки внутри заданной строки. Относительный элемент rm_eo указывает на смещение конца совпадения, которое является первым символом после совпавшего текста.
Сообщение об ошибках POSIX
Функция regerror используется для преобразования кодов ошибок, которые могут быть получены от regcomp () и regexec (), в строки сообщений об ошибках.В regerror передаются: код ошибки errcode , буферный шаблон preg , указатель на символьный буфер строки errbuf и размер буфера строки errbuf_size . Функция возвращает размер errbuf , который требуется для сохранения сообщения об ошибке в виде строки, оканчивающейся null. Если и errbuf , и errbuf_size не равны нулю, то errbuf заполняется первыми errbuf_size - 1 символами сообщения об ошибке и завершается байтом null ("\0").
Освобождение буфера шаблона POSIX
Функция regfree () освобождает память, отведённую буферному шаблону preg во время процесса компиляции с помощью regcomp ().ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция regcomp () возвращает ноль при успешной компиляции или в противном случае код ошибки.Функция regexec () возвращает ноль при совпадении или REG_NOMATCH , если совпадений не было.
ОШИБКИ
Функция regcomp () может возвращать следующие ошибки: REG_BADBR Неправильное использование оператора обратных ссылок. REG_BADPAT Неправильное использование операторов шаблона, таких, как операторы группы или списка. REG_BADRPT Неправильное использование операторов повторения, например, использование «*» в качестве первого символа. REG_EBRACE Непарные скобки в операторах интервала. REG_EBRACK Непарные квадратные скобки в операторах списка. REG_ECOLLATE Неправильный элемент сортировки. REG_ECTYPE Неизвестное имя класса символов. REG_EEND Потенциальная ошибка. Не определена в POSIX.2. REG_EESCAPE Конечная обратная косая черта. REG_EPAREN Непарные круглые скобки в операторах группировки. REG_ERANGE Неправильное использование оператора области: например, конец области появляется прежде её начала. REG_ESIZE Скомпилированное регулярное выражение требует буферный шаблон размером, большим 64 Кб. Это не определено в POSIX.2. REG_ESPACE Для процедур регулярных выражений закончилась память. REG_ESUBREG Неправильная обратная ссылка на подвыражение.Это руководство по установке поможет Вам установить и сконфигурировать PHP3 на Ваших web серверах под Windows 9x/NT. Данное руководство составил Bob Silva . Последнюю версию можно найти по адресу http://www.umesd.k12.or.us/php/win32install.html .
Данное руководство обеспечивает поддержку установки на:
Personal Web Server (рекомендуется новейшая версия) |
Internet Information Server 3 or 4 |
Apache 1.3.x |
Omni HTTPd 2.0b1 |
Изменение конфигурации для PHP3:
Все модули теперь начинаются с префикса "php3_". Вы должны изменить свой файл php3.ini и/или все сценарии загрузки расширений с функцией dl() (либо везде удалите префикс "php3_"). Это предотвратит путаницу между модулями PHP и их библиотеками обеспечения.
ChangeLog , FAQ и обновленную документацию всегда можно найти на официальном сайте PHP или любом из его зеркал.
Основные шаги установки:
Данные шаги должны быть выполнены при любой установке перед специфическими инструкциями сервера:
Отредактируйте Ваш файл "php3.ini":
вам потребуется изменить "extension_dir" на путь к Вашей установочной директории PHP, либо куда Вы поместили файлы "php3_*.dll" (например c:\php3);
установите "doc_root" в путь, где располагается document_root web сервера (например c:\apache\htdocs или c:\webroot);
выберите, какие модули Вы желаете загружать при старте PHP. Вы можете раскомментировать линии "extension=php3_*.dll" для загрузки соответствующих модулей. Некоторые модули требуют дополнительной установки некоторых библиотек в систему для корректной работы. В FAQ PHP можно получить больше информации о том, где получить библиотеки поддержки. Вы можете также загружать модули динамически, используя в сценарии dl("php_*.dll");
на PWS и IIS Вы можете установить browscap.ini в директории "c:\windows\system\inetsrv\browscap.ini" для Windows 95/98 и "c:\winnt\system32\inetsrv\browscap.ini" для Windows NT. Дополнительную информацию по использованию browscap в PHP можно на зеркале mirror , выберите кнопку "source", чтобы увидеть это в действии;
Распакуйте дистрибутивный файл в директорию по Вашему выбору. Неплохим вариантом будет "C:\PHP3\".
Скопируйте файл "php3-dist.ini" в Вашу директорию "%WINDOWS%" и переименуйте его в "php3.ini". Ваша директория "%WINDOWS%" обычно:
c:\windows for Windows 95/98 |
c:\winnt or c:\winnt40 for NT servers |
Windows 95/98/NT и PWS/IIS 3:
Рекомендуемый метод конфигурирования этих серверов состоит в использовании INF файлов, поставляемых с дистрибутивом (php_iis_reg.inf). Вы можете отредактировать этот файл и убедитесь, что расширения и установочная директория PHP соответствует Вашим параметрам. Или Вы можете следовать перечисленным ниже шагам, чтобы сделать это вручную.
ПРЕДУПРЕЖДЕНИЕ: Эти шаги включают в себя непосредственную работу с windows registry. Мы настоятельно рекомендуем вам сначала сделать резервную копию registry. Группа разработчиков PHP не несет ответственности, если Вы повредите Ваш registry.
Запустите Regedit;
Перейдите к: HKEY_LOCAL_MACHINE /System/CurrentControlSet/Services
/W3Svc /Parameters/ScriptMap .
В меню редактирования выберите New->String Value .
Определите расширение, которое Вы хотите использовать для ваших сценариев PHP (например.php3).
Дважды щелкните на значении новой строки и введите путь к php.exe exe в поле данных (например c:\php3\php.exe %s %s). "%s %s" ОЧЕНЬ важны, PHP не будет работать без этого должным образом;
Повторите эти шаги для каждого расширения, которое Вы хотите ассоциировать со сценариями PHP;
Теперь перейдите к HKEY_CLASSES_ROOT ;
В меню редактирования выберите New->Key ;
Определите ключ к расширению, которое Вы установили в предыдущем разделе (например.php3
Выделите новый ключ, в правой части окна дважды щелкните "default value" и введите phpfile .
Повторите последний шаг для каждого расширения, которое Вы установили в предыдущей секции;
Теперь создайте другой New->Key под HKEY_CLASSES_ROOT и это имя phpfile .
Выделите новый ключ phpfile phpfile и в правой части окна, дважды щелкните "default value" и введите PHP Script .
Щелкните правой клавишей на phpfile и выберите New->Key , это имя Shell .
Щелкните правой клавишей на Shell и выберите New->Key , это имя open .
Щелкните правой клавишей на open и выберите New->Key , это имя command .
Выделите новый ключ command и в правой части окна дважды щелкните на "default value" и введите путь к php.exe . Например: c:\php3\php.exe -q %1 . (не забудьте %1).
Выйдите из Regedit;
Пользователи PWS и IIS 3 теперь имеют полностью работающую систему. Пользователи IIS 3 могут использовать tool от Steven Genusa для конфигурирования своих карт сценариев.
Windows NT и IIS 4
Для установки PHP3 на NT Server с запущенным IIS4 следуйте следующим инструкциям:
В Internet Service Manager (MMC) выберите Web site или отправной каталог приложения;
Откройте меню свойства каталога (щелкните правой клавишей мыши и выберите свойства) и тогда щелкните Home Directory, Virtual Directory или Directory tab;
Щелкните кнопку Configuration и тогда выберите App Mappings tab;
Щелкните Add, в рамке Executable наберите c:\path-to-php-dir\php.exe %s %s . Вы ДОЛЖНЫ подставить в конце %s %s , PHP не будет функционировать правильно, если Вы этого не сделаете;
В рамке Extension определите расширение файла, которое Вы желаете ассоциировать со сценариями PHP (обычно (.php3 и.phtml);
Установите требуемую безопасность (это делается в Internet Service Manager) и, если Ваш NT Server использует файловую систему NTFS, добавьте права на исполнение для директории I_USR_, которая содержит php.exe .
Windows 9x/NT и Apache 1.3.x
Вы должны редактировать Ваш файл srm.conf или httpd.conf , чтобы сконфигурировать Apache для работы с исполняемыми PHP CGI.
Хотя может быть несколько вариантов конфигурирования PHP под Apache, это делается достаточно просто даже для новичка. Пожалуйста, обратитесь к документации по Apache для получения информации о директивах конфигурации.
ScriptAlias /php3/"c:/path-to-php-dir/php.exe"
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3 .phtml
Action application/x-httpd-php3 "php3/php.exe"
Для обеспечения возможности использования исходного текста, просто создайте файл сценария PHP и вставьте этот код в: . Substitute original_php_script.php3 php3 с именем желательного файла источника (это только один из путей). Обратите внимание, что на Win-Apache все обратные слеши в пути предложения, такого как "c:\directory\file.ext" должны быть заменены на прямые.
Omni HTTPd 2.0b1 для Windows
Данная конфигурация должно быть самая простая:
Повторите шаги 2 - 6 для каждого расширения, которое Вы желаете ассоциировать с PHP.
Модули PHP:
Таблица 3-1. Модули PHP
php3_calendar.dll | Функции преобразования календаря |
php3_crypt.dll | Функции шифрования |
php3_dbase.dll | Функции баз данных |
php3_dbm.dll | Эмуляция GDBM посредством Berkely DB2 library |
php3_filepro.dll | Доступ READ ONLY к базам данных filepro |
php3_gd.dll | Библиотека функций GD для манипуляций с gif |
php3_hyperwave.dll | Функции HyperWave |
php3_imap4r2.dll | Функции IMAP 4 |
php3_ldap.dll | Функции LDAP |
php3_msql1.dll | Клиент mSQL 1 |
php3_msql2.dll | Клиент mSQL 2 |
php3_mssql.dll | Клиент MSSQL (требует MSSQL DB-Libraries) |
php3_mysql.dll | Функции MySQL |
php3_nsmail.dll | Функции Netscape mail |
php3_oci73.dll | Функции Oracle |
php3_snmp.dll | Функции SNMP (только для NT!) |
php3_zlib.dll | Функции ZLib |
Для начала мы усовершенствуем страничку регистрации, добавив возможность загружать аватар. Исходное изображение должно быть формата jpg, gif или png. Так же оно должно быть не более 2 Мб. Не беспокойтесь, после его сжатия скриптом, размер аватара будет около 3 кб и формат jpg. Откройте страницу reg. php и допишите в теге < form > строчку enctype="multipart/form-data" ,как в примере: