Июнь 2010

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

После ввода посетителем его имени пользователя и пароля в поля формы входа на сайт и нажатия кнопки «Войти» PHP-сценарий, аналогичный приве- денному ниже, устанавливает соединение с базой данных MySQL и определяет, присутствует ли введенные пользователем имя и пароль в списке авторизирован- ных пользователей и паролей:





$db_host = «localhost»;

$db_user = «root»;

$db_pass = «»;

$dbjname = «hwdtt» ;

// Установить соединение с СУБД MySQL

$link = mysql connect($db_host, $db_user, $db_pass;

// Выбрать базу данных с таблицей siteAccessList

mysql_select db ($db name, $link) ;

// Сформировать запрос и передать его на выполнение СУБД

$query = «SELECT username FROM siteAccessList » .

«WHERE username = \»$username\» «. «AND password = \»$password\»";

$result = mysql query ($query, $link) ;

// Определить количество строк в результатах запроса. Если пара

// имя/пароль присутствует в файле, результаты запроса будут содержать

//в точности 1 строку. В противном случае функция mysql num_jrows ()

// обнаружит, что запрос вернул ноль (0) строк.

if (mysql_num_rows ($result) == 0)

header («Location: ChptlOTipllAccessDenied. php»);

else

header («Location: ChptlOTipllLoginSuccessful. php»);

?>

После вызова функции mysqi_connect() для регистрации на сервере MySQL

сценарий вызывает функцию mysqi_seiect_db(), которая выбирает базу данных,

Содержащую СПИСОК ЧЛеНОВ Сайта (В Приведенном Примере ЭТО SiteAccessList). Далее сценарий формирует запрос (т. е. SQL-оператор SELECT), который указыва —

ет СУБД вернуть строки таблицы, содержащие пару имя пользователя/пароль, совпадающие с именем и паролем, введенным посетителем в форме входа на

сайт. После вызова в сценарии функции mysqqi_query о, передающей запрос на исполнение СУБД, СУБД выполняет запрос и помещает список строк с совпада — ющими парами имя пользователя/пароль в выходной буфер.

Функция mysqi num_rows() определяет количество строк, возвращаемых

СУБД в результате выполнения SQL-оператора SELECT, переданного ей функцией

538 Глава 10. РНР4





mysql query () . ЕСЛИ фуНКЦИЯ mysqljrmm_rows () В Операторе if-els e ВОЗВраща —

ет значение «1″ , посетитель имеет право доступа на сайт. В противном случае,

если функция возвращает значение «0м, сценарий запрещает доступ посетителя

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

поскольку введенная посетителем пара имя пользователя/пароль отсутствует в списке авторизированных пользователей сайта.

Web-страница с формой входа на сайт и PHP-страница с сценарием входа на

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

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



Исключение возможности изменения посетителями значений переменных с помощью URL-аргументов

Для передачи результатов заполнения формы PHP-сценарию можно пользо —

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

ния пар имя/значение в конец URL-адреса PHP-страницы (как это делает метод GET) представляет собой потенциальную угрозу безопасности. Посетители могут изменить значения переменных, которые вы не хотите менять.

Предположим, например, что сайт имеет страницу входа, которая требует от

посетителя ввода пары имя пользователя/пароль. После ввода корректных значе — ний сценарий входа устанавливает PHP-сеанс и присваивает переменной, ска —

жем, с именем $s_username, имя, которое посетитель ввел для получения досту —

па к сайту. До входа на сайт переменная $s_usemame не содержит значения (т. е.

не определена), поэтому для предотвращения несанкционированного доступа в разделы сайта, доступные только для членов сайта, можно воспользоваться опе- ратором if, аналогичным показанному в следующем примере:





session_start() ;

i f (!isset($s_username))

{

header(«Location: http://www. NVBizNet. com/HWDTT/

LoginScreen. htm»);

exit ;

{

?>



К сожалению, если посетитель введет в адресной строке браузера URL-адрес

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

менной $s_username равным «Konrad»:



http://www. NVBizNet. com/HWDTT/Loggedln. php? s username=Konrad

Глава 10. РНР4 53 9





Поскольку при проверке в начале PHP-страницы переменная $s_usemame бу —

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



ПРАКТИКУМ

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

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

этом молено с помощью следующего кода проверить, что посетитель сайта не ввел дополнительных аргументов в URL-адресе страницы:





if ($HTTP_SERVER_VARS["argcM] != 0)

{

header(«Location: $PHP_SELF»);

exit;

}

?>

За счет передачи результатов заполнения формы в теле HTTP-запроса вы га — рантируете, что ни одна PHP-страница не будет принимать аргументы из URL — адреса. Поэтому, если PHP-процессор обнаружит в URL-адресе аргументы, про — цессор просто заново загрузит эту же страницу, но без аргументов.



Использование РНР и MySQL для отслеживания

положения посетителя на Web-сайте

После создания Web-сайта часто разработчики желают получить информацию

о посетителях сайта, посещаемых ими страницах и (возможно) LJRL-адреса стра — ницы, с помощью гиперссылки на которую посетитель попал на их сайт. Для со — здания полного журнала посещений сайта по каждом посетителю обратитесь к своему Internet-провайдеру. Большинство коммерческих Web-серверов (включая сервер IIS) имеют встроенные возможности по генерации журналов посещений

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

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

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

определенным страницам сайта, для создания собственных отчетов о посещаемо — сти можно воспользоваться таблицей MySQL и набором PHP-сценариев. Предпо — ложим, например, что для создания таблицы usageLog в базе данных MySQL был выполнен следующий SQL-оператор CREATE:



CREATE TABLE UsageLog

(visitor_I P TEXT,

page_URL TEXT,

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





DT_retrieved TIMESTAMP,

referrer URL TEXT, session_I D TEXT,

session_view s INTEGER) ; [ НИ

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

usageLog базы данных MySQL.



function recordPageHit($db_host,$db_user,$db_pass,$db_name,$sessionID)

{

global $REMOTE_ADDR, $HTTP_XJFORWARDED_FOR, $PHP_SELF, $link, $result;

// Для экономии места используется функция str_jreplace() для удаления из

// URL строки //"http://". Кроме того, для исключения запроса после "?" в

// URL используется explode(), если таковой имеется.

$referer = explode("?",

str_replace("http://", "", getenv("HTTP_REFERER")));

// Вызвать пользовательскую функцию для установки соединения с СУБД MySQL

if (connectToDB ($db_host, $db_user, $db pass, $db name))

{

// Вставить только одну строку для каждой страницы в одном сеансе. Если

// посетитель просматривает страницу несколько раз, отслеживать коли -

// чество посещений за сеанс в столбце Msession views" таблицы "usageLog"

$query = "UPDATE usageLog " .

"SET session_views = session views + 1 ".

"WHERE session ID '= '$sessionID' ".

" AND page_URL = ' $PHP_JSELF' " ;

$result = executeQuery($query);

// Проверить присутствует ли оператор UPDATE в строке для страницы.

// Если нет, вставить в таблицу строку для страницы. Страница будет

// содержать только одну строку информации за один сеанс.

if (!mysql_affected_rows ($link) )

{

$query = "INSERT INTO usageLog " .

" (visitor IP, page URL, referer_URL, ". "session_ID, session_views) ".

"VALUES ('$REMOTE_ADDR' , '$PHP_SELF', ".

"'$referer[0]‘,’$sessionID’,1)»;

$result = executeQuery($query);

}

}

return;

}

?>



Скопируйте исходный PHP-код приведенной выше функции и пользовательс — кой функции connectToDB () (служащей для установки соединения с СУБД

MySQL в начале функции recordPageHito) на свой компьютер, выгрузив архив

chptiOTipi3.zip из сайта издательства русскоязычной редакции этой книги (http :

//www. diasoft. kiev. ua). Страница chptiOTipi3.php (входящая в состав архива

chptiOTipi3.zip) содержит операторы, которые необходимо вставить в начало фай —

лов РНР-СТранИЦ ДЛЯ Организации Сеанса И ВЫЗОВа фуНКЦИИ recordPageHit() .

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





Обратите внимание, что функция recordPageHit() вызывает одну и ту же поль — зовательскую фуНКЦИЮ (executeQuery() , ВКЛЮЧенНуЮ В арХИВ ChptlOTipl3.zip ) как для обновления содержимого строки данных в таблице UsageLog, так и для вставки новой строки. При работе с СУБД MySQL для передачи на выполнение SQL-операторов (например, SELECT, INSERT, UPDATE, CREATE, DROP И Т. Д.) исполь —

Самоучитель по креативному веб-дизайну. Книга 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-страницы время и

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



Полезные ссылки
Случайные записи
  • 14.03.2011">Руководство по actionscript. часть 3, стр. 071
  • 12.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.109
  • 06.09.2012">Twitter запустила инструментарий для встраивания в сайты хроники твитов
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.114
  • 04.06.2011">О дизайне веб-сайта
  • 09.03.2011">Руководство по actionscript. часть 4, стр. 062
  • 12.03.2011">Руководство по actionscript. часть 3, стр. 132
  • 07.08.2011">iPhone 5 — ждать осталось недолго
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 107
  • 16.06.2010">Самоучитель по креативному веб-дизайну. Книга 4, стр.23
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 098
  • 25.03.2010">Великолепная инфографика на 5+
  • 29.06.2012">Apple готовит крупное обновление для iTunes
  • 18.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.104
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.164
Опрос

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

View Results

Loading ... Loading ...