Тема 5. Средства реализации серверной логики. Тема 6.PHP МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Содержание темы • Принципы работы web-сервера, интерфейс CGI, передача информации CGI-сценарию • Реализация серверной логики с помощью скриптов • Установка и настройка PHP в Apache • Встраивание PHP в HTML • Добавление динамического содержимого, базовый синтаксис • Повторное использование кода • Типы данных. Константы МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Содержание темы • Использование массивов • Стандартные функции PHP • Управляющие конструкции • HTML-формы, обработка форм. Хранение и получение данных • Функции работы с файлами • Функции и области видимости • Реализация сеансов • Работа с СУБД • Графика МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Принцип работы web-сервера с динамическим содержанием страниц CGI (Common Gateway Interface) - набор правил и соглашений для взаимодействия сервера и приложений; реализовано на различных платформах. Принцип работы веб-сервера: механизм сервера, реализующий CGI, перенаправляет вывод приложений веб-серверу, тот – браузеру пользователя. Приложение Веб-сервер Браузер CGI Стандартный вывод МИФИ, Кафедра «Кибернетика» Интернет-протокол http://cyber.mephi.ru Основы CGI 1. 2. 3. 4. Этапы работы CGI-программы (сценария): получения данных, переданных пользователем; обработка; вывод результата; завершение. #include <stdio.h> #include "cgi-lib.h" int main() { llist input; 1. read_cgi_input(&input); 2. do_anything(); 3. printf("Content-Type: text/html\r\n\r\n <html><head>\n"); printf("<title>My Test Page</title>\n</head>\n<body>\n"); printf("Hello, %s. You are\n",cgi_val(input,"name")); printf("</body> </html>\n"); 4. } МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Основы CGI CGI-сценарий может быть написан и в командном файле Windows: cgi.bat @echo off 1. set my_var=%1 2. set my_var=%my_var% .endparam 3. echo Content type: text/html echo . echo . echo Hello! Request param: %my_var% МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Основы CGI CGI-сценарий (программа) получает доступ ко всем переменным окружения ОС, в том числе • специфическим переменным конкретного вебсервера • переменным с полями HTTP-запроса • переменным соединения (например, защищенного соединения SSL) МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Переменные окружения HTTP-полей запроса • HTTP_HOST – имя виртуального хоста • HTTP_USER_AGENT – программное обеспечение клиента (версия браузера) • HTTP_ACCEPT – список типов содержимого, поддерживаемого клиентом • HTTP_ACCEPT_LANGUAGE – языки в порядке предпочтения • HTTP_CONNECTION – keep-alive/close • HTTP_REFERER – адрес с которого перешли на страницу • ... «Похожи» на параметры (заголовки) HTTPзапроса : User-Agent, Accept, Cookie, … МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Переменные Apache • • • • • • AUTH_TYPE CONTENT_LENGTH REMOTE_ADR REMOTE_USER QUERY_STRING ... МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru CGI vs PHP. История развития PHP PHP и другие специальные средства разработки веб-страниц вытесняют cgi-программы (скрипты). Php и MySql– постоянно развивающиеся средства МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Встраивание PHP в HTML • Стандартные теги <?php ... code ?> • Сокращенные теги <? ... code ?> <?= $variable ?> МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Базовый синтаксис PHP • Нечувствительность к пробелам (но нельзя вставлять пробелы внутрь “<?php”, имен и ключевых слов • Выделение блоков кода { . . . } , можно вложенное • PHP – язык, похожий на C МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Добавление динамического содержимого <html><head><title>WELCOME</title></head> <body>Welcome to server <?php echo $_SERVER['SERVER_SOFTWARE']; ?><br> <a href="/secretlink.php">Enjoy this link</a> </body> </html> МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Комментарии в PHP • // Single line comment • # Single line comment • /* Multi-line comment */ • Пример документирования функции в комментариях /** * Documentation Example * * @param string $bar */ function foo($bar) { } • Комментарии // и # заканчиваются символом новой строки или ?>. МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Повторное использование кода в PHP • Серверные включения • Особенности использования include и require. – Динамическое включение во время выполнения •include "data_connect.inc.php"; – Включение до выполнения •require "data_connect.inc.php"; • Инструкции include_once и require_once. Включение только один раз МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Типы данных • Простые (scalar) boolean int (10;-13)(0666;0100)(0xFF;-0x100) float (0.12;-1234.43;2E7;1.2e2) Разрядность чисел зависит от платформы реализации string • Сложные (composite) Arrays Objects • Специальные NULL resource МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Переменные в PHP • Безтиповые • Начинаются с $ • Наименование содержит цифры, латинские буквы и подчеркивание регистрозависимое начинается с буквы или подчеркивания • Переменная может содержать имя другой переменной $name = ’myvar’; $$name = ’демо’; echo $myvar; // напечатется ’демо’ • isset ($namevar)- проверка существования и not NULL МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Константы • Могут содержать только простые типы • Define(varname, value) • Примеры define(’EMAIL’, ’[email protected]’); echo EMAIL; //печать ’[email protected]’ define(’USE_XML’, true); if (USE_XML) {... } // • Символьные константы: ' ' и " " • Управляющие комбинации: \r, \n, \", \\ и др. МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Массивы • Могут содержать практически любые значения, включая другие массивы • Могут иметь ключи числовые автосчетчик символьные смешанные • Способы задания array() [] • Функции работы с массивами array_merge() count() ... МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Массивы • Ключ по умолчанию 0, 1, 2, … $a = array (10, 20, 30); • Символьный ключ $a = array (’a’ => 10, ’b’ => 20, ’ce’ => 30); • Неупорядоченный массив $a = array (5 => 1, 3 => 2, 1 => 3,); • Пустой массив $a = array(); • [] $ar[] = 22; // автоматически присвоен ключ 0 $ar[’bb’] = 25; МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Способ просмотра массива и других переменных <pre><?php $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); print_r ($a); ?></pre> Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Глобальные массивы _GET и _POST • Использование GET – вызов http://example.org/index.php?list=user&order=1 – обработка в PHP echo $_GET[’list’]; • Использование POST – вызов (html или PHP) <form action="index.php" method="POST"> <input type="text" name="user" /> <input type="password" name="pass’ />…</form> – обработка в PHP echo $_POST[’user’]; МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Cookie setcookie("User","Petr",time()+86400); name Имя value Хранится на компьютере клиента. Не храните важную информацию здесь! expire Время актуальности в Unix-формате Если пропущено – доя конца сессии (до закрытия окна браузера) time()+60*60*24*30 (30 дней) Путь (+поддиректории) на сервере, где данное cookie доступно '/‘ – весь домен, По умолчанию – текущая директория path Домены сервера, где данное cookie domain доступно Secure Httponly Если TRUE, то устанавливается только при HTTPS Обратиться $_COOKIE[‘user'] .example.com – все поддомены The default is FALSE. Если TRUE, то cookie не доступно by скриптам, как JavaScript. МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Функции в PHP • Возврат значения function hello() { return "Hello World"; } • Возврат ссылки на переменную/ресурс function &query($sql) { $result = mysql_query($sql); return $result; } МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Функции в PHP • Аргументы по значению function hello($who) {. . .} • Значения по умолчанию function hello($what, $who = "World"){} • Аргументы по ссылкам function hello(&$who) {. . .} • С произвольным числом аргументов function hello() {} – func_num_args() – func_get_arg() – array_shift() МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Функции в PHP • Способы обращение к переменным, определенным вне функции – global $a, $b; – $GLOBALS[’a’] • Более 120 «стандартных» расширений php МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Управляющие конструкции • C-подобные конструкции – if (expression1) { } elseif (expression2) { } else { } – switch (){ case : ; break; default:} – while () { } – do {} whjile () – for ($i = 0; $i < 10; $i++) { } • Функция обработки ошибок – set_error_handler(’myErrorHandler’) myErrorHandler ($errNo, $errStr, $errFile, $errLine, $errContext) МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Обращение к СУБД Соединение с СУБД (подключение) Выбор (открытие) базы данных Запрос к БД Обработка результатов … … … 5. Закрытие • Возможна одновременная работа с несколькими БД • Встроенные (специальные) функции работы с СУБД и использование ресурсов ОС 1. 2. 3. 4. 3. 4. МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Обращение к СУБД $hostname = "localhost";//databasehostname $usernamedb = "root";// database username $passworddb = ""; // database password $dbName = "PKtest"; // database name 1.$dblink = mysql_connect($hostname, $usernamedb, $passworddb) or die ("Could not connect"); 2.mysql_select_db ($dbName) or die ("Could not select database"); МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Обращение к СУБД $SQLstring="SELECT f1,f2,name From MyTable order by name ASC"; 3.$result=MYSQL_QUERY(SQLstring); echo "<table border=2>"; 4.while ($row= mysql_fetch_array($result, MYSQL_ASSOC)) { echo '<tr><td>Name: '. $row["name"]. '</td> <td>' . $row["f1"].'</td> <td>' . $row["f2"] .'</td><tr>'; } echo "</table>";?> МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Обращение к СУБД (MS Access) ОБЪЕКТЫ <?php $db = 'C:\\Program Files\\Microsoft Office\\Office\\Samples\\borei.mdb'; $conn = new COM('ADODB.Connection') 1.- 2.$conn->Open("DRIVER={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Создание Access; DBQ=$db"); объекта $sql = "SELECT * FROM \"Доставка\" 3.$rs = $conn->Execute($sql); echo "<table border=1>"; МИФИ, Кафедра «Кибернетика» "; Создание Вызов метода объекта http://cyber.mephi.ru Обращение к СУБД (MS Access) echo "<table border=1>"; 4.while (!$rs->EOF){ echo "<tr>"; for ($i=0; $i<=2; $i++){ echo "<td>".$rs->Fields[$i]->value.</td>"; } Обращение к $rs->movenext(); свойству echo "</tr>"; } 5.$rs->Close(); $conn->Close(); Уничтожение $rs = null; $conn = null; объекта ?> </table> МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Обращение к СУБД (MS Access) МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Классы (определение) class foo { private $bas; public var1 = "Test"; // String public var3 = array (1, 2, 3); function __construct() { . . . } . . . } МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Графическая библиотека GD • Установка – входит в поставку php – для активации – подключить в php.ini строку: extension=php_gd2.dll 1. Создать «пустое» изображение с помощью $img=ImageCreateTrueColor($x,$y)) 2. Установить формат header("Content-type: image/png"); 3. Определить палитру $white = imagecolorallocate($img, 255, 255, 255); МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Графическая библиотека GD 4. Рисовать с помощью графических примитивов ImageSetPixel( ) ImageLine( ) ImageFilledRectangle( ) ... 5. Вывести изображение imagepng($img); 6. Очистить объект imagedestroy($img); МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Графическая библиотека GD header("Content-type: image/png"); $img = ImageCreateTrueColor(350,200); $white = ImageColorAllocate($img,255,255,255); $grey = …; $black = … ; ImageFilledRectangle($img,0,0,350,199,$white); draw_grid($img, 0,0,15,20,20,10); $text = 'Testing... Dept. 22'; $font = 'C:\\WIN2K\\Fonts\\arial.ttf'; ImageTtftext($img, 20, 20, 11, 121, $grey, $font, $text); ImageTtftext($img, 20, 20, 10, 120, $black, $font, $text); ImagePng($img);ImageDestroy($img); МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Использование дополнительных библиотек для деловой графики МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Работа с файлами (ресурсами) • file – доступ к обычным локальным файлам • http – доступ к удаленным ресурсам через HTTP • ftp – доступ к удаленным ресурсам через FTP • compress.zlib – доступ к сжатым данным через библиотеку zlib compression library. МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Работа с обычными файлами • Упрощенный вызов (за один вызов) – string file_get_contents ( string filename [, bool use_include_path [, resource context [, int offset [,int maxlen]]]]) – int file_put_contents ( string $filename, mixed $data [, int $flags [, resource $context]] ) Значения $flag: FILE_USE_INCLUDE_PATH/ FILE_APPEND/ LOCK_EX/FILE_TEX/FILE_BINARY • Традиционный вызов (C-подобный) – fopen( ) fread( )/fwrite( ) fclose( ) МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Работа с другими ресурсами • $file = fopen (’http://www.phparch.com’); • $file = file_get_contents("http://localhost/", false, $http_options); МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Два мира – два сервера LAMP PHP/Perl/Python IIS Linux Linux © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru WAMP PHP/Perl/Python Linux © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Бесплатная редакция Microsoft SQL © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru WASP PHP/Perl/Python Linux © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru WISP PHP/Perl/Python IIS Linux © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru FastCGI – поддержка php в IIS The IIS Team is eager to announce the official release of Microsoft FastCGI Extension for IIS 6.0 as a free download. For the first time, we are providing hosters and PHP developers full support for a stack of technology that enables reliable, scalable PHP hosting on production Internet Information Services 6.0 (IIS 6) Web servers. (Note: The FastCGI module is built in to Windows Server 2008.) © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Microsoft и PHP PHP на Windows просто больше возможностей! http://www.iis.net/php МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru WISPA! IIS Linux © Microsoft МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Ресурсы интернет www.php.net/manual http://www.phpclasses.org/ • . МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru PHP-редактор МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Демо: установка WAMP 1. Загрузить с http://wampserver.com/ и запустить из установку WampServer. Рекомендуется выбрать все установки по умолчанию. 2. Запустить сервер WampServer. После успешного запуска появится значок на панели задач . Если не запускается сервер Apache (значок желтый ), отключить сервер IIS (щелчок правой кнопкой по "Мой компьютер -> Управление -> Службы и приложения -> Службы -> Вебпубликации -> Остановить ) и запустить сервер apache еще раз. 3. Щелкните левой кнопкой мыши по значку сервера и выберете http://localhost/, в открывшейся странице поочередно запустите для ознакомления ссылки phpinfo(), phpmyadmin и sqlitemanager МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru Демо: Калькулятор ДЕМО МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru СПАСИБО ЗА ВНИМАНИЕ ! Вопросы МИФИ, Кафедра «Кибернетика» http://cyber.mephi.ru