PHP

PHP — скриптовый язык программирования, созданный для генерации HTML-страниц на веб-сервере и работы с базами данных. Ныне поддерживается подавляющим большинством хостинг-провайдеров. Входит в LAMP — «стандартный» набор для создания веб-сайтов.

В области программирования для Сети PHP — один из популярнейших скриптовых языков (наряду с JSP и языками, используемыми в ASP) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. PHP особенен наличием ядра и подключаемых модулей, «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и т. п. Любой желающий может разработать своё собственное расширение и подключить его. Существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Интерпретатор PHP подключается к веб-серверу либо через модуль, созданный специально для этого сервера (например, для Apache или IIS), либо в качестве CGI-приложения.

Кроме этого, он может использоваться для решения административных задач в операционных системах UNIX, Linux, Windows и Mac OS X. Однако в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript.

Синтаксис языка подобен тому языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl.

Ныне PHP используется сотнями тысяч разработчиков. Несколько миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета.

Группа разработчиков PHP состоит из множества людей, добровольно работающих над ядром и расширениями PHP, и смежными проектами, такими, как PEAR или документация языка.

 

Серверные и клиентские технологии

При программировании приложений для WEB, используются две основные технологии разработки – серверные и клиентские. К серверным технологиям относятся такие языки программирования  как Python, Ruby, Perl, PHP, интерфейс CGI, технология ASPот Microsoft; к клиентским – JavaScriptи Java. Рассмотрим различия между этими технологиями.

Модель взаимодействия клиент-сервера при реализации технологии JAVAпоказана на рис. 1.

Рис. 1 Клиентские технологии

При использовании клиентской технологии, сервер по запросу клиента передаёт ему исходные коды какого-либо скрипта (в случае JAVAэто – код JavaVirtualMachineJVM, называемый апплет).

Клиент, получив код, исполняет его с помощью встроенного набора средств (для JAVA– JRE). При это сервер не выполняет никаких преобразований над файлом и не может как-либо изменить сценарии, запрашиваемые клиентом.

Серверные технологии устроены немного иначе. На рис. 2 показана диаграмма взаимодействия клиент-сервера при использовании серверной технологии PHP.

Браузер клиента запрашивает у сервера страницу, содержащую PHP-скрипт. Сервер отправляет его препроцессору PHPи передаёт клиенту результат его работы. Клиент после получения страницы не видит команд PHP, а только результат их выполнения.

Рис. 2Серверные технологии

В настоящее время широко распространены несколько серверных технологий:

ASP(ActiveServerPage) – набор средств, разработанный фирмой Microsoftи его дальнейшее развитие – ASP.NET

В ASPкод пишется на диалекте VisualBasicVBS, а в случает ASP.NET– на любом языке, поддерживаемом .NETFramework(C#, C++, J#, VB.NET).

JSP(JavaServerPage) – набор средств, разработанных фирмой SUNMicrosystems.

Perl, Python– серверные языки программирования.

CGI(CommonGatewayInterface) Программы для CGIпишутся на любом языке программирования и выполняются сервером.

PHP(PHP: HypertextPreprocessor) – скриптовый язык программирования с открытым кодом.

 

История PHP

Создатель PHP- датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf).

Модуль PHP начал жизнь как простая небольшая cgi оболочка, написанная на Perl. Автор написал её, поскольку нуждался в быстром инструменте для отслеживания тех, кто читал мое интерактивное резюме. Даже не предполагалось, что оболочка будет использоваться кем-то кроме него. Узел сети, на котором лежало мое резюме, был чрезвычайно перегружен и имел постоянные проблемы с "форканьем" процессов. Автор переписал Perl-оболочку на C, чтобы избавиться от значительных непроизводительных затрат из-за необходимости запуска Perl при каждом обращении к езюме.

В конечном счете другие люди на том же самом web сервере натолкнулись на оболочку и спросили, могут ли они использовать ее. Затем они начали просить о большем количестве особенностей. Автор добавил большее количество особенностей и в заключение собрал наполовину дистрибутив наряду с документацией, списком адресатов и FAQ. Имя этого первого пакета было Персональные Инструментальные средства для домашней страницы (PHP), которые позже стали Персональным комплектом создания домашней страницы.

В то же время был создан инструмент для включения запросов SQL в web страницы. Это была отдельная CGI-оболочка, которая анализировала запросы SQL и облегчала создание форм и таблиц, основанных на этих запросах. Этот инструмент был именован Интерпретатор Форм (Form Interpreter <FI>).

