Данную статью я решил посветить всем начинающим изучать PHP
, потому что у всех возникает одна и та же ошибка. Почему её допускают, не знаю, но допускают постоянно. Я без преувеличений скажу, что получил уже около сотни вопросов, на которые ответ будет дан в этой статье. Эта ошибка связана с неправильным запуском в PHP
.
Как делают практически все новички:
- Создают PHP-файл
(иногда HTML-файл
, но это самые новички).
- Записывают туда PHP-код
.
- И двойным кликом пытаются открыть его в браузере.
Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.
Ошибка данного подхода состоит в том, что ученик не понимает, что PHP - это серверный язык
, а не клиентский. Это HTML
или JavaScript
клиентские языки, они, конечно, обрабатываются браузером. Но для PHP нужен интерпритатор
. И вот данный интерпритатор запускается сервером.
Вывод: запускать PHP-код надо через сервер
. Если у Вас Denwer
, значит, через него.
Теперь, как запускать PHP-код через Denwer
. Большинство новичков вновь делают ошибку. Они вроде бы всё делают правильно, создают нужные папки, перезапускают Denwer
и вроде бы, осталось только правильно вызвать файл. Но тут снова ошибка: они вновь открывают файл просто в браузере (либо перетаскиванием файла в браузер, либо двойным кликом). Это легко можно заметить по адресу в адресной строке. Там будет что-то наподобие: file:///Z:\home\mysite.local\www\script.php
.
А правильно запускать надо, вводя адрес виртуального хоста
. То есть прямо в адресной строке браузера вводите: http://mysite.local/script.php
- всё, теперь скрипт запустится и выведет свой результат.
Надеюсь, данная статья поможет многим новичкам, только начинающим изучать PHP
.
|
Содержание
eregereg -- парное значение регулярного выражения
Описание
int ereg (string pattern, string string, array );
Ищет парные значения string
в регулярном выражении, указанном в pattern
. Если парные значения найдены для подстрок в круглых скобках
pattern
и функция вызывалась с третьим аргументом regs
, то парные значения будут сохранены в элементах regs
. $regs будет содержать подстроку, которая начинается с первой левой круглой скобки;
$regs будет содержать подстроку, начинающуюся со второй скобки и т.д. $regs
будет содержать копию string
. Поиск чуствителен к регистру. Функция возвращает true, если парное значение для pattern было найдено в string,
или false, если не было найдено парных значений или произошла ошибка. Следующий код извлекает дату в ISO формате и выводит в формате DD.MM.YYYY:
Example 1. ereg() example
If (ereg("({4})-({1,2})-({1,2})", $date, $regs)) {
echo "$regs.$regs.$regs";
} else {
echo "Invalid date format: $date";
}
|
ereg_replaceereg_replace -- заменяет регулярное выражение
Описание
string ereg_replace (string pattern, string replacement, string string);
Эта функция сканирует string
на парные значения к
pattern
, затем заменяет найденный текст на replacement
. Если pattern
содержит подстроки в круглых скобках, то replacement
может содержать подстроки вида
\\ цифра
, которые будут заменены текстом, совпадающим с цифровой подстрокой в скобках; \\0 обработает все содержимое строки. Может быть использовано до 9 подстрок.
Скобки могут быть сгруппированы, в этом случае они считаются по открывающим скобкам.
Например, следующий код напечатет "This was a test" три раза:
Пример 1. ereg_replace()
$string = "This is a test";
echo ereg_replace(" is", " was", $string);
echo ereg_replace("()is", "\\1was", $string);
echo ereg_replace("(()is)", "\\2was", $string);
|
См. также , , и .
eregieregi -- нечувствительный к регистру поиск парных значений в регулярных выражениях
Описание
int eregi (string pattern, string string, array );
eregi_replaceeregi_replace -- замена регулярного выражения без учета регистра
Описание
string eregi_replace (string pattern, string replacement, string string);
splitsplit -- разбивает строку на массив по регулярному выражению
Описание
array split (string pattern, string string, int );
Возвращает массив строк, каждая из которых является подстрокой строки, образованные
разбитием этой строки на части, отделенные друг от друга pattern
. Если произойдет ошибка, функция вернет false. Для получения первых 5 полей из строки в
/etc/passwd:
Будет выдано
.
Эта функция может быть использована организации нечувствительного к регистру сравнения в
продуктах, которые поддерживают только чувстуительные к регистру выражения.
|
#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
Неправильная обратная ссылка на подвыражение.
Для начала мы усовершенствуем страничку регистрации, добавив возможность загружать аватар. Исходное изображение должно быть формата jpg, gif или png. Так же оно должно быть не более 2 Мб. Не беспокойтесь, после его сжатия скриптом, размер аватара будет около 3 кб и формат jpg. Откройте страницу reg.
php
и допишите в теге <
form
>
строчку enctype="multipart/form-data"
,как в примере:
Регистрация