ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

55
1 ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ А. В. Соловьев, 2007-2018 ЯЗЫК ЯЗЫК PHP PHP Вставка в HTML <?php echo("Hello, world!"); ?> <script language="php"> echo("Hello, world!"); </script> <? echo("Hello,world!"); ?> <?= Hello, world! ?> Закрывающий тег блока PHP-кода включает сразу следующий за ним перевод строки, если он имеется. Кроме того, закрывающий тег автоматически подразумевает точку с запятой; вам не нужно заканчивать последнюю строку кода в блоке точкой с запятой. Закрывающий тег PHP-блока в конце файла не является обязательным. Rev. 1.03. 21.02.2018

Upload: xandy

Post on 07-Jan-2016

62 views

Category:

Documents


1 download

DESCRIPTION

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ. ЯЗЫК PHP. Вставка в HTML echo("Hello, world!"); - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

1

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вставка в HTML

<?php echo("Hello, world!"); ?>

<script language="php">echo("Hello, world!");

</script>

<? echo("Hello,world!"); ?><?= Hello, world! ?>

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

Rev. 1.03. 21.02.2018

Page 2: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

2

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Разделение инструкций- точка с запятой- закрывающий тег

Комментарии- многострочные как в Си/* Комментарий */

- однострочные как в Си// Комментарий

- однострочные как в Perl, bash и т.п.# Комментарий

Однострочные комментарии идут только до конца строки или текущего блока PHP-кода:<?php //echo "try1" ?> try2На экран выводится:try2

Page 3: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

3

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Типы

bool или boolean: TRUE или FALSEint или integer: 123, 0123, 0x1Afloat или double: 1.23, 7e-10string: 'Строка в одинарных кавычках может состоять из нескольких строк. Если она содержит кавычку \' или обратный слеш \\, эти символы предваряются обратным слешем.'

"Переменная A=$A\nПеременная B=$B"

Переменная A=5Переменная B=56

Явное преобразование к типу как в Си: (type)$A = (int) ((0.1+0.7)*10);

Page 4: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

4

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Переменные

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

PHP не требует (и не поддерживает) явного определения типа при объявлении переменной; тип переменной определяется по контексту, в котором она используется. То есть, если вы присвоите строковое значение переменной $var, $var станет строкой. Если вы затем присвоите $var целочисленное значение, она станет целым числом:

$var = "строка";$var = 5;

Page 5: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

5

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Массивы

Упорядоченное отображение, которое устанавливает соответствие между значением и ключом: массив, список (вектор), хэш-таблица, словарь, коллекцию, стек, очередь и т.п. В качестве значения может быть другой массив 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"];

Page 6: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

6

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Некоторые предопределённые переменные

$GLOBALS$_SERVER$_GET$_POST$_COOKIE$_FILES$_REQUEST$_SESSION

Page 7: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

7

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Область видимости переменной

В большинстве случаев все переменные PHP имеют единую область видимости. Эта единая область видимости охватывает также включаемые (include) и требуемые (require) файлы.<?php

$a = 1;include "b.inc";

?>Однако, любая, используемая внутри функции переменная, по умолчанию ограничена локальной областью видимости функции.<?php

$a = 1;function test() {

// global $a;echo $a; // или echo $GLOBALS["a"];

}test();

?>

Page 8: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

8

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Константы

Различия между константами и переменными:• У констант нет приставки в виде знака доллара ($);• Константы можно определить только с помощью функции define(), а не присваиванием значения;• Константы могут быть определены и доступны в любом месте без учета области видимости;• Константы не могут быть переопределены или аннулированы после первоначального объявления;• Константы могут иметь только скалярные значения.

Если вы используете неопределенную константу, PHP предполагает, что вы имеете ввиду само имя константы, как если бы вы указали переменную типа строка (CONSTANT и "CONSTANT"). При этом будет сгенерирована ошибка типа E_NOTICE.

define("DAYS_PER_YEAR", 365);echo DAYS_PER_YEAR;echo Days_Per_Year;

Page 9: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

9

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Ассоциативностьнет

праваянетнет

леваялеваялевая

нетнет

леваялеваялеваялеваялеваялеваяправаялеваялеваялевая