PHP/FI версии 2.0 - полная перезапись из этих двух пакетов, объединенных в одиночную программу. Это теперь развилось по сути в простой язык программирования, внедренный внутрь HTML файлов. Первоначальный акроним, PHP, теперь расшифровывается рекурсивно и обозначает PHP:HypertextPreprocessor. PHP/FI сегодня используется больше для создания целых web серверов, чем для малых домашних страниц.

 

Преимущества использования PHP

Модуль PHPустраняет потребность в многочисленных малых cgi программах на Perl, позволяя Вам поместить простые скрипт-программы непосредственно в ваши HTML файлы. Это увеличивает общую производительность ваших web страниц, хотя бы потому что нет непроизводительных затрат на запуск Perl-а. Пакет также упрощает управление большими web серверами, помещая все компоненты web страницы в одиночном файле html. Всторенная поддержка различных баз данных делает тривиальной разработку web страниц с доступом к базам данных. Многие находят, что иметь дело с внедренным в html-документы языком намного проще, чем создавать отдельные HTML и CGI файлы.

 

Основы синтаксиса PHP

Встраивание РНР кода в HTML.

Скрипты на PHPвстраиваются в HTMLследующим образом:

<HTML_TAGS>

      <?php

            # PHP GOES CODE

      ?>

<HTML_TAGS>

 

Другой вариант:

<HTML_TAGS>

      <SCRIPT LANGUAGE = “PHP”>

            # PHP GOES CODE

      </SCRIPT>

<HTML_TAGS>

Если в настройках PHPвключен флаг short_open_tag, то можно использовать конструкцию

<?

      # php goes here

?>

Во многом PHPнапоминает распространённый язык программирования C. Основные отличия касаются лишь обозначения переменных и функций.

Переменные.

В отличие от большинства языков программирования, таких как C, C++, C#, Pascal, в РНР нет строгого контроля типов. Переменная объявляется в любом месте и становится глобальной для всего скрипта.

Пример работы с переменными в РНР

<?php

# myvarсейчас имеет тип Stringи содержит значение ‘HelloWorld’

$myvar= “HelloWorld” ;

# сейчас myvarимеет Тип int, потом – floatи массив Stringиз 5ти элементов

$myvar = 10;

$myvar = 20.56;

$myvar[4] = “Hello World”; myvar[1] = “I Said”;

#

# переменная sumбудет иметь значение 15,

# так как PHPинтерпретирует переменную в зависимости от контекста

#

$mystr = “10”;

$myint = 5;

$sum = $mystr + $myint;

?>

Все переменные в PHPдолжны начинаться со знака $. Регистр в имени переменной важен, функции – нет.

Объявления функций

Пример объявления и вызова функций PHP:

<?php

functionMyFunction( $var1, $var2 ) {

      return $var1 * $var2;

}

echoMyFunction( 5, 10 );

?>

 

Основы работы с PHP

Чаще всего серверные скрипты используются для обработки результатов заполнения форм. Например, гостевой книге посетитель вводит данные в форму, которая затем обрабатывается на сервере. Отвечая либо опрос пользователь, аналогично, устанавливает значение определенных полей формы. Тэги и атрибуты должна содержать форма:

<FORM NAME="имя_формы"

ACTION="путь_к_обработчику"

METHOD="метод_передачи_переменных">

поля ввода...

</FORM>

Обработчик - это скрипт на сервере, в который будут переданы значения полей ввода. Обработчиком так же может быть скрипт, содержащий форму. Каждое поле ввода имеет атрибут NAME, которое будет передано в обработчик вместе со своим значением. Существует два метода передачи данных: GET и POST. Их отличие состоит в том, что при использовании метода GET значения полей присоединяются к URL, указанному в атрибуте ACTION. Происходит следующим образом: http://site.domain/action.php3?имя=значение&...имя=значение. Пары "имя=значение" создаются для каждого элемента ввода, для которого указано имя атрибутом NAME. В случае использования метода POST значения полей передаются в заголовке запроса к серверу.

Предположим, что мы создали форму следующего вида:

<FORM ACTION="mult.php3" METHOD="GET">

<INPUT TYPE="text" NAME="first" SIZE="4" MAXLENGTH="4">

<INPUT TYPE="text" NAME="second" SIZE="4" MAXLENGTH="4">

<INPUT TYPE="Submit" VALUE="Умножить">

</FORM>

Скрипт, содержащийся в файле mult.php3 может выглядеть следующим образом:

<?php

Header("Content-type: text/html");

echo "$first умножитьна$second получится", $first*$second;

