550 likes | 926 Views
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ. ЯЗЫК PHP. Вставка в HTML <?php echo("Hello, world!"); ?> <script language="php"> echo("Hello, world!"); </script> <? echo("Hello,world!"); ?> <?= Hello, world! ?>
E N D
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Вставка в HTML <?php echo("Hello, world!"); ?> <script language="php"> echo("Hello, world!"); </script> <? echo("Hello,world!"); ?> <?= Hello, world! ?> Закрывающий тег блока PHP-кода включает сразу следующий за ним перевод строки, если он имеется. Кроме того, закрывающий тег автоматически подразумевает точку с запятой; вам не нужно заканчивать последнюю строку кода в блоке точкой с запятой. Закрывающий тег PHP-блока в конце файла не является обязательным. А. В. Соловьев, 2007 Rev. 1.01. 18.01.2008
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP • Разделение инструкций • точка с запятой • закрывающий тег • Комментарии • многострочные как в Си • /* Комментарий */ • однострочные как в Си • // Комментарий • однострочные как в Perl, bash и т.п. • # Комментарий • Однострочные комментарии идут только до конца строки или текущего блока PHP-кода: • <?php //echo "try1" ?> try2 • На экран выводится: • try2 А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Типы boolили boolean: TRUE или FALSE int или integer: 123, 0123, 0x1A floatили double: 1.23, 7e-10 string: 'Строка в одинарных кавычках может состоять из нескольких строк. Если она содержит кавычку \' или обратный слеш \\, эти символы предваряются обратным слешем.' "Переменная A=$A\nПеременная B=$B" Переменная A=5 Переменная B=56 Явное преобразование к типу как в Си: (type) $A = (int) ((0.1+0.7)*10); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Переменные Переменные в PHP представлены знаком доллара с последующим именем переменной. Имя переменной чувствительно к регистру. PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var, $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом: $var = "строка"; $var = 5; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Массивы Упорядоченное отображение, которое устанавливает соответствие между значением и ключом: массив, список (вектор), хэш-таблица, словарь, коллекцию, стек, очередь и т.п. В качестве значения может быть другой массив PHP. $arr1 = array(43, true, 67, -1, 6.7, "value"); $arr2 = array("apple"=>"green", "ananas"=>"yellow", 5=>"Mon", 6=>0); $arr3 = array(); $arr3[0] = 1; $arr3[1] = array(45, "orange"=>3.0); $arr3[] = $arr1; $arr3[] = array(45, $arr2); print_r($arr3); echo $arr2["apple"]; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Некоторые предопределённые переменные $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_REQUEST $_SESSION А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Область видимости переменной В большинстве случаев все переменные PHP имеют единую область видимости. Эта единая область видимости охватывает также включаемые (include) и требуемые (require) файлы. <?php $a = 1; include "b.inc"; ?> Однако, любая, используемая внутри функции переменная, по умолчанию ограничена локальной областью видимости функции. <?php $a = 1; function test() { // global $a; echo $a; // или echo $GLOBALS["a"]; } test(); ?> А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP • Константы • Различия между константами и переменными: • У констант нет приставки в виде знака доллара ($); • Константы можно определить только с помощью функции define(), а не присваиванием значения; • Константы могут быть определены и доступны в любом месте без учета области видимости; • Константы не могут быть переопределены или аннулированы после первоначального объявления; • Константы могут иметь только скалярные значения. • Если вы используете неопределенную константу, PHP предполагает, что вы имеете ввиду само имя константы, как если бы вы указали переменную типа строка (CONSTANT и "CONSTANT"). При этом будет сгенерирована ошибка типа E_NOTICE. • define("DAYS_PER_YEAR", 365); • echo DAYS_PER_YEAR; • echo Days_Per_Year; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Оператор условия if (выражение) оператор; if (выражение) оператор1; elseоператор2; if (выражение1) оператор1; elseif (выражение2) оператор2; … if ($a<0) echo "A=$a"; if ($_SERVER['REQUEST_METHOD']=='GET') { echo 'Параметр из формы: '.$_GET['param1']; $a=1; } elseif ($_SERVER['REQUEST_METHOD']=='POST') { echo 'Параметр из формы: '.$_POST['param1']; $a=2; } else echo 'Недопустимый метод'; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Оператор выбора switch (выражение) { caseконст1: операторы; caseконст2: операторы; … default: операторы; } switch ($a) { case "run": func1(); break; case "stop": func2(); break; case "pause": func3(); break; } if ($a=="run") { func1(); } elseif ($a=="stop") { func2(); } elseif ($a=="pause") { func3(); } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Оператор цикла с предусловием while (выражение)оператор; $i=10; while ($i--) { echo $i; } Оператор цикла с постусловием doоператор; while (выражение); $i=10; do { echo $i; } while ($i--); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Оператор цикла for for (выр1; выр2; выр3)оператор; $arr=array(); for ($i=0; $i<10; $i++) { $arr[$i]=$i; echo $i; } Оператор цикла foreach foreach (массив asзначение)оператор; foreach (массив asключ=>значение) оператор; foreach ($arr as $val) { echo $val; } выр1; while (выр2) { оператор; выр3; } foreach ($_SERVER as $key=>$val) { echo "[$key]=$val"; } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Операторы управления циклами break – прерывает выполнение текущего оператора for, foreach, while, do-while или switch, можно указать доп. численный аргумент, указывающий, сколько вложенных структур требуется завершить. continue – прерывает текущую итерацию цикла for, foreach,do-while, while иинициирует проверку условия и следующую итерацию, можно указать доп. численный аргумент, указывающий, в скольких вложенных структурах текущая итерация будет прервана. $a=0; for ($i=0; $i<10; $i++) { echo “i=$i a=$a\n”; if ($i%2) { $a++; continue; } if ($a>3) break; } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Операторы включения файла includeимя_файла; include_onceимя_файла; requireимя_файла; require_onceимя_файла; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции, определяемые пользователем functionимя_функции (парам1, парам2, …) { операторы; } В PHP 3 функции должны были быть определены прежде, чем они будут использованы. Начиная с PHP 4, такого ограничения нет. Имена функций регистронезависимы. PHP поддерживает передачу аргументов по значению (по умолчанию), передачу аргументов по ссылке, и значения по умолчанию. Значения возвращаются при помощи необязательного операторавозвратаreturn. Возвращаемые значения могут быть любого типа, в том числе это могут быть списки и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана. А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с HTML-формами <form method="get" action="a.php"> ФИО: <input type="text" name="fio"><br> Возраст: <select name="age"> <option value="1">меньше 20</option> <option value="2">20-40</option> <option value="3">больше 40</option> </select><br> <input type="checkbox" name="human"> Я не "бот"!<br> <input type="submit" name="submit" value="ok"> </form> А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с HTML-формами (скрипт a.php) <?php if (!$_REQUEST["human"]) { echo "Посторонним вход воспрещён!!!\n"; die; } echo "Уважаемый, $_REQUEST[fio]!\n"; if ($_REQUEST["age"]==1) { echo "Ты ещё слишком юн, чтобы узнать правду жизни...\n"; } elseif ($_REQUEST["age"]==2) { echo "А оно вам надо?\n"; } elseif ($_REQUEST["age"]==3) { echo "Делитесь опытом!\n"; } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с HTML-формами (скрипт a.php – другой вариант) <?php if (!$_REQUEST["human"]) { echo "Посторонним вход воспрещён!!!\n"; die; } echo "Уважаемый, $_REQUEST[fio]!\n"; $message = array( 1=>"Ты ещё слишком юн, чтобы узнать правду жизни...\n“, 2=>"А оно вам надо?\n“, 3=>"Делитесь опытом!\n" ); echo $message[$_REQUEST["age"]]; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с файловой системой chmod("myfile.txt", 0666); - изменение атрибутов (bool) copy("myfile1.txt", "myfile2.txt"); - копирование файла (bool) rename("myfile1.txt", "myfile2.txt"); - переименование файла (bool) unlink("myfile.txt"); - удаление файла (bool) mkdir("mydir"); - создание каталога (bool) rmdir("mydir"); - удаление каталога (bool) if (file_exists("myfile.txt")) { …} – проверка на существование (bool) $str = file_get_contents("myfile.txt"); - чтение содержимого файла в строковую переменную (string) file_put_contents("myfile.txt", $data); - перезапись файла указанной строкой PHP 5 (int) $arr = file("myfile.txt"); - содержимое текстового файла возвращается в виде массива, где каждый элемент – отдельная строка (array) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с файловой системой $fh = fopen("myfile.txt", "r+"); - открыть файл (resource) “r” – для чтения (должен существовать), “r+” – для чтения и записи (должен существовать), “w” – для перезаписи (при необх. создается), “a” – для дозаписи (при необх. создается) fclose($fh); - закрыть файл (bool) if (feof($fh)) { … } – проверка на конец файла (bool) $c = fgetc($fh); - считать 1 символ из файла (string) $str = fgets($fh); - считать 1 строку из файла (string) $data = fread($fh, 1024); - считать указанное количество байт (string) $arr = fscanf($fh, "%d%d") или fscanf($fh, "%d%d", $a, $b); - считать из файла данные по формату (array) fwrite($fh, $data) или fputs($fh, $data); - записать в файл строку (int) fprintf($fh, "Дата: %02d.%02d.%d", $d, $m, $y); - записывает в файл строку по формату (int) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Вывод в буфер вывода (результирующий HTML) echo "Строка", $var, "что-нибудь ещё…"; - вывод параметров в буфер вывода readfile("myfile.html"); - читает файл и записывает его содержимое в буфер вывода (int) printf("Дата: %02d.%02d.%d", $d, $m, $y); - записывает в буфер вывода строку по формату (int) print("Строка"); - вывод строки в буфер вывода (int) flush(); - немедленно передать содержимое буфера вывода (серверу и далее – клиенту) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа со строками $a = "qwerty"; echo $a{1}; // на экран выводится символ w $a{0} = "a"; // в строке qwerty q меняется на a, т.е. "awerty" Внутри двойных кавычек: \n – перевод строки (LF), \r – возврат каретки (CR), \t – табуляция,\\ - обратный слеш, \$ - доллар, \" – двойная кавычка, \000 - \377: символы с ASCII-кодами 0 – 3778, \x00 - \xFF: символы с ASCII-кодами 0 – FF16 Обработка переменных: echo "$drink's taste is great"; // juice's taste is great echo "Drink some {$drink}s"; // Drink some juices echo "An apple is $colors[apple]"; // An apple is green echo "An apple is {$colors['apple']}"; // An apple is green echo "Apple no.$i is {$colors['apple'][$i]}"; // Apple no.1 is red echo "An apple is $colors['apple']"; // syntax error echo "Apple no.$i is $colors[apple][$i]"; // Apple no.1 is Array[1] А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа со строками $c = chr(32); - получить символ с указанным кодом (string) $i = ord("A"); - получить код символа (int) $str = convert_cyr_string("бНОПНЯ", "w", "k"); - перевести строку на кириллице из одной кодировки в другую (“k” = koi8, “w” = windows,“m” = macintosh, “d” = dos/cp866) (string) $str = addslashes("Is your name O'Connel?"); - вставка в строку обратных слешей перед символами ' " и \ (string) $str = stripslashes("Is your name O\'Connel?"); - удаление из строки обратных слешей, вставленных addslashes или magic_quotes_gpc (string) $str = html_entity_decode("26 < 45"); - преобразование HTML-сущностей в обозначаемые ими символы (string) $str = htmlspecialchars("<<<Duglas&Co.>>>"); - преобразование спец. символов & " ' < > в обозначающие их HTML-сущности (string) $str = strip_tags("<b>Строка</b>"); - удаление из строки тегов HTML и PHP (string) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа со строками $arr = explode(".", "28.01.2008"); - разбить строку на подстроки по указанному разделителю (array) $str = implode("-", array(2008,1,28)); - склеить значения элементов массива в одну строку с указанным разделителем (string) $str = ltrim(" Строка"); - убрать пробельные символы слева (string) $str = rtrim("Строка "); - убрать пробельные символы справа (string) $str = trim(" Строка "); - убрать проб. симв. с любой стороны (string) $str = sprintf("%02d.%02d.%d", $d, $m, $y); - формирование строки из указанных аргументоы по формату (string) $a = strlen("qwerty"); - длина строки (int) if (strpos($str, "q")===FALSE) {…} – поиск подстроки в в строке (int) $s = strstr($str, "q"); - поиск подстроки в строке (string) $s = substr("qwerty", 2, 3); - получить подстроку (string) $str = str_replace("banana", "a", "@"); - замена подстрок (string) if (strcasecmp($str1, $str2)==0) {…} – сравнение строк без учёта регистра (int) if (strcmp($str1, $str2)==0) {…} – сравнение строк с учётом регистра А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с массивами $arr = array("a"=>"lemon", "b"=>"apple", "c"=>"orange"); $i = count($arr); - количество элементов в массиве $k = array_keys($arr); - получить массив ключей (array) $v = array_values($arr); - получить массив значений (array) list($a1, $a2, $a3) = $v; - задать значения переменным, как если бы они были элементами массива if (in_array("lemon", $arr)) {…} – проверить наличие значения в массиве $idx = array_search("lemon", $arr); - определить ключ, соответствующий указанному значению из массива (найти элемент) $s = array_sum(array(0,1,2,3,4,5)); - найти сумму значений элементов массива (int) $a = array_merge($k, $v, …); - слияние двух или неск. массивов (array) $a = array_unique($a); - формирование массива с уникальными значениями элементов (удаление дубликатов) (array) $a = asort($arr); - сортировка по значениям (array) $a = ksort($arr); - сортировка по ключам (array) $a = sort($arr); - простая сортировка по значениям (array) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Работа с датой/временем $stamp = time(); - текущее время (сек. от начала эпохи UNIX) (int) $str = date("d.m.Y"); - текущее время по формату (string): D – день недели (Mon-Sun), H – час (00-23), i – минуты (00-59), M – месяц (Jan-Dec), O – часовой пояс от GMT (+0400), r – дата в формате RFC822, s – секунды (00-59), W – номер недели (1-53), z – день года (1-366) $stamp = mktime($hr, $min, $sec, $mon, $day, $y); - вычислить время UNIX для указанного момента (int) if (checkdate($mon, $day, $y)) {…} – проверка корректности даты (bool) Функции работы с HTTP-заголовками header("Location: http://iq.karelia.ru/"); - добавить HTTP-заголовок if (headers_sent()) {…} – проверить, отправлены ли заголовки setcookie("TestCookie", 1, time()+3600); - установить cookie (bool) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Математические функции acos($x), asin($x), atan($x), pi(), cos($x), sin($x), tan($x), exp($x), log($x), log10($x), pow($x, $y), sqrt($x), abs($x), ceil($x), floor($x), round($x), max($v1, $v2, …), min($v1, $v2, …), rand($min, $max), srand(time()) $val2 = base_convert($val10, 10, 2); - перевод системы счисления (str) Библиотека iconv (перекодировка) $str = iconv("koi8-r", "utf-8", "Строка"); Библиотека recode (перекодировка) $str = recode_string("koi8-r..utf-8", "Строка"); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции, манипулирующие URL $url = parse_url("http://mp3:qwerty@mp3.int.ru/search.php?query=1"); // Разобрать URL на поля (array): Array( [scheme] => http [host] => mp3.int.ru [user] => mp3 [pass] => qwerty [path] => /search.php [query] => query=1 ) $str = urlencode("Extra 34% quality"); - URL-кодирование (string) $str = urldecode("Extra+34%25+quality");- URL-декодирование (string) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции, манипулирующие переменными if (empty($var)) {…} – возвращает TRUE, если переменная $var имеет значение 0, "0", "", NULL, FALSE, array() или не определена (bool) if (isset($var)) {…} – возвращает TRUE, если переменная определена $str = gettype($var); - текущий тип переменной (string) if (is_array($arr)) {…} – является ли $arr массивом (bool) $str = print_r($arr, TRUE); - содержимое $arr в читабельном виде (string) settype($a, "integer"); - установить тип переменной (bool) unset($a, $b, …); - аннулировать переменные $str = serialize($obj); - представить объект/массив/переменную в строковом виде (string) $obj = unserialize($str); - перевести строковое представление в объект/ массив/переменную А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с изображениями (GD) $info = gd_info(); - получить информацию о библиотеке GD (array) Array ( [GD Version] => bundled (2.0.28 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => 1 [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XBM Support] => 1 [JIS-mapped Japanese Font Support] => ) $types = imagetypes(); - какие форматы поддерживаются (int) if ($types & IMG_PNG) {…} константы: IMG_GIF, IMG_JPG, IMG_PNG, IMG_WBMP. А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с изображениями (GD) $info = gd_info(); - получить информацию о библиотеке GD (array) Array ( [GD Version] => bundled (2.0.28 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => 1 [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XBM Support] => 1 [JIS-mapped Japanese Font Support] => ) $types = imagetypes(); - какие форматы поддерживаются (int) if ($types & IMG_PNG) {…} константы: IMG_GIF, IMG_JPG, IMG_PNG, IMG_WBMP. А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с изображениями (GD) $img = imagecreate(200, 100); - создать картинку 200х100 с палитрой $img = imagecreatetruecolor(300, 200); - создать полноцветную (16М) картинку 300x200 (resource) $img = imagecreatefromjpeg("my.jpg"); - создать картинку на основе JPEG-файла (resource) $img = imagecreatefrompng("my.png"); - создать картинку на основе PNG-файла (resource) imagedestroy($img); - освободить память от картинки imagejpeg($img); - вывод картинки в формате JPEG … imagejpeg($img, "my.jpg", 65); - … с указанием файла и качества imagepng($img); - вывод картинки в формате PNG $info = getimagesize("my.jpg"); - получить информацию о картинке Array ( [0] => 593 // ширина (также imagesx($img)) [1] => 639// высота (также imagesy($img)) [2] => 3// тип картинки дляimage_type_to_mime_type() [3] => width="593" height="639"// строка для тега <IMG> [bits] => 8 // бит на цвет [mime] => image/png// MIME-тип ) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с изображениями (GD) $white = imagecolorallocate($img, 255, 255, 255); - получить идентификатор RGB-цвета (добавить элемент в палитру) (int) Первый вызов устанавливает фоновый цвет картинки. imagesetpixel($img, $x, $y, $clr); - установить пиксел imageline($img, $x1, $y1, $x2, $y2, $clr); - нарисовать линию imagefill($img, $x, $y, $clr); - заполнить область imagearc($img, $cx, $cy, $w, $h, $s, $e, $clr); – нарисовать дугу эллипса imagefilledarc($img, $cx, $cy, $w, $h, $s, $e, $clr, IMG_ARC_PIE); - нарисовать закрашенный сектор эллипса imageellipse($img, $cx, $cy, $w, $h, $clr); - нарисовать эллипс imagefilledellipse($img, $cx, $cy, $w, $h, $clr); - закрашенный эллипс imagerectangle($img, $x1, $y1, $x2, $y2, $clr); - прямоугольник imagefilledrectangle($img, $x1, $y1, $x2, $y2, $clr); - нарисовать закрашенный прямоугольник imagestring($img, $font, $x, $y, "qwerty", $clr); - нарисовать строку растровым шрифтом (встроенные: 1-5) imagettftext($img, $sz, $angle, $x, $y, $clr, "arial.ttf", "qwerty"); - нарисовать строку (UTF8) векторным шрифтом (TTF) А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с СУБД MySQL $link = mysql_connect("localhost", "user", "pass"); - установить соединение с MySQL-сервером (resource); mysql_close($link); - закрыть соединение с сервером (bool) mysql_select_db("test"); - открыть базу данных “test” (bool) $req = mysql_query("select * from users where uid=1000"); - выполнить SQL-запрос (resource) $n = mysql_num_rows($req); - кол-во строк в ответе на SELECT (int) $n = mysql_affected_rows($link); - кол-во строк изменённых запросами DELETE/INSERT/REPLACE/UPDATE (int) mysql_free_result($req); - освободить память от рез-тов запроса (bool) $arr = mysql_fetch_assoc($req); - получить очередную строку ответа $arr = mysql_fetch_row($req); - получить очередную строку ответа $str = mysql_escape_string("Alex's PC"); - экранировать кавычки в строке для SQL-запроса А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Функции работы с сессиями session_start(); - начать или возобновить сессию (bool) Уничтожение сессии: session_start(); $_SESSION = array(); session_destroy(); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP4 (свойства, методы, конструктор, this) class Basket { // свойства объекта: var $item; // конструктор объекта function Basket() { $this->item = array(); } // методы объекта function add_item($nr, $amount) { if (empty($this->item[$nr])) $this->item[$nr] = 0; $this->item[$nr] += $amount; } function get_max() { return 256; } } $b = new Basket; $b->add_item("12", 5); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP4 (наследование, parent, ::) class Owned_Basket extends Basket { var $owner = -1; var $limit = -1; function set_owner($id) { $this->owner = $id; } function get_max() { if ($this->limit < 0) return parent::get_max(); return $this->limit; } function info() { echo "This is a basket object"; } } Owned_Basket::info(); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP4 (сериализация) При сериализации сохраняются только свойства объекта и название класса. Методы объекта не сериализуются. Чтобы метод unserialize() по отношению к объекту прошёл успешно, класс с заданным именем должен быт объявлен. При вызове serialize() по отношению к объекту, если в классе имеется метод __sleep(), он вызывается. Она может подготавливать объект к сериализации и возвращать массив имён свойств класса, которые следует сериализовать. Пример использования __sleep() – закрыть соединение с базой данных, сбросить несохранённые данные или ограничить список свойств для сохранения, если объект занимает большой объём. При вызове unserialize() по отношению к объекту, если в классе имеется метод __wakeup(), он вызывается. Основное назначение этой функции – восстановить соединение с базой данных или выполнить подобные инициализационные задачи. А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (видимость свойств и методов, кон-/де-структор) private – свойство/метод доступно только из данного класса protected – свойство/метод доступно также в родительских и дочерних public – свойство/метод доступно отовсюду (по умолчанию или var) class Basket { protected $item; function __constructor() { $this->item = array(); } function __desctructor() { foreach ($this->item as $key=>$val) { unset($this->item[$key]); } } public function add_item($nr, $amount) { settype($this->item[$nr], "integer"); $this->item[$nr] += $amount; } } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (self, parent, static, ::) static – чтобы обратиться к такому свойству или методу не требуется экземпляр класса self – для обращения с данному классу из него самого (в отличие от $this указывает не на конкретный экземпляр, а на весь класс – для статич. методов или свойств) parent – для обращения к родительскому классу class Ext_Basket extends Basket { protected static $counter = 0; function __constructor() { parent::__construct(); self::$counter++; } } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (abstract, final, константы) abstract class Basket { const MAXVAL=256; abstract function add_item(); final function get_max() { return self::MAXVAL; } } class Ext_Basket extends Basket { function add_item() { /*…*/ } } echo Basket::MAXVAL; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (перегрузка) Перегрузка свойств: void __set(string $имя, mixed $значение); mixed __get(string $имя); Перегрузка методов: mixed __call(string $имя, array $аргументы); class Setter { private $content; function __set($nm, $val) { $this->content[$nm] = $val; } function __get($nm) { return $this->content[$nm]; } } $a = new Setter; $a->proba = 1; echo $a->proba; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (перегрузка) Перегрузка свойств: void __set(string $имя, mixed $значение); mixed __get(string $имя); Перегрузка методов: mixed __call(string $имя, array $аргументы); class Setter { private $content; function __set($nm, $val) { $this->content[$nm] = $val; } function __get($nm) { return $this->content[$nm]; } } $a = new Setter; $a->proba = 1; echo $a->proba; А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (интерфейсы) Интерфейсы объектов позволяют указывать, какие методы и свойства должен включать класс, без необходимости описывания их функционала. Если класс включает какой-либо интерфейс и не описывает функционал всех методов этого интерфейса, выполнение кода с использованием такого класса завершится фатальной ошибкой, сообщающей, какие именно методы не были описаны. interface Stack { public function push($a); public function pop($a); } class LIFO implements Stack { private $data = array(); function __constructor() { /* … */ } public function push($a) { array_push($this->data, $a); } public function pop($a) { return array_pop($this->data); } public function dump() { print_r($this->data); } } А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (указание типов параметров) Перед именем параметра метода объекта можно указать тип (название класса, интерфейсаили типа “array”). Если функция вызывается с параметром другого типа генерируется ошибка. class SomeClass { function example(array $data, Stack $info) { /* … */ } } Для параметров скалярного типа (int, bool, float, string) указание типа не используется. А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (операции над объектами) Проверка принадлежности к классу: instanceof (в PHP4 is_a()) class A { /* … */ } $thing = new A; if ($thing instanceof A) { /* … */ } Сравнение объектов: == : свойства объектов просто сравниваются друг с другом, а именно: два объекта равны, если они содержат одинаковые свойства и одинаковые их значения и являются экземплярами одного класса. === : свойства объекта считаются идентичными тогда и только тогда, когда они ссылаются на один и тот же экземпляр класса. Клонирование: Создание копии объекта с абсолютно идентичными свойствами: class A { /* … */ } $a = new A; $b1 = $a; // просто ещё одна ссылка на объект $a $b2 = clone $a; // копия объекта $a А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 («магические методы») __construct() // конструктор __destruct()// деструктор __call()// перегрузка методов __get()// перегрузка свойств __set()// перегрузка свойств __isset()// перегрузка свойств __unset()// перегрузка свойств __sleep()// сериализация __wakeup()// десериализация __toString()// преобразование в строку __set_state()// для var_export() __clone() // клонирование А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP Объекты в PHP5 (автозагрузка) function __autoload($class_name) { require_once $class_name . '.php';}$obj1 = new MyClass1();$obj2 = new MyClass2(); А. В. Соловьев, 2007
ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЯЗЫК PHP • Вопросы безопасности: Безопасность файловой системы • Поскольку в PHP изначально предполагался полноправный пользовательский доступ к файловой системе, можно написать скрипт, который позволит читать системные файлы, такие как /etc/passwd, управлять сетевыми соединениями, отправлять задания принтеру, и так далее. Как следствие вы всегда должны быть уверены в том, что файлы, которые вы читаете или модифицируете, соответствуют вашим намерениям. • $username = $_POST['user_submitted_name']; • $homedir = "/home/$username"; • $file_to_delete = "$userfile"; • unlink ("$homedir/$userfile"); • echo "$file_to_delete has been deleted!"; • Ограничить доступ пользователя, с правами к-го работает веб-сервер. • Проверять все данные, вводимые пользователем. • Опция php.ini open_basedir А. В. Соловьев, 2007