Понимание функционирования php
Данный раздел написан для того, чтобы после его освоения можно было осознано пользоваться справочником (PHPManual), который автоматически устанавливается на компьютере пользователя в процессе инсталляции программного обеспечения.
PHP является межплатформенным языком для создания серверных сценариев. Официальный сайт PHP находится по адресу: http://www.php.net/. Кроме официального сайта имеется множество других сайтов по данной тематике, представляющих интерес для программиста. В данном курсе интерес к языку Php состоит в организации серверной стороны для изучения клиент – серверного взаимодействия, реализуемого по методологии AJAX. Поэтому нам будет достаточно иметь общее представление о функционировании Php – скриптов и синтаксических особенностях языка. Для работы нам понадобится установленный на персональном компьютере HTTP- сервер Apache с поддержкой PHP. Для указанных целей обучения порядок установки сервера Apache с PHP на своём компьютере описан в «Приложении 1». Имеется достаточно широко распространённое мнение, о том, что язык прост для изучения, тем более, после освоения JavaSript, CSS и событийной модели браузеров. PHP - скрипты, как и JS-скрипты, можно создавать в простейшем текстовом редакторе, сохраняя полученный документ с расширением *.php. При подготовке материала в основном использовался материал, изложенный в руководстве по PHP (PHP Manual), предоставляемом пользователю после инсталляции (php-5.3.8-Win32-VC9-x86.msi). Итак, для дальнейшего изучения материала нам потребуется запущенный сервер Apache с установленным на нём PHP. Предполагается, что тестовые документы публикуются на специально созданном виртуальном хосте http://www.test.ru/. Создание и порядок использования виртуального хоста описаны в «Приложении 1».
Допустим, в текстовом редакторе набран приведённый ниже текст:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Example</title></head>
<body>
<h2> Тестируем PHP </h2><hr>
<?php
print ("<h3>PHP работает, если виден этот текст </h3>");
?
>
<hr><h3> Должно быть видно три текстовых строки и информация phpinfo</h3>
<br> <?php phpinfo();
</body> </html>
Если сохранить его в документе с расширением .php (например, phptst1.php), загрузить его на созданный виртуальный хост, запустить браузер и через него обратиться к данному документу: http://www.test.ru/phptst1.php, то в браузере откроется документ, внешний вид которого представлен на рисунке 1.
С
Рис.
6. Внешний вид страницы с php
- скриптами
Дополнительно отметим, что в языке можно использовать любую из разновидностей тегов, ограничивающих php-код:
<?php …..?> - инстукции в стиле XML;
<? …….?> - инструкции в стиле SGML
<script language = "php"> ….</script> - инструкции в стиле HTML
<% %> - инструкции в стиле ASP
В руководстве сообщается, что интерпретатору требуется указать, разрешено ли использование сокращённой формы тегов (short form: <? … ?> ). Если предполагается использовать PHP в комбинации с XML, можно запретить эту опцию для использования тегов <?xml… ?>. Итак, если опция использования сокращённой формы тегов запрещена, то необходимо применять длинную форму открывающего тега (<?php … ?>). Там же отмечается, что для использования стенографической формы (<?=),вместо идентичной ей (<? echo) необходимо в php.ini файле опцию «short_open_tag» установить в значение «on» . Начиная с версии PHP 5.4.0, конструкция «<?=» будет всегда доступна. Всё, что расположено между обсуждаемыми называется блоком.
Далее будет рассмотрен пример организации обмена данными между клиентом и сервером до появления методологии AJAX. Допустим, у нас имеется форма для установления связи с клиентами (рисунок 2). Код, реализующий данную форму, представлен ниже:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html> <head>
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<title> Простейший обмен </title>
</head>
<body>
<h2> Форма1 с данными</h2> <hr>
<form action="FormTst1.php" method="post" >
Введите Вашу Фамилию:
<input type="text" size="30" NAME="Fam" > <br>
Введите номер телефона:
Рис.
7. Вид диалоговой формы
<input type="submit" value="Передать даные" name="submit" >
</form></body></html>
В этом примере следует обсудить использование атрибутов тега <form>. Атрибуту «action» присваивается имя скрипта, который будет обрабатывать послание клиента. Этот скрипт будет обсуждаться ниже. Более подробно представляет интерес обсудить использование значений атрибута «method». Как известно, имеется два варианта значений этого атрибута: <get> и <post>. Разница заключается в том, что при использовании метода <get> данные из формы передаются серверу как дополнение к URL, например, при отправлении данных из формы, представленной на рисунке 2, с использованием метода <get> сформированный URL будет выглядеть следующим образом:
http://www.test.ru/FormTst1.php?Fam=%C8%E2%E0%ED%EE%E2+%C8%E2%E0%ED+%C8%E2%E0%ED%EE%E2%E8%F7&phone=375375375&submit=%CF%E5%F0%E5%E4%E0%F2%FC+%E4%E0%ED%ED%FB%E5
Е
сли
сравнить передаваемые данные с их
кодировкой, то легко понять способ их
дешифровки. В результате, в дальнейшем
не рекомендуется метод <get> в связи
с тем, что он не обеспечивает безопасности
обмена данными (например, можно прочитать
пароль) и имеет ограничения на объём
передаваемой информации. Итак, в
дальнейшем мы будем использовать метод
<post>, который скрытно передаёт данные
в значительно большем объёме.
Д
Рис.
8. Вид ответа клиенту
<html><title> обмен с формой </title>
<body>
<h1> обмен данными с формой </h1>
<b>Уважаемый <?php echo htmlspecialchars($_POST['Fam']);?>.
</b><br> Мы пытались дозвониться Вам по телефону
<?php echo htmlspecialchars($_POST['phone']); ?>,<BR>
однако соединиться не удалось. Завтра, примерно в это <BR>
же время мы позвоним ещё раз.
</body></html>
Начнём разбор скрипта в порядке появления новых языковых конструкций.
echo() в действительности это не функция, а языковая конструкция, выводит одну или несколько строк (Outputs all parameters):
void echo ( string $arg1 [, string $... ] )
Напоминаем, что echo() имеет и сокращённый синтаксис вызова (<?=), который обсуждался ранее.
htmlspecialchars () – конвертирует спецсимволы в набор символов, совместимых с HTML.
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )
Например, в процессе конвертирования символы:
'&' (ampersand) заменяются на '&'
'"' (double quote) заменяются на '"' when ENT_NOQUOTES is not set.
"'" (single quote) заменяются на ''' only when ENT_QUOTES is set.
'<' (less than) заменяются на '<'
'>' (greater than) заменяются на '>'
Как видно из описания, функция может осуществлять и другие преобразования. При возникновении определённого интереса, можно уточнить детали по первоисточнику.
$_POST['Fam'] – ассоциативный массив переменных, попадающий в текущий скрипт при помощи метода HTTP POST. Является суперглобальной ('superglobal'), или автоматически глобальной (automatic global) переменной. Это подразумевает доступность переменной в любом месте скрипта. То есть, отсутствует необходимость создавать global $variable1; для доступа к соответствующим данным из функций и методов. Уже должно быть вполне понятно, что индексом массива служит имя элемента ввода данных, объявленное в HTML – странице клиента.
Исходя из изложенного, можно заключить, что поставленную задачу можно решить и другими способами, например, как это показано на рисунке 5:
Очевидно,
что представленный скрипт так же требует
определённых комментариев. Прежде
всего, отметим, что дойные кавычки не
равнозначны одинарным. Если в операторе
«print» использовать одинарные кавычки,
то вместо ожидаемого результата будет
напечатано: «Уважаемый $qst !». То есть,
вместо значения переменной будет
выведено её имя. Поэтому следует
придерживаться иерархии кавычек.
Во-вторых, в приведённом скрипте фамилия клиента запоминается в локальной переменной $qst. Сразу определим ряд правил, которыми следует руководствоваться при создании собственных переменных.
Имя переменной всегда начинается со знака доллара ($), после которого должна быть буква или знак подчёркивания. Далее могут присутствовать любые буквенно-цифровые сочетания. Как и в JavaScript, тип переменной определяется автоматически и может быть в дальнейшем неоднократно изменён. В связи с этим, в языке предусмотрен ряд функций, при помощи которых можно проверить текущий тип переменной: gettype(), is_array(), is_float(), is_int(), is_object(),is_string(). При возникновении в явном преобразовании типов, можно использовать специальные функции, например:
(int), (integer) - cast to integer
(bool), (boolean) - cast to boolean
(float), (double), (real) - cast to float…
(string) - cast to string
(array) - cast to array
(object) - cast to object
(unset) - cast to NULL (PHP 5)
В «PHP Manual» приведён следующий пример преобразования типов:
<?php $foo = 10; // $foo is an integer $bar = (boolean) $foo; // $bar is a boolean ?>
В приведённых примерах не были использованы комментарии, которые делают код более читабельным и понятным. В PHP имеется несколько вариантов комментариев. В частности, можно использовать комментарии аналогичные используемым в JavaScript:
От «//» - до конца строки.
От «/*» и до «*/» - может охватывать несколько строк.
