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

Конспект лекций по дисциплине

«Технологии создания web-ресурсов»

1. Основы синтаксиса PHP.

РНР (Hypertext Preprocessor) является одним из самых популярных языков программирования, используемых для разработки Web-приложений.

В настоящее время РНР поддерживается подавляющим большинством хостинг-провайдеров, что делает его чуть ли не основным языком, с

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

В 1994 г. датский программист Расмус Лердорф (Rasmus Lerdorf)

создал надстройку над Perl/CGI (набор скриптов) для вывода и учета посетителей своего сайта и назвал ее Personal Home Page (отсюда и произошло первоначальное название РНР). Но Perl — довольно медленный интерпретатор, и вскоре его производительности перестало хватать, поэтому разработчик написал на языке С новый интерпретатор и назвал его РНР/FI

(Personal Home Page / Form Interpreter).

В новом интерпретаторе четко прослеживались черты Perl, например символ доллара в начале имени переменной. Тогда же были заложены черты современного РНР, такие как автоматическая обработка форм,

встраиваемость в HTML и др.

В1997 г. появилась вторая версия — PHP/FI 2.0. Она была установлена примерно на 50 тыс. серверов. С одной стороны, цифра внушительная, но это всего 1% от общего числа интернет-серверов.

В1998 г. появился РНР 3.0. Именно с этой версии РНР стал рекурсивным акронимом РНР: Hypertext Preprocessor. Третья версия пользовалась существенно большим успехом, чем вторая: она была установлена на 10% всех интернет-серверов, а это уже немало! РНР 3.0 часто

критиковали за медленное ядро, т.к. сценарии выполнялись довольно медленно. Поэтому разработку версии РНР4 начали с переработки ядра.

Начиная с РНР4 интерпретатор транслирует РНР-код во внутреннее представление, а потом выполняет (а не выполняет сценарий строка за строкой, как РНР3), благодаря чему существенно повысилась производительность сценариев.

Четвертая версия РНР появилась в мае 2000 г. Обновления для этой версии РНР выпускались до конца 2007 г., а с августа 2008 г. поддержка РНР4 была прекращена.

Пятая версия РНР появилась в июле 2004 г. Было переработано ядро

Zend, что увеличило эффективность интерпретатора, добавлена поддержка

XML, переработана поддержка ООП. Теперь РНР является полноценным объектно-ориентированным языком программирования, а его объектная модель во многом схожа с моделью Java.

PHP не требует явного объявления переменных. Для выделения переменных из кода программы РНР требует, чтобы перед именем переменной указывался символ $. Например: $i, $string.

Имя переменной может состоять из латинских символов, знака подчеркивания и цифр, причем не может начинаться с цифры. Имена переменных чувствительны к регистру символов, т.е. $а и $A две разные переменные:

$а = 1; $А = 2; echo $а; echo $А;

2. Передача параметров PHP-программам.

Предположим, что у нас есть сценарий hello.php, которому нужно передать параметр name:

http://server.ru/heIlo.php?name=dima

Браузер выделяет из введенного URL протокол (http), имя сервера

(server.ru), имя сценария. Затем браузер устанавливает подключение с сервером по заданному протоколу и передает вот такой запрос:

GЕТ hello.php НТТР/1.0 \n

различные заголовки

\n\n

При использовании метода POST передаваемые данные не отображаются в окне браузера. Запрос выглядит так:

POST hello.php HTTP/1.0 \n Content-Length: 10 \n 0123456789

Как видите, передаваемые сценарию данные отображаются уже после самого запроса. Заголовок запроса Content-Length указывает, сколько байтов нужно прочитать серверу.

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

Получить доступ к параметрам, переданным методом POST, можно через массив $_POST:

Например:

$name = $_POST['name'];

Кроме массивов $_GET и $_POST в РНР есть массив $_REQUEST,

объединяющий в себе массивы $_GET, $_POST и $_COOKIE.

Если вы не знаете, откуда "пришла" переменная (была передана методом GET, POST или получена через Cookies), тогда используйте этот массив: $_REQUEST['имя'].

При создании серьезных PHP-сценариев не обойтись без специальных переменных окружения CGI. Например, переменная REMOTE_ADDR