?>

Так же существует специальный тип поля HIDDEN. Это поле, которое не выводится на

экран, но, если ему присвоено имя атрибутом NAME, значение его передается в форму. Это бывает полезно,

например, когда один обработчик может производить не одно, а несколько действий. С помощью такого поля

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

 

Загрузка файлов на сервер (UPLOADING)

В некоторых случаях необходимо загрузить файлы с пользовательского компьютера на сервер. Клиентские технологии в этом случае бессильны, так как ни один Client-Sideязык не имеет прямого доступа к серверу. PHPподдерживает такую возможность, используя запрос POST.

Форма для загрузки файлов на сервер:

<form enctype="multipart/form-data" name="uploads" action="dimna-upload.php" method="post">

<table>

<tr>

  <td width="105" height="24" valign="top">To Folder:</td>

  <td colspan="2" valign="top"><input style="width:100%" type="text" name="dir"></td> 

<tr>

  <td height="24" valign="top">Files</td>

  <td colspan="2" valign="top"><input style="width:100%" type="file" name="file1"></td> 

</tr>

<tr>

  <td height="26">

  <td width="181">

  <td width="98" valign="top"><input style="width:100% " type="submit" name="Submit" value="Upload"> 

</tr>

</table>

</form>

Для создания формы, способной загружать файлы на сервер, необходимо указать, что данные передаются без кодирования. Это делается строкой enctype="multipart/form-data".

Для выбора файла в HTMLвстроен тип элемента ввода “file”. На экране будет показана строка ввода с кнопкой, нажатие на которую открывает стандартный диалог выбора файла.

Скрипт, осуществляющий загрузку файлов на сервер:

<?php

      if(!empty($dir)&&!empty($file1))

      {

            if(!is_dir("./".$dir))

            {

                  mkdir ( "./".$dir, 0755);

            }

            $new_name = "./".$dir."/".$file1_name;

            # файл копируется из временной папки в нужную нам

            copy( $file1,$new_name);

      }

?>

Файлы, загружаемые на сервер, сохраняются во временной папке. Имя файла можно получить используя глобальный двумерный массив HTTP_POST_VARS.

Первый индекс – имя поля ввода имени файла.

Второй индекс:

“name” – исходное имя файла на машине клиента

“tmp_name” – имя файла во временной папке

“size” – размер файла

“type” – тип файла.

Таким образом, узнать имя загружаемого файла можно обратившись к массиву как

$HTTP_POST_VARS[“file1”][“name”]; имя файла, сохранённого во временной папке - $HTTP_POST_VARS[“file1”][“tmp_name”];

Если включена опция register_globals, то доступ можно получить по переменным

$имя_поля_ввода

$имя_поля_ввода_name

$имя_поля_ввода_size

$имя_поля_ввода_type

Загрузка файлов на сервер через сценарии РНР так же может нести в себе потенциальную опасность. Если каждый сможет загрузить на ваш сервер свой скрипт, то безопасность данных будет под угрозой. Поэтому следует предпринимать меры для защиты вашего сервера.

Возможные методы защиты:

  • Запрет выполнения файлов для директории, в которую производится загрузка.
  • Разрешение загрузки только для проверенных пользователей.
  • Загрузка файлов строго определённого типа.
  • Проверка содержимого файлов.

 

Работа с cookiesи сессиями

Cookies– технология, предоставляемая протоколом НТТР, позволяющая серверу хранить информацию на пользовательских машинах. Чаще всего cookiesприменяются для сохранения информации об интерфейсе пользователя, паролях, и т.д. РНР предоставляет возможности работы с cookiesпосредством специальных функций.

Основная функция для управления cookie– setcookie(name, value, expires).

Параметры:

name– имя cookieна пользовательской машине

value – значение cookie

expires– абсолютное значение времени, после которого cookieбудет удалён с пользовательской машины.

В НТТР существует ограничение: cookieдолжны быть отправлены до того как будут переданы заголовки НТТР, поэтому функции cookieдолжны быть размещены перед тегами HTML. Это ограничение только НТТР, а не РНР.

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

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

Пример использования cookiesдля хранения информации:

setcookie ("TestCookie", "Test Value");

setcookie ("TestCookie", $value,time()+3600);  /* expire in 1 hour */

setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);

Пример удаления cookieиз предыдущего примера.

setcookie ("TestCookie");

// set the expiration date to one hour ago

setcookie ("TestCookie", "", time() - 3600);

setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);