Приоритет операцийnew[++ −−! ~ − (int) (float) (string) (array) (object) @* / %+ − .<< >>< <= >= >== != === !==&^|&&||? := += −= *= /= %= .= &= |= <<= >>=andxoror,

Page 10: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

10

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Оператор условия

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 'Недопустимый метод';

Page 11: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

11

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Оператор выбора

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();}

Page 12: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

12

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Оператор цикла с предусловием

while (выражение) оператор;

$i=10;while ($i--) {

echo $i;}

Оператор цикла с постусловием

do оператор; while (выражение);

$i=10;do {

echo $i;} while ($i--);

Page 13: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

13

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Оператор цикла 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";

}

Page 14: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

14

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Операторы управления циклами

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;

}

Page 15: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

15

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Операторы включения файла

include имя_файла;

include_once имя_файла;

require имя_файла;

require_once имя_файла;

Page 16: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

16

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции, определяемые пользователем

function имя_функции (парам1, парам2, …) {операторы;

}

В PHP 3 функции должны были быть определены прежде, чем они будут использованы. Начиная с PHP 4, такого ограничения нет.

Имена функций регистронезависимы.

PHP поддерживает передачу аргументов по значению (по умолчанию), передачу аргументов по ссылке, и значения по умолчанию.

Значения возвращаются при помощи необязательного оператора возврата return. Возвращаемые значения могут быть любого типа, в том числе это могут быть списки и объекты. Возврат приводит к завершению выполнения функции и передаче управления обратно к той строке кода, в которой данная функция была вызвана.

Page 17: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

17

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с 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>

Page 18: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

18

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с 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"; }

Page 19: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

19

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с 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"]];

Page 20: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

20

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с файловой системой

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)

Page 21: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

21

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с файловой системой

$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)

Page 22: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

22

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вывод в буфер вывода (результирующий HTML)

echo "Строка", $var, "что-нибудь ещё…"; - вывод параметров в буфер выводаreadfile("myfile.html"); - читает файл и записывает его содержимое в буфер вывода (int)printf("Дата: %02d.%02d.%d", $d, $m, $y); - записывает в буфер вывода строку по формату (int)print("Строка"); - вывод строки в буфер вывода (int)

flush(); - немедленно передать содержимое буфера вывода (серверу и далее – клиенту)

Page 23: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

23

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа со строками

$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 greatecho "Drink some {$drink}s"; // Drink some juicesecho "An apple is $colors[apple]"; // An apple is greenecho "An apple is {$colors['apple']}"; // An apple is greenecho "Apple no.$i is {$colors['apple'][$i]}"; // Apple no.1 is redecho "An apple is $colors['apple']"; // syntax errorecho "Apple no.$i is $colors[apple][$i]"; // Apple no.1 is Array[1]

Page 24: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

24

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа со строками

$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 &lt; 45"); - преобразование HTML-сущностей в обозначаемые ими символы (string)$str = htmlspecialchars("<<<Duglas&Co.>>>"); - преобразование спец. символов & " ' < > в обозначающие их HTML-сущности (string)$str = strip_tags("<b>Строка</b>"); - удаление из строки тегов HTML и PHP (string)

Page 25: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

25

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа со строками

$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("a", "@", "banana"); - замена подстрок (string)if (strcasecmp($str1, $str2)==0) {…} – сравнение строк без учёта регистра (int)if (strcmp($str1, $str2)==0) {…} – сравнение строк с учётом регистра

Page 26: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

26

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с массивами

$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)asort($arr); - сортировка по значениям (bool)ksort($arr); - сортировка по ключам (bool)sort($arr); - простая сортировка по значениям (bool)

Page 27: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

27

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Работа с датой/временем

$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)

Page 28: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

28

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Математические функции

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", "Строка");

Page 29: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

29

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции, манипулирующие URL

$url = parse_url("http://mp3:[email protected]/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)

Page 30: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

30

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции, манипулирующие переменными

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); - перевести строковое представление в объект/ массив/переменную

Page 31: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

