Самоучитель по креативному веб-дизайну. Книга 4, стр.24

зуется одна и та же встроенная PHP-функция mysqi query(). (Следует иметь в виду, что регистрация посещения каждой страницы Web-сайта при интенсивном трафике может привести к снижению производительности Web-сервера.



Определение IP-адреса посетителя для запросов

Web-страницы, переданных через прокси-сервер

В предыдущем совете вы научились создавать таблицы MySQL и использовать

PHP-сценарии (некоторые из которых представляют собой пользовательские

функции) для организации журнала посещений страницы за счет добавления в SQL-таблицу строк данных. Помимо генерации отчетов по нескольким страни — цам и определения того, какие именно страницы просматривает посетитель в те —

чение сеанса, в некоторых случаях разработчики сайта желают идентифицировать посетителя по его IP-адресу. При наличии таблицы UsageLog (созданной в пре — дыдущем совете) вы имеете возможность выполнить SQL-запрос, аналогичный следующему, который позволяет определить IP-адреса используемые в сеансах с сервером за последние 14 дней:

SELECT vistor_IP ‘Visitor IP’, session_ID ‘Session ID’,

DATE_FORMAT(DT_retrieved, ‘ %m/%d/%y %T’) ‘Date & Time’

FROM usageLog,

WHERE (TO_DAYS(NOW()) — TO_DAYS (DT retrieved) )

GROUP BY vistor_IP, session_ID;

Каждый компьютер в сети Internet имеет уникальный IP-адрес. Как правило,

Internet-провайдер назначает пользователю IP-адрес из «банка» контролируемых им адресов. При использовании Web-браузера для передачи Web-серверу HTTP — запроса на получение Web-страницы Web-сервер для отправки запрошенной

страницы пользуется IP-адресом, который браузер передает в заголовке HTTP- запроса. Как уже говорилось выше, каждый компьютер в сети Internet (либо на — прямую, либо через Internet-провайдера) получает свой собственный уникальный

IP-адрес. Тем не менее, компьютеры, которые получают доступ к сети через один и тот же прокси-сервер, имеют одинаковый IP-адрес (который представляет собой IP-адрес прокси-сервера). (Компании, как правило, помещают прокси-сер- вер между компьютерами в локальной сети и сетью Internet по соображениям бе — зопасности.)

Самоучитель по креативному веб-дизайну. Книга 4, стр.25

При получении посетителем доступа к сайту через прокси-сервер компью —

тер посетителя передает HTTP-запрос на получение Web-страницы прокси-, серверу. Прокси-сервер (компьютер во внутренней сети компании, который также подключен к Internet) анализирует сообщение, которые внутренний пользователь пытается передать в Internet. Если сообщение проходит проверку

на соответствие «правилам» прокси-сервера, прокси-сервер запоминает IP-адрес

54 2 Глава 10. РНР4





компьютера, передавшего запрос, заменяет его в поле REMOTE ADDR заголовка

запроса своим собственным IP-адресом и передает HTTP-запрос Web-серверу.

Web-сервер обрабатывает такой запрос точно так же, как и любой другой. Web-сервер (или PHP-процессор, если посетитель запросил PHP-страницу), и на — ходит запрошенную страницу. Затем он передает страницу обратно по IP-адресу,

содержащемуся в поле REMOTE_ADDR заголовка HTTP-запроса. Таким образом,

если между сетевым пользователем и сетью Internet находится прокси-сервер,

Web-сервер передает Web-страницу прокси-серверу. После получения Web-страни — цы прокси-сервером, последний проверяет сообщение на предмет отсутствия ви —

русов и другого «нелегального» содержимого. Если все проверки завершаются ус — пешно, прокси-сервер передает HTTP-отклик по IP-адресу компьютера, запросившего эту страницу.

Что касается посетителя сайта, работа через прокси-сервер ничем не отлича — ется от непосредственной работы с сетью Internet, поскольку прокси-сервер, дей — ствующий в качестве посредника, прозрачен для посетителя. (Web-посетитель направляет Web-серверу запрос на получение Web-страницы, а сервер передает

Самоучитель по креативному веб-дизайну. Книга 4, стр.26

запрошенную страницу браузеру.) Тем не менее, с точки зрения >^еЬ-сервера

PHP-сценарий не имеет возможности определять фактический IP-адрес посети —

теля из поля REMOTE ADDR заголовка запроса, поскольку прокси-сервер заменяет

IP-адрес посетителя своим собственным адресом.

К i счастью, прокси-сервер отправляет IP-адрес посетителя в поле

HTTP X_FORWARDED_FOR. Таким образом, во избежание потери информации об

IP-адресе посетителей, работающих через прокси-серверы, для определения фак —

тического IP-адреса посетителя (который можно сохранять, например, в столбце

visitor_I P таблицы UsageLog) ИСПОЛЬЗуетСЯ Следующий КОД!





//Прокси-сервер вставляет данные HTTP X_FORWARDED FOR в заголовок

//сообщения. Если посетитель работает без прокси-сервера, функция getenv()

// возвращает либо пустое значение, либо NULL

$visitor_IP = getenv(«HTTP_XJFORWARDED_FOR»);



// Если посетитель работает без прокси-сервера, извлечь IP-адрес из

// поля REMOTE_ADDR в заголовке запроса

if ( ($visitor_JCP == null) or ($visitor IP ==»"))

$visitor_IP = getenv(«REMOTE_ADDR»);

else

{

// Отформатировать IP-адрес в виде proxy^IP [,] visitor_IP

list ($proxy_IP, $visitor_IP) = split (‘ [,] ‘ , $visitor_IP) ;

$visitor IP = ltrim($visitor_IP) ;

}

Исходный PHP-код предыдущего сценария и пользовательская функция

(chptiOTipi4insert о) , котоая используется для записи данных посетителя

(включая реальный IP-адрес), находится в архиве chptiOTipi4.zip, который

можно выгрузить из сайта издательства русскоязычной редакции этой книги

(http://www. diasoft. kiev. ua).

Глава 10. РНР4 54 3



Предотвращение принятия одним посетителем

PHP-идентификатора сеанса другого посетителя

При использовании переменных с значениями долговременного хранения (т. е переменных, которые сохраняют свои значения при переходе посетителем от од — ной странице Web-сайта к другой) для организации (или продолжения) сеанса

можно воспользоваться либо cookie-набором, либо встроенной функцией

session__start о. При работе с cookie-наборами Web-браузер сохраняет их в

cookie-файле на жестком диске компьютера посетителя. Если же вы начинаете РНР-сеанс, PHP-процессор сохраняет имена и значения сеансовых переменных в файле сеанса на Web-сервере.

PHP-процессор создает сеансовые файлы в каталоге, который был указан при

установке РНР. По умолчанию программа установки РНР выбирает в качестве пути для записи сеансовых файлов \PHP\sessionData на том же диске, на кото —

ром установлен РНР. Таким образом, если РНР установлен на диске D, ПО умол — чания программа установки в качестве каталога записи файлов сеансов будет ис —

пользовать путь D:\PHP\sessionData. (Для определения пути к каталогу файлов

СеанСОВ МОЖНО ВЫЗВатЬ Встроенную РНР-фунКЦИЮ session_save_path( ) .)

Сеансовый файл носит имя sess_. Если PHP-сценарий вызыва —

ет функцию session_start() , когда переменная $PHPSESSID не определена, она помещает в переменную текстовую строку длиной 32 символа и для получения имени файла сеанса добавит эту строку к строке sess_. Файл с полученным име- нем будет создан в каталоге файлов сеансов. Предположим, например, что функ —

ция session_start( ) в сценарии установила значение переменной $PHPSESSID

равным n d06205502dlbb3a0f2553bac4de763ad». РНР-процеССОр СОЗДаСТ файл Се —

анса D:\PHP\SessionData\sess_d06205502dlbb3a0f2553bac4de763ad, В КОТОРОМ будут хранится сеансовые переменные. (Сеансовые переменные создаются путем передачи имен переменных в качестве параметров функции

session register () .)

Если PHP-сценарий вызывает функцию session_start() , когда переменная

$PHPSESSID уже содержит 32-символьное строковое значение, для поиска и от — крытия существующего файла сеанса PHP-процессор будет использовать име — ющийся идентификатор сеанса (т. е. значение переменной $PHPSESSID). Пред — положим, например, что известно, что PHP-процессор при открытии страницы www. NVBizNet. com/HWDTT/secret. php присвоил сеансу идентификатор

Самоучитель по креативному веб-дизайну. Книга 4, стр.27



HTML & Web Design Tips & Techniques

f;

if ($heading <> «»)

echon$heading» ;

return;

}

?>

По аналогии, приведенная ниже функция будет создавать нижний колонтитул:





function endHTML()

С

echo ‘ i

Created by Konrad King.



© 2001 — all rights reserved!’;

echo «

Самоучитель по креативному веб-дизайну. Книга 4, стр.28

ции, создающей шаблон верхнего или нижнего колонтитула, при последующем

открытии посетителем все страницы сайт& будут содержать новые данные.



Использование РНР для внедрения на страницу функциональности выгрузки файла

При необходимости передачи файлов с одного компьютера на другой через

Internet, как правило, используется клиентское приложение FTP, с помощью ко —

торого пользователь имеет возможность зарегистрироваться на FTP-сервере. (FTP представляет собой сокращение от File Transfer Protocol (протокол передачи фай — лов), а FTP-клиент — это программа, которая реализует клиентские функции, оп — ределенные в спецификации FTP-протокола.) Для обеспечения простого метода выгрузки файла (т. е. его помещения) в каталог на жестком диске Web-сервера FTP — серверы предлагают возможности, которые могут показаться излишними для посе — тителя вашего сайта. Например, FTP-серверы, как правило, дают пользователям воз — можность выгружать и загружать файлы, считывать список содержащихся в каталоге

файлов и удалять, переименовывать и создавать файлы и каталоги. Если вы, напри — мер, разрабатываете Web-сайт для бухгалтерской компании или отдела заработной платы, вам, вероятно, потребуется обеспечить для посетителей только возможность выгрузки файлов с бухгалтерскими данными или данными о заработной плате.



ПРАКТИКУМ

Для обеспечения возможности выгрузки посетителем файлов (без использования внешней клиентской FTP-программы) установите значение атрибута type в деск —

рипторе
равным «file» , как показано в следующем фрагменте кода:




enctype=»multipart/form-data»>

Выберите файл:









Глава 10. РНР4 54 7





Элемент fil e формы позволяет посетителю ввести в однострочное поле ввода

текста путь к файлу на локальном или сетевом диске, который должен быть пе — редан Web-браузером на Web-сервер. Вместо ввода полного пути к файлу для выгрузки посетитель имеет возможность нажать кнопку «Обзор» («Browse»)

Самоучитель по креативному веб-дизайну. Книга 4, стр.29

справа от элемента формы и в диалоговом окне «Выбор файла» («Choose File»)

выбрать файл для загрузки. Как Netscape Navigator (версии 3.0 и выше), так и

Internet Explorer (версии 4.0 и выше) поддерживают значение «file » для атрибу —

та type в начальном дескрипторе
.

После нажатия посетителем кнопки отправки формы (которая в приведенном примере помечена как «Загрузить») браузер передает файл, указанный в эле —

менте загрузки файла, на Web-сервер вместе с другими результатами формы.

PHP-сценарий, адрес которого содержится в атрибуте action дескриптора

(в приведенном примере это файл chptiOTipi7Upioad. php), сохраняет файл в каталоге на Web-сервере. Страница с элементом загрузки файла и РНР —

сценарий, используемый для сохранения файла на Web-сервере, находятся в ар —

хиве chptiOTipi7.zip, который можно выгрузить из сайта издательства русско —

язычной редакции ЭТОЙ КНИГИ (http://www. diasoft. kiev. ua).

Перед использованием формы выгрузки файла вызовите в РНР-сценарии фун —

кцию opendir(), необходимую для выбора существующего каталога, в который будет сохраняться файл, передаваемый браузером на Web-сервер. (Если каталог

не будет выбран явным образом, PHP-процессор поместит загружаемый файл в тот же каталог, в котором находится Web-страница, с помощью которой файл был загружен. Предположим, например, что файлы, передаваемые Web-браузе —

ром, необходимо сохранять в том же каталоге, в котором находится Web-страни —

ца загрузки файлов. Следующие PHP-операторы сначала пытаются открыть ката —

лог загружаемых файлов, и если он не существует, для создания каталога вызывается функция mkdir(), а затем повторно вызывается функция opendir():



if (!$handle = @opendir(«upload»))

{

mkdir («upload», 0666);

$handle = opendir(«upload»);

}

(Символ @ перед вызовом функции opendir о подавляет вывод РНР-процес — сором предупреждающих сообщений, в частности сообщения «Warning: Folder does not exist» («Предупреждение: каталог не существует»).)

. В функциях opendir о и mkdr о можно указывать как относительные, так и

абсолютные пути. В приведенном примере для открытия (и, при необходимости, создания) подкаталога «upload» в том же каталоге, в котором хранится Web-страни —

ца, выполняемая РНР-процессором, применяется относительная адресация.

PHP-сценарий работает с содержимым файла, который передается с помощью элемента загрузки файлов, равно как и с текстом и числами, содержащимися в результатах формы. Независимо от того, работает сценарий с содержимым файла или скалярным (т. е. строковым или числовым) значением, он ссылается на дан — ные, полученные от элемента формы с помощью переменной, имя которой полу — чено за счет помещения знака доллара ($) перед именем элемента формы. В

54 8 Глава 10. РНР4





приведенном примере атрибут name элемента загрузки файлов имеет значение upioadFiie. Таким образом, PHP-сценарий для ссылки на содержимое файла, путь к которому посетитель ввел в элементе upioadFiie формы, будет использо —

вать Переменную $uploadFile.

При передаче Web-серверу результатов заполнения формы, содержащей эле — менты загрузки файлов, Web-браузер передает в результатах формы не только со- держимое файла, но и его имя, тип и размер. PHP-процессор, в свою очередь,

уавтоматически сохраняет загруженный файл во временном каталоге на Web-серве —

ре и создает четыре переменных, которые PHP-сценарий может использовать при работе с выгруженным файлом. Имена этих четырех переменных образованы

от имени элемента формы, с помощью которого данный файл был загружен на сервер. В приведенном примере элемент загрузки файлов имеет имя upioadFiie. Таким образом, PHP-процессор создаст следующие переменные:

• $upioadFiie Полный путь к содержимому загружаемого файла на Web-сер —

вере (например, /tmp/php098XM0). Значение Переменной $uploadFile В

сценарии может использоваться для ссылки на содержимое файла.

• $upioadFiie name Имя загружаемого файла на компьютере посетителя.

• $upioadFiie_type MIME-тип выгружаемого файла, если он известен.

• $upioadFiie_size Размер файла в байтах.

Встроенная функция PHP move_upioaded_fiie() позволяет РНР-сценарию

перемещать файл из одного каталога в другой. Таким образом, в приведенном примере для перемещения загруженного Web-браузером файла в каталог, путь к которому содержится в переменной $dir, необходимо вызвать функцию

move_uploaded_file () Следующим образом:



move_uploaded_file($uploadFile, «$dir/$uploadFile name»);



Для вывода посетителю сообщения об успешном или неудачном перемеще — нии файла из временного буфера результатов заполнения формы на сервере в другой, постоянный каталог, имя которого содержится в переменной $dir, вызо —

вите функцию move upioad_fiie() в операторе if, как показано в следующем примере:



if (move_uploaded_file ($uploadFile, «$dir/$uploadFile_name») )

echo «OK: файл \»$uploadFile_jname\» успешно загружен.»;

else

echo «ОШИБКА: сбой при загрузке файла \»$uploadFile name\».»;



ПРИМЕЧАНИЕ При написании сценариев, которые позволяют посетителям загружать файлы в каталоги Web-сайта необходимо убедиться, что сценарий не допускает загрузку файлов с расширениями, используемыми для обозначения файлов, которые Web-сервер дол — жен передавать на обработку PHP, ASP, Perl или другим процессорам серверных сценариев. Если этого не сделать, посетитель может нанести непоправимый вред сайту. Например, заг —

Самоучитель по креативному веб-дизайну. Книга 4, стр.30



HTML and Web Design Tips & Techniques



Добро пожаловать, посетитель!

Текущее время в Киеве: ,

дата: .



При каждом обновлении (или новой загрузке) Web-страницы время и

(раз в сутки) дата будут меняться.

Самоучитель по креативному веб-дизайну. Книга 4, стр.31

начальным () дескрипторами, на обработку соответствующе — му интерпретатору сценариев. Значит, в операционной системе Windows обра — ботчик asp. dll передает VBScript-сценарий, включенный в ASP-файл, интерпре- татору VBScript, операторы JScript — интерпретатору JScript и т. д.

В свою очередь, интерпретатор сценария интерпретирует оператор(ы) сцена — рия и возвращает результат (если он есть) в виде строки HTML (дескрипторы и текст) обработчику сценариев asp. dll. Затем обработчик сценариев вставляет в

ASP-документ вместо сценария результат его выполнения и передает измененную

Глава 11 . Активные серверные страницы (ASP) 551





страницу Web-серверу И, наконец, сервер пересылает страницу браузеру, который

запросил ее. Весь этот процесс показан на рис. 11.1.

Если бы активные серверные страницы позволяли отображать на Web-страни —

це только изменяющиеся дату и время, то вряд ли стоило бы создавать для этого

целую технологию. К счастью, использование сценария на стороне сервера, ото — бражающего на странице дату и время — это лишь простейший пример того, что можно сделать с помощью ASP. Как мы увидим в данной главе, с помощью соот- ветствующего сценария можно подстраивать содержимое Web-страницы в зависи — мости от того, кто посещает вашу страницу, какой у него браузер, и какие дей — ствия он предпринимал во время посещения вашей страницы (или во время сеанса). Например, предположим, что вы применяете технологию ASP для уп — равления банковскими оплатами, суммами на счетах или счетами кредитных карточек. Сценарии, включенные в состав Web-страниц банка, генерируют HTML и текст для отображения информации о вашем счете. Если кто-то другой войдет на сайт вашего банка, он увидит данные по своему (а не вашему) счету —

Самоучитель по креативному веб-дизайну. Книга 4, стр.32

по тому же самому Web-адресу.





55 2 Глава 11. Активные серверные страницы (ASP)





Кроме отображения динамического и настраиваемого содержимого Web-стра — ницы, разработчики могут применять сценарии, вставленные в ASP-страницы,

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

счета на другой. После щелчка: на кнопке «Готово» ваш браузер пересылает вве —

денную вами (т. е. принятую из формы) информацию по URL-адресу, указанному в

атрибуте action дескриптора формы
. Если по этому адресу находится ASP — страница, сервер передает Web-документ (заданный URL-адресом) и информацию, принятую из формы, обработчику ASP-сценариев. Обработчик сценариев передает указанные (или выбранные) вами в HTML-форме сумму и номера счетов интерпре — татору сценариев, который, в свою очередь, выполняет операторы сценария, кото- рые изменяют информацию о вашем счете, хранящуюся в таблицах базы данных.



Что нужно, чтобы создавать и просматривать

ASP-страницы

Для создания ASP-страницы нужен только текстовый редактор наподобие Блокнота (Notepad), стандартно присутствующий во всех версиях Windows. Или же можно воспользоваться любым из множества средств разработки Web-стра —

ниц, таким как Visual InterDev или FrontPage компании Microsoft, Hornesite ком —

пании Allaire, GoLive компании Adobe или Dreamweaver компании Macromedia.

ASP-страница — это обычный текстовый ASCII-файл, обычно с расширением

.asp. Поэтому при использовании инструментов разработки Web-сайтов для со —

здания ASP-страницы редактировать страницу можно либо той же инструмен- тальной программой, либо любой другой, либо текстовым редактором (напри —

мер, Блокнотом). Надо лишь помнить, что для обработки в качестве

ASP-страницы этот документ должен иметь расширение, связывающее его с ин —

терпретатором asp. dl l (обычно это расширение. asp, поскольку администрато —

ры сайтов связывают (назначают) файлы с расширением. asp с обрабатывающим

его Приложением asp. dll) .

Для опубликования ASP-страниц (чтобы ASP-страницы стали доступными в Internet или Intranet-сети предприятия) нужен Web-сервер, поддерживающий ASP. Поскольку компания Microsoft разработала технологию ASP, то неудивительно, что ее Web-сервер — Internet Information Server (MS) — поддерживает ASP. Если провайдер, предоставляющий хостинг для вашего сайта, использует Windows NT Server 4.0, он, возможно, установил I IS 2.0 (поддерживающий ASP версии 1.0).

Web-сервер IIS версии 3.0 входит в состав Windows NT 4.0 Service Pack 3, a IIS

4.0 свободно доступен как часть пакета обновлений Windows NT 4.0 Option Pack. (На момент написания этого текста Option Pack 4.0 можно выгрузить из Web —

сайта КОМПанИИ Microsoft ПО адресу http://www. microsoft. com/NTServer/

downloads/recommended/NT40ptPk/default. asp.) И I IS 3, И IIS 4 поставляются

с библиотекой asp. dll, обеспечивающей поддержку ASP версии 2.0. В состав

Windows 2000 входит I IS версии 5.0, поддерживающий ASP версии 3.0.

В дополнение к IIS (версии 2 и выше), поддержку ASP обеспечивает и про- дукт Personal Web Server (PWS) компании Microsoft, входящий в состав уже упо —

Глава 11. Активные серверные страницы (ASP) 55 3





мянутого пакета обновлений Windows NT 4.0 Option Pack. (Между, прочим,

Personal Web Server можно запустить не только под управлением Windows NT Workstation, но и под управлением Windows 95 и более новых версий.) Если вы разместили свой сайт на Web-сервере без IIS (или PWS), то все равно есть воз — можность использовать ASP. Узнайте у провайдера — возможно, он установил расширение ASP от компании вроде ChililSoft или Halcyon Software. Если, на — пример, установлен ChililSoft, то он позволяет выполнять ASP на Web-серверах компаний Apache, Lotus, Netscape и Microsoft, работающих на платформах Microsoft, Sun и IBM.

Самоучитель по креативному веб-дизайну. Книга 4, стр.33



HTML and Web Design Tips & Techniques







Response. Write «Дата и время на Web-cepBepe: »

Response. Write(now())

%>



Полезные ссылки
Случайные записи
  • 04.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.15
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.99
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.113
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 151
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 061
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.46
  • 19.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.4
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 091
  • 11.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.37
  • 07.09.2011">Сим-карта sim4FLY — удобно и надежно
  • 24.02.2011">Руководство по actionscript. часть 7, стр. 008
  • 10.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.92
  • 13.03.2011">Руководство по actionscript. часть 3, стр. 111
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 060
  • 15.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.42
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...