Когда значение cookieотправляется, оно автоматически кодируется, а когда принимается – автоматически декодируется и для него создаётся переменная с именем cookie. Значения, отправленныевпредыдущихпримерахможновывестиследующимобразом:

echo $TestCookie;

echo $HTTP_COOKIE_VARS["TestCookie"];

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

Работа с сессиями должна начинаться с вызова функции session_start.

Регистрация переменной в сессии осуществляется с помощью функции session_register.

Отменить регистрацию переменной можно с помощью функции session_unregister.

Узнать была ли зарегистрирована переменная можно используя функцию session_is_registered.

Пример:

session_start();

session_register(“my_session_var”);

$my_session_var = 5;

if(session_is_registered(“my_session_var”)) echo $my_session_var;

session_unregister(“my_session_var”);

После регистрации переменной  в сессии, создаётся глобальная переменная, которой можно присвоить значение. Для каждого скрипта, вызвавшего функцию session_startбудет открываться текущая сессия и регистрироваться переменные, к которым можно получить доступ.

 

Работа с сервером баз данных MySQL

Описание MySQL

MySQL – небольшой, компактный многопоточный сервер баз данных. MySQL характеризуется большой скоростью, устойчивостью и легкостью в использовании. MySQL был разработан компанией TcX для внутренних нужд, которые заключались в быстрой обработке очень больших баз данных. Компания утверждает, что использует MySQL с 1996 года на сервере с более чем 40 БД, которые содержат 10,000 таблиц, из которых более чем 500 имеют более 7 миллионов строк. MySQL является идеальным решением для малых и средних приложений. Исходные тексты сервера компилируются на множестве платформ. Наиболее полно возможности сервера проявляются на Unix-серверах, где есть поддержка многопоточности, что дает значительный прирост производительности. В варианте под Windows, MySQL может запускаться как сервис Windows NT или как обычный процесс на Windows 95/98. MySQL-сервер является бесплатным для некоммерческого использования. Иначе необходимо приобретение лицензии.

Возможности MySQL

MySQL поддерживает язык запросов SQL в стандарте ANSI 92, и кроме этого имеет множество расширений к этому стандарту, которых нет ни в одной другой СУБД. Краткий перечень возможностей MySQL.

1. Поддерживается неограниченное количество пользователей, одновременно работающих с базой данных.

2. Количество строк в таблицах может достигать 50 млн.

3. Быстрое выполнение команд. Возможно MySQL самый быстрый сервер из существующих.

4. Простая и эффективная система безопасности.

5. Поддержка многопоточности.

 

Взаимодействие PHP и MySQL

На рис. 3 показана диаграмма взаимодействия РНР и MySQL.

Рис. 3 Взаимодействие РНР и MySQL

Функции для работы с сервером MySQL

mysql_connect( server, login, password );

Подключение к серверу mysql.

         Параметры:

Server– имя сервера, на котором расположен MySQL. Если сервер базы данных находится на той же машине, что и WEB-сервер, то указывается “localhost”

         Login, password– информация, необходимая для авторизации пользователя.

mysql_close( link_id);

Закрывает соединение с сервером MySQL.

mysql_select_db( db);

Выбирает базу данных на MySQL-сервере. Принимает строку с именем базы.

По умолчанию в MySQLимеется учётная запись rootбез пароля с неограниченными правами. Чтобы не позволить использовать базу данных рекомендуется создать другую учётную запись со строго ограниченными правами для работы с базой.

mysql_query( q)

Выполняет запрос q. Принимает строку, содержащую текст запроса на SQL. Возвращает описатель результата.

mysql_fetch_array( res);

Извлекает из результата запроса строку данных. Возвращает массив, в котором хранятся данные строки.

mysql_num_rows ( res );

Возвращает количество строк, полученных в результате операции SELECT. Принимает описатель ресурса.

Пример использования функций:

$link_id = mysql_connect( “localhost”, “user”, “password” );

mysql_select_db( “mydb” );

$select_id = 1;

$sqlQ = “SELECT * FROM mytable WHERE id=$select_id”;

$res = mysql_query($sqlQ);

if($myrow=mysql_fetch_array( $res ) )

{

      do

      {

            echo $myrow[“id”]; echo “\n”;

      }while($myrow=mysql_fetch_array( $res ) );

}

mysql_close( $link_id );

КромеMySQL вРНРтакжеподдерживаютсябазыданныхMSSQL SERVER, ORACLE, PostgreSQL, mSQL, InterBase, IngresII, атакжеисточникиODBC.

Вложения:
Скачать этот файл (PHP.ppt)Основы РНР[Презентация]56 kB