Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
аправляет всем сервер, который "изо- 

бражает из себя" клавиатуру.) 
Следует заметить очень важную деталь: то, что был использован метод POST, 
вовсе не означает, что не был применен также и метод GET. Иными словами, 
метод POST подразумевает также возможность передачи данных через URL- 
строку. Эти данные будут, как обычно, помещены в переменную окружения 
QUERY_STRING. 
Но как же узнать, сколько именно данных переслал пользователь методом POST? До 
каких пор нам читать входной поток? Для этого служит переменная окружения 
CONTENT_LENGTH, в которой хранится строка с десятичным представлением числа 
переданных байтов данных (разумеется, перед использованием ее надо перевести в 
обычное число). 
Модифицируем предыдущий пример так, чтобы он принимал POST-данные, а также 
выводил и GET-информацию, если она задана: 
Листинг 3.3. Получение данных POST 
#include  
#include  
void main(void) { 
// извлекаем значения переменных окружения 
char *RemoteAddr = getenv("REMOTE_ADDR"); 
char *ContentLength = getenv("CONTENT_LENGTH"); 
char *QueryString = getenv("QUERY_STRING"); 
// вычисляем длину данных — переводим строку в число 
int NumBytes = atoi(ContentLength); 
// выделяем в свободной памяти буфер нужного размера 
char *Data = (char *)malloc(NumBytes + 1); 
// читаем данные из стандартного потока ввода 
fread(Data, 1, NumBytes, stdin); 
// добавляем нулевой код в конец строки 
// (в Си нулевой код сигнализирует о конце строки) 
Data[NumBytes] = 0; 

Часть I. Основы Web-программирования 52 
// выводим заголовок 
printf("Content-type: text/html\n\n"); 
// выводим документ 
printf(""); 
printf("

Здравствуйте. Мы знаем о вас все!

"); printf("Ваш IP-адрес: %s
",RemoteAddr); printf("Количество байтов данных: %d
",NumBytes); printf("Вот параметры, которые Вы указали: %s
",Data); printf("А вот то, что мы получили через URL: %s", QueryString); printf(""); } Странслируем этот сценарий и запишем то, что получилось, под именем script.cgi в каталог, видимый извне как /cgi-bin/. Откроем в браузере следующий HTML- файл с формой: Листинг 3.4. POST-форма
Name1:
Name2:
Теперь, если набрать в полях ввода какой-нибудь текст и нажать кнопку, получим HTML-страницу, сгенерированную сценарием, например, следующего содержания: Здравствуйте. Мы знаем о вас все! Ваш IP-адрес: 136.234.54.2 Количество байтов данных: 23 Вот параметры, которые Вы указали: name1=Vasya&name2=Petya А вот то, что мы получили через URL: param=value Как можно заметить, обработка метода POST устроена сложнее, чем GET. Тем не ме- нее, метод POST используется чаще, особенно если нужно передавать большие объе- мы данных или "закачивать" файл на сервер (эта возможность также поддерживается протоколом HTTP и HTML). Глава 3. CGI изнутри 53 Расшифровка URL-кодированных данных Если бы в предыдущем примере мы ввели параметры, содержащие, например, буквы кириллицы, то сценарию они бы поступили не в "нормальном" виде, а в URL- закодированном. Пожалуй, ни один сценарий не обходится без функции расшифровки URL-кодированных данных. И это совсем не удивительно. Радует только то, что та- кую функцию нужно написать один раз, а дальше можно пользоваться ей по мере необходимости. Как уже упоминалось, кодирование заключается в том, что некоторые неалфавитно- цифровые символы (в том числе и "русские" буквы, которые тоже считаются неалфа- витными) прео
 
<<-[Весь Текст]
Страница: из 287
 <<-