31

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции работы с изображениями (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.

Page 32: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

32

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции работы с изображениями (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.

Page 33: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

33

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции работы с изображениями (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-тип)

Page 34: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

34

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции работы с изображениями (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)

Page 35: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

35

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции работы с СУБД 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-запроса

Page 36: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

36

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

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

session_start(); - начать или возобновить сессию (bool)

Уничтожение сессии:session_start();$_SESSION = array();session_destroy();

Page 37: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

37

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Функции для работы с HTTP-запросами (cURL)

$ch = curl_init("http://ya.ru/"); — инициализировать новую HTTP-транзакциюcurl_setopt($ch, $option, $value); — параметр HTTP-транзакции:

CURLOPT_POST (true/false) — метод POSTCURLOPT_RETURNTRANSFER (true/false) — результат в строкеCURLOPT_COOKIE (string) — контент для заголовка "Cookie: ..."CURLOPT_COOKIEJAR (string) — сохранять cookie в указанном файлеCURLOPT_POSTFIELDS (string) — контент POST-запросаCURLOPT_REFERER (string) — контент для заголовка "Referer: …"CURLOPT_FILE (resource) — файл для выводаCURLOPT_HTTPHEADER (array) — произвольные HTTP-заголовки

curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFILEDS, "login=".urlencode($_POST['login']). "&password=".md5($_POST['password']));

$res = curl_exec($ch) — выполнить HTTP-запросif (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200) {…} - получить информацию о выполненной HTTP-транзакцииcurl_close($ch) — освободить ресурс, связанный с HTTP-транзакцией

Page 38: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

38

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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);

Page 39: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

39

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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();

Page 40: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

40

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP4 (сериализация)

При сериализации сохраняются только свойства объекта и название класса. Методы объекта не сериализуются. Чтобы метод unserialize() по отношению к объекту прошёл успешно, класс с заданным именем должен быт объявлен.

При вызове serialize() по отношению к объекту, если в классе имеется метод __sleep(), он вызывается. Она может подготавливать объект к сериализации и возвращать массив имён свойств класса, которые следует сериализовать. Пример использования __sleep() – закрыть соединение с базой данных, сбросить несохранённые данные или ограничить список свойств для сохранения, если объект занимает большой объём.

При вызове unserialize() по отношению к объекту, если в классе имеется метод __wakeup(), он вызывается. Основное назначение этой функции – восстановить соединение с базой данных или выполнить подобные инициализационные задачи.

Page 41: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

41

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP5 (видимость свойств и методов, кон-/де-структор)

private – свойство/метод доступно только из данного классаprotected – свойство/метод доступно также в родительских и дочернихpublic – свойство/метод доступно отовсюду (по умолчанию или var)

class Basket {protected $item;function __constructor() {

$this->item = array();}function __destructor() {

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;

}}

Page 42: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

42

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP5 (self, parent, static, ::)

static – чтобы обратиться к такому свойству или методу не требуется экземпляр классаself – для обращения с данному классу из него самого (в отличие от $this указывает не на конкретный экземпляр, а на весь класс – для статич. методов или свойств)parent – для обращения к родительскому классу

class Ext_Basket extends Basket {protected static $counter = 0;function __constructor() {

parent::__construct();self::$counter++;

}}

Page 43: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

43

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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;

Page 44: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

44

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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;

Page 45: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

45

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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); }

}

Page 46: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

46

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP5 (указание типов параметров)

Перед именем параметра метода объекта можно указать тип (название класса, интерфейса или типа “array”). Если функция вызывается с параметром другого типа генерируется ошибка.

class SomeClass {function example(array $data, Stack $info) {

/* … */}

}

Для параметров скалярного типа (int, bool, float, string) указание типа не используется.

Page 47: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

47

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в 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

Page 48: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

48

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP5 («магические методы»)

__construct() // конструктор__destruct() // деструктор__call() // перегрузка методов__get() // перегрузка свойств__set() // перегрузка свойств__isset() // перегрузка свойств__unset() // перегрузка свойств__sleep()// сериализация__wakeup() // десериализация__toString() // преобразование в строку__set_state() // для var_export()__clone()// клонирование

Page 49: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

49

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Объекты в PHP5 (автозагрузка)