содержит IP-адрес удаленного пользователя. Получить значение переменной окружения можно с помощью функции getenv():

echo getenv("REMOTE_ADDR");

Полезные переменные окружения:

HTTP_REFERER - Адрес сайта, с которого пользователь пришел на ваш сайт

HTTP_USER_AGENT - Браузер пользователя

REMOTE_HOST - Доменное имя удаленного компьютера

REMOTE_PORT - Удаленный порт (по этому порту браузер будет ждать ответа от сервера)

QUERY_STRING - Строка параметров, переданная сценарию

(используется редко)

SCRIPT_NAME - Путь к сценарию

SERVER_ADDR - IP-адрес сервера

SERVER_NAME - Доменное имя сервера

SERVER_PORT - Порт сервера, обычно 80

SERVER_PROTOCOL - Версия НТТР-протокола

Наверняка каждый пользователь Интернета сталкивался с ошибкой

404, которая генерируется, если запрашиваемая страница не найдена.

Вообще, это не ошибка, а обычный ответ сервера, который сообщает вам, что запрошенная страница не существует.

Кроме ответов 4XX есть и другие коды, например коды из диапазона

2XX являются "кодами успеха". Вы никогда их не увидите, поскольку если от сервера пришел код 200, значит, страница существует и отправлена в браузер. Понятное дело, что браузер выводит в этом случае не код ответа, а

сразу полученную страницу.

Коды из диапазона 4XX называются "ошибками клиента". Код 402

означает, что доступ к сайту платный. Иногда все ответы 4XX

интерпретируются как ошибка 404 — все зависит от настроек сервера.

Коды 5XX — это ошибки сервера. Например, вы пытаетесь запустить сценарий, при выполнении которого возникла ошибка, и сервер больше не

может продолжать его нормальное выполнение, поэтому он выводит ошибку

500.

Коды 1XX называются информационными — они передают различную информацию, которая так или иначе относится к запросу, а коды 3XX — это коды перенаправления.

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

Программа получает исходные данные, затем обрабатывает их и передает результат.

Как программа передаст результат — выведет в браузер пользователя,

отправит по e-mail или поместит в базу данных — нас сейчас не интересует,

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

Одним из часто используемых способов получения данных является ввод данных пользователем.

HTML-форма предназначена для передачи введенных пользователем параметров PHP-сценарию. Форма описывается с помощью тега form:

<FORM асtiоn=сценарий method=метод> <элементы формы>

</FORM>

action - задает сценарий, которому форма передает параметры method - определяет метод передачи параметров (GET или POST)

Предположим, что на сервере localhost имеется сценарий hello.php,

которому нужно передать параметр username. В строке браузера это можно сделать так:

http://localhost/hello.php?username=dima

Теперь напишем HTML-форму hello.html, передающую сценарию параметр username:

<form action=''http://localhost/hello.php'' method=''get''>

Введите ваше имя <input type=text name=username> <input type=submit value=OK name=send>

</form>

Как только пользователь введет свое имя и нажмет кнопку ОК, форма методом GET передаст параметр username сценарию hello.php.

Теперь напишем сценарий, который проверяет, передан ли ему параметр или нет.

Если параметр не передан, то сценарий выводит форму. А вот если форма уже была отображена, и пользователь передал параметр, тогда мы его обработаем (просто выведем обратно в браузер). Проверить, существует ли параметр username, можно:

if(isset($_GET['username'])) ...

Но лучше проверять "наличие" не параметра username, а параметра send — это наша кнопка. Так мы точно будем знать, что пользователь передал параметр через форму, а не вручную.

<?php

if (!isset($_GET['send'])) {

//выводим форму из hello.html echo join (' ', file('hello.html'));

//и прерываем выполнение сценария

die();

}

// обрабатываем параметры echo $_GET['username'];

?>

Функция file() получает содержимое файла в массив строк. Но чтобы его вывести одной строкой, т.е. для объединения массива, используется функция join().

Вместо этой конструкции можно использовать более современную функцию file_get_contents():

echo file_get_contents('hello.html');

Можно было форму вывести оператором echo, а не загружать из файла,

но старайтесь, чтобы ваш РНР-код содержал минимум HTML-кода.