- •Обработка динмачиской html страницы
- •Назначение и виды веб серверов
- •Способы встраивания php скрипта в html код
- •Переменные и константы в php. Область определения переменных
- •Область видимости переменных
- •Переменные переменные
- •Константы
- •5. Особенности синтаксиса php
- •6. Глобальные и статические переменные php Глобальные переменные в php
- •Статические переменные в php
- •7. Система типов языка php
- •8. Вывод данных в php
- •Арифметические операторы php
- •Логические операторы php
- •Строковые операторы php
- •Операторы присвоения в php
- •Операторы сравнения в php
- •Операторы инкремента и декремента в php
- •Операторы эквивалентности php
- •Операции с символьными переменными в php
- •Приоритеты выполнения операторов в php
- •Операторы исполнения внешних команд в php
- •Операторы для работы с массивами php
- •Операторы управления ошибками php
- •Операторы классов php
- •Поиск и замена подстрок
- •Регулярные выражения
- •Жадные и ленивые квантификаторы в регулярных выражениях
- •Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Типы ресурсов Предопределенные константы
- •Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •I. Открытие файла
- •II. Манипуляции с данными файла
- •III. Закрытие файла
- •Запись в файл
- •Чтение из файла
- •Взаимодействие php и MySql
- •Создание базы данных с помощью html-формы
- •Листинг 1. Код html-формы
- •Листинг 2. Код записывающей html-формы
Для метода post
Содержимое формы кодируется точно так же, как для метода GET (см. выше), но вместо добавления строки к URL содержимое запроса посылается блоком данных как часть операции POST. Если присутствует атрибут ACTION, то значение URL, которое там находится, определяет, куда посылать этот блок данных. Этот метод, как уже отмечалось, рекомендуется для передачи больших по объему блоков данных.
Информация, введенная пользователем и отправленная серверу с помощью метода POST, подается на стандартный ввод программе, указанной в атрибуте action, или текущему скрипту, если этот атрибут опущен. Длина посылаемого файла передается в переменной окружения CONTENT_LENGTH, а тип данных – в переменной CONTENT_TYPE.
Передать данные методом POST можно только с помощью HTML-формы, поскольку данные передаются в теле запроса, а не в заголовке, как в GET. Соответственно и изменить значение параметров можно, только изменив значение, введенное в форму. При использовании POST пользователь не видит передаваемые серверу данные.
Основное преимущество POST запросов – это их большая безопасность и функциональность по сравнению с GET-запросами. Поэтому метод POST чаще используют для передачи важной информации, а также информации большого объема. Тем не менее не стоит целиком полагаться на безопасность этого механизма, поскольку данные POST запроса также можно подделать, например создав html-файл на своей машине и заполнив его нужными данными. Кроме того, не все клиенты могут применять метод POST, что ограничивает варианты его использования.
При отправке данных на сервер любым методом передаются не только сами данные, введенные пользователем, но и ряд переменных, называемых переменными окружения, характеризующихклиента, историю его работы, пути к файлам и т.п. Вот некоторые из переменных окружения:
REMOTE_ADDR – IP-адрес хоста (компьютера), отправляющего запрос;
REMOTE_HOST – имя хоста, с которого отправлен запрос;
HTTP_REFERER – адрес страницы, ссылающейся на текущий скрипт;
REQUEST_METHOD – метод, который был использован при отправке запроса;
QUERY_STRING – информация, находящаяся в URL после знака вопроса;
SCRIPT_NAME – виртуальный путь к программе, которая должна выполняться;
HTTP_USER_AGENT – информация о браузере, который использует клиент
Методы передачи данных GET и POST
В настоящее время, каждый сайт старается обеспечить взаимодействие с пользователем. Гостевые книги, комментарии под статьями, опросы, голосования и прочее - все это требует передачи информации от пользователя к серверу. Как именно это происходит? Эта статья о методах передачи данных GET и POST.
В настоящее время, каждый, даже самый захудалый сайт, старается обеспечить взаимодействие с пользователем. Гостевые книги, комментарии под статьями, опросы, голосования и прочее — все это требует передачи информации от пользователя к серверу. Как именно это происходит? Эта статья о методах передачи данных GET и POST.
Чаще всего, для передачи данных, используются... ссылки! Да-да! Когда вы нажимаете на ссылку, часто, вы передаете данные сервер. Большинство современных веб-сайтов, активно эксплуатируют этот метод передачи информации. Этот метод называется GET. Когда мы нажимаем на ссылку, мы хотим получить (to get) какой-то документ с сервера. Поэтому метод передачи данных через ссылку и назвали get.
Метод GET.
Метод GET удобен тем, что прост в эксплуатации. Но у него есть недостатки. Во-первых, методом GET нельзя передавать большие объемы информации, потому что данные, передаваемые этим методом входят в соств URL, длина которого ограничена.
Пример: ссылка http://dayte2.com/?u=shaman&act=state&num=9 содержит данные, передаваемые методом GET. Эти данные идут после знака вопроса.
Так как данные, передаваемые методом GET входят в соства URL документа, их может подсмотреть любой желающий. У этого есть преимущества и недостатки. Преимущество состоит в том, что можно послать ссылку вместе с данными другу. Недостаток в том, что в строке браузера отображается и ваш, только что введенный пароль. Это одна из причин, почему данные, представляющие ценность, всегда нужно передавать методом POST.
Метод POST.
Как и метод GET, метод POST служит для передачи данных на сервер. Однако, данные, переданные таким образом, идут не в URL документа, а в теле запроса, после заголовков. Эти данные могут быть восприняты CGI-программой.
Когда данные отправляются методом POST, серверу приходит что-то вроде:
POST lines.pl HTTP/1.1
Accept: */*
Referer: http://dayte2.com/shaman.shtml
Accept-Language: ru
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: dayte2.com
Content-Length: 106
Connection: Keep-Alive
Cache-Control: no-cache
После анализа заголовков, сервер видит пустую строку, которая говорит об окончании заголовков. После нее сервер видит какие-то непонятные данные. Не долго думая, сервер решает, что эти данные нужны файлу, который вызывается, и посылает эти данные документу. Если этот документ — скрипт, то он получит эти данные так же, как получает данные с клавиатуры при работе с консолью, то есть, через STDIN.
Плюсы метода POST очевидны: можно передавать неограниченные объемы информации, причем, никто не увидит эту информацию после того, как вы ее отправили (имеется ввиду, в строке браузера).
Но есть и недостатки. Вы не сможете послать данные за друга. Кроме того, если необходимо «протащить» данные через несколько форм или страниц, то это вызовет дополнительные трудности.
Однако, и их можно обойти. Один из распространенных методов: формирование скрытых полей <input type="hidden"> с именем и значением уже пришедших данных. У этого подхода есть недостатки:
можно легко подделать данные, хранимые в таких полях. Это делается просто: нужно сохранить страницу с формой на диск, исправить ее html-код, подставив в скрытые поля нужные данные, а затем нажать кнопку "Отправить" так же, как будто это реальная форма. Серверу без разницы от куда пришли данные, поэтому они будут обработаны так же.
При таком подходе приходится несколько раз оптправлять данные от клиента серверу. Скажем, вы ввели логин и пароль. На следующей странице вас просят ввести адрес и номер телефона, а в полях hidden хранят ваши логин и пароль, полученные на предыдущей странице. При отправке формы заново будут отправлены и новые данные и старые (логин и пароль).
Суперглобальный массив $_REQUEST
$_REQUEST - дает доступ ко всем переменным $_GET, $_POST и $_COOKIE.
Суперглобальные массивы $_SERVER, $_GET, $_POST, $_REQUEST, $_FILES Элемент $_FILES
Элемент $_SERVER[`DOCUMENT_ROOT`]
Элемент $_SERVER[`DOCUMENT_ROOT`] содержит путь к корневой директории сервера, если скрипт выполняется в виртуальном хосте, в данном элементе указывается путь к корневой директории виртуального хоста. Т.е. в конфигурационном файле httpd.conf виртуальный хост имеет директиву DocumentRoot, которой присвоено значение "D:/main", элемент $_SERVER[`DOCUMENT_ROOT`] будет содержать значение "D:main".
Элемент $_SERVER[`HTTP_ACCEPT`]
В элементе $_SERVER[`HTTP_ACCEPT`] описываются предпочтения клиента относительно типа документа. Содержимое этого элемента извлекается из HTTP-заголовка Accept, который присылает клиент серверу. Содержимое данного заголовка может выглядеть следующим образом
<?php image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*
Заголовок Accept позволяет уточнить медиа-тип, который предпочитает получить клиент в ответ на свой запрос. Этот заголовок позволяет сообщить серверу, что ответ ограничен небольшим множеством предпочитаемых типов.
Символ * используется для группирования типов в медиа-ряду. К примеру, символом */* задается использование всех типов, а обозначение type/* определяет использование всех подтипов выбранного типа type.