function __autoload($class_name) {    require_once $class_name . '.php';}

$obj1 = new MyClass1();$obj2 = new MyClass2(); 

Page 50: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

50

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: Безопасность файловой системы

Поскольку в 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

Page 51: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

51

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: Безопасность баз данных

1. Вы можете использовать безопасные SSL или ssh соединения, для шифрования данных, которыми обмениваются клиент и сервер. Если вы реализуете что-нибудь из этого, то мониторинг трафика и сбор данных о вашей базе данных для потенциального взломщика существенно усложнится.

2. В случае, если взломщик получил непосредственный доступ к БД (в обход веб-сервера), он может извлечь интересующие данные или нарушить их целостность, поскольку информация не защищена на уровне самой БД. Наиболее простое решение этой проблемы – шифрование данных. При таком подходе скрипт вначале шифрует сохраняемые данные, а затем дешифрует их при запросе. В случае работы со скрытыми служебными данными их нешифрованное представление не требуется (т.е. не отображается), и, как следствие, можно использовать хеширование. Хорошо известный пример хэширования - хранение MD5/SHA-хэша от пароля в БД, вместо хранения оригинального значения.

Page 52: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

52

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: Безопасность баз данных

3. Борьба с SQL-инъекциями

• Старайтесь не открывать соединение с базой, используя учетную запись владельца или админа. Используйте специально созданных пользователей с максимально ограниченными правами. • Всегда проверяйте введенные данные на соответствие ожидаемому типу. В PHP есть множество функций для проверки данных: начиная от простейших, таких как is_numeric(), ctype_digit(), и заканчивая регулярными выражениями.• В случае, если приложение ожидает цифровой ввод, примените функцию is_numeric() для проверки введенных данных, или принудительно укажите их тип при помощи settype(), или просто используйте числовое представление при помощи функции sprintf(). • Экранируйте любой нецифровой ввод, используемый в запросах к БД при помощи функций addslashes() или mysql_escape_string().• Не выводите никакой информации о БД, особенно о ее структуре. • Помимо всего вышесказанного, вы можете протоколировать запросы в вашем скрипте либо на уровне базы данных, если она это поддерживает.

Page 53: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

53

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: Сообщения об ошибках

Одна из стандартных методик, применяемых в атаках, - ввод некорректных данных с последующим анализом содержания и характера сообщений об ошибках. Это дает взломщику возможность проверить скрипты и данные сервера на наличие потенциальных дыр. Независимо от метода обработки ошибок возможность проверки системы на наличие ошибок снабжает взломщика дополнительной информацией.1. Структурировать все функции и попытаться компенсировать объем выдаваемых ошибок.2. Полностью отключить в работающем коде вывод сообщений об ошибках.3. Использовать специальные средства PHP для создания собственного обработчика ошибок.

Page 54: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

54

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: register_globals

В случае, если значение параметра register_globals ON, перед выполнением вашего кода будут инициализированы различные переменные, например, переменные, переданные при отправке формы. При написании кода разработчики не могли бы с уверенностью сказать, откуда пришла та или иная переменная и насколько она достоверна. Переменные, определяемые разработчиком внутри скрипта, и передаваемые пользователем внешние данные могли перемешиваться.

1. Инициализируйте собственные переменные.2. Используйте $_SESSION, $_REQUEST и т. п.

Page 55: ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

55

ПЕТРОЗАВОДКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

А. В. Соловьев, 2007-2018

ЯЗЫК ЯЗЫК PHPPHP

Вопросы безопасности: данные, введенные пользователем

unlink ($evil_var);fwrite ($fp, $evil_var);system ($evil_var);exec ($evil_var);

Вы должны тщательно проверять ваш код и быть абсолютно уверены в том, что все данные, передаваемые веб-браузером, проверяются надлежащим образом.• Будет ли данный скрипт воздействовать исключительно на предполагаемые данные? • Правильно ли будут обработаны некорректные или нестандартные данные? • Возможно ли использование скрипта непредусмотренным способом? • Возможно ли его использование в сочетании с другими скриптами в негативных целях? • Будет ли каждая транзакция корректно протоколирована?