Slide 1

Slide 1 text

Epic PHP #3 Рома Лапин, Evercode Lab

Slide 2

Slide 2 text

Web Features

Slide 3

Slide 3 text

Predefined Variables Каждый выполняемый скрипт PHP снабжает целой пачкой предопределенных переменных с разной информацией. Их набор и значения зависят от запроса, настроек и конфигурации сервера и других факторов. Часть из этих переменных недоступна при выполнении в CLI.

Slide 4

Slide 4 text

Superglobals Встроенные переменные PHP, которые всегда видны в любой области видимости.

Slide 5

Slide 5 text

Superglobals • $GLOBALS • $_SERVER • $_GET • $_POST • $_FILES

Slide 6

Slide 6 text

Superglobals • $_REQUEST — не используйте его! • $_SESSION • $_ENV • $_COOKIE

Slide 7

Slide 7 text

Задание В последнем написанном вами скрипте сделайте var_dump() суперглобальных переменных и посмотрите, что в них находится.

Slide 8

Slide 8 text

Сказка про register_globals

Slide 9

Slide 9 text

Сказка про register_globals

Slide 10

Slide 10 text

Сказка про register_globals В темные времена $_GET['foo'] могло быть доступно в скрипте как $foo. И $_POST[‘foo’] тоже. ! Надо объяснять, почему это плохо? ! Если PHP < 5.4.0 убедитесь, что в php.ini: register_globals = off

Slide 11

Slide 11 text

Семантика HTTP HTTP — протокол описывающий взаимодействие между двумя компьютерами (клиентом и сервером), построенное на базе сообщений, называемых запрос (Request) и ответ (Response). Каждое сообщение состоит из трех частей: стартовая строка, заголовки и тело. При этом обязательной является только стартовая строка.

Slide 12

Slide 12 text

Семантика HTTP Стартовая строка: ! METHOD URI HTTP/VERSION, ! где METHOD — это как раз метод HTTP-запроса, URI — идентификатор ресурса, VERSION — версия протокола (на данный момент актуальна версия 1.1).

Slide 13

Slide 13 text

Семантика HTTP • GET — дай • POST — создай • PUT — обнови • DELETE — удали

Slide 14

Slide 14 text

Формы Обработка форм — одна из наиболее сильных сторон PHP. При этом, конечно, не лишенная нюансов. ! Каждый элемент формы будет автоматически доступен в вашем PHP скрипте.

Slide 15

Slide 15 text

Формы Name:
Email:

Slide 16

Slide 16 text

Формы

Slide 17

Slide 17 text

Формы • action — пункт назначения • method — get или post • get — фильтрация, получение данных, значения в $_GET • post — изменение, отправка, значения в $_POST

Slide 18

Slide 18 text

Формы Точки и пробелы в названиях переменных будут сконвертированы в символ подчеркивания. ! Например, попадет в $_GET["a_b"].

Slide 19

Slide 19 text

Формы и массивы Name:
Email:
Beer:
Warthog Guinness Stuttgarter Schwabenbräu

Slide 20

Slide 20 text

Формы и массивы '; echo htmlspecialchars(print_r($_POST, true)); echo ''; }

Slide 21

Slide 21 text

Задание Создадим праобраз простого блога. ! Поля поста: название, дата, тело сообщения, slug. Храним посты в массиве (заведите для примера 2-3). ! Массив выводим на страницу.

Slide 22

Slide 22 text

Задание Форма создания поста: название и тело сообщения. Отправляется через post на тот же скрипт. Пост дописывается в массив и выводится с остальными. Да, он пока что не сохранится :) ! Форма поиска постов: строковое поле. Отправляется через get. Ищет посты по вхождению строки в название или тело сообщения.

Slide 23

Slide 23 text

Формы. Файлы ! ! MAX_FILE_SIZE — после достижения этого значения PHP перестанет получать данные файла. Ошибка будет присутсвовать только в массиве $_FILES. Доверять этой настройке нельзя.

Slide 24

Slide 24 text

Формы. Файлы • enctype=”multipart/form-data” — для отправки файлов • ini директивы • post_max_size • max_input_time • upload_max_filesize

Slide 25

Slide 25 text

Формы. Файлы • $_FILES[] • $_FILES['name'] • $_FILES['type'] • $_FILES['size'] • $_FILES['tmp_name'] • $_FILES['error']

Slide 26

Slide 26 text

Формы. Файлы

Slide 27

Slide 27 text

Задание Добавить к нашему праобразу блога загрузку картинки к посту.

Slide 28

Slide 28 text

Формы Значения по умолчанию ! ! Подстановка значений ! ” />

Slide 29

Slide 29 text

Cookies

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

setcookie() bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) ! Печеньки передаются как часть заголовков запроса. Поэтому они должны задаваться до любого вывода в браузер.

Slide 32

Slide 32 text

setcookie()

Slide 33

Slide 33 text

setcookie() Можно передавать и массивы !

Slide 34

Slide 34 text

$_COOKIE Суперглобальный массив всех печенек. ! Заданные через setcookie значения попадают в $_COOKIE только на следующий запрос.

Slide 35

Slide 35 text

Cookies • Хранится на клиентской стороне (браузер) • Значения должны быть скалярными • Можно задавать через header() как любой другой заголовок • Значения с одинаковыми именами перезаписываются

Slide 36

Slide 36 text

Задание В нашем праобразе блога с помощью cookie добавьте ограничение: пользователю нельзя отправлять сообщение чаще чем раз в 2 минуты. Если он пытается это сделать, надо выводить ему ошибку.

Slide 37

Slide 37 text

Sessions Еще один способ осуществить связь между запросами к серверу. ! В отличии от Cookie данные хранятся на сервере, а их принадлежность пользователю определяется по уникальному id, который либо передается через Cookie, либо через параметра url.

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

Sessions

Slide 40

Slide 40 text

Sessions • Сессии надо стартовать • session_start() • session.auto_start = 1 • Сессии хранятся на сервере • session.save_handler — как • session.save_path — где

Slide 41

Slide 41 text

Sessions • session_id() • session_name() • session_regenerate_id()

Slide 42

Slide 42 text

Задание Добавьте к праобразу блога счетчик, сколько раз данный пользователь заходил на страницу, и выведите его на страницу. ! Добавьте ссылку «сбросить счетчик» и соответствующий код в скрипт.

Slide 43

Slide 43 text

Заголовки В PHP есть возможность управлять не только телом ответа, т.е. содержимым страниц или файлов, но и заголовками. ! void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

Slide 44

Slide 44 text

Заголовки Редирект ! header(“Location: http://epixx.ru“);

Slide 45

Slide 45 text

Заголовки Тип данных !

Slide 46

Slide 46 text

CLI

Slide 47

Slide 47 text

Что нужно знать, чтобы выжить на сервере, или как впечатлить друзей и знакомых

Slide 48

Slide 48 text

Жизненное • Умение не отрывать руки от клавиаутры и не пользоваться мышью повышает шансы на успех на 146% • Изучайте hotkeys • Когда-то файлы на сервер заливали через FTP • Но чем дальше в лес, тем больше git и ssh. Deal with it!

Slide 49

Slide 49 text

CLI? WTF? • Command Line Interface • Это вам не окошки перетаскивать и мышкой щелкать • Linux – есть везде • Mac – Terminal, iTerm • Windows – CygWin

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

Ориентация в пространстве

Slide 52

Slide 52 text

Ориентация в пространстве • pwd — Где я, черт подери?

Slide 53

Slide 53 text

Ориентация в пространстве • pwd — Где я, черт подери? • ls — Кто эти люди вокруг?

Slide 54

Slide 54 text

Ориентация в пространстве • pwd — Где я, черт подери? • ls — Кто эти люди вокруг? • ls -al — Кто эти люди и кто там еще прячется?

Slide 55

Slide 55 text

Ориентация в пространстве • pwd — Где я, черт подери? • ls — Кто эти люди вокруг? • ls -al — Кто эти люди и кто там еще прячется? • cd — Валим!

Slide 56

Slide 56 text

Ориентация в пространстве • pwd — Где я, черт подери? • ls — Кто эти люди вокруг? • ls -al — Кто эти люди и кто там еще прячется? • cd — Валим! • Найдите папку xampp и файл php (php.exe)

Slide 57

Slide 57 text

Ориентация в пространстве 2 • locate — Где моя тачка, чувак? • which — А ты с какого района? • tree — Зри в корень!

Slide 58

Slide 58 text

PHP? • php -h — Бэн, это Данила. Ай нид хелп! • php -v — А ты кто по жизни? • php -i — А, если в карманах посмотрю? • php --ini — Скажи мне, кто твои друзья?

Slide 59

Slide 59 text

PHP? • php -S localhost:8000 -t web • php -r 'echo "hello\n";' • php test.php

Slide 60

Slide 60 text

Ну, что еще? • mkdir — создание каталога • touch — создание пустого файла • ssh [email protected] — попасть на сервер

Slide 61

Slide 61 text

Ну, что еще? • wget • curl • cat • less • more • nano

Slide 62

Slide 62 text

Хотите всех напугать?

Slide 63

Slide 63 text

Хотите всех напугать? И задавить понтами?

Slide 64

Slide 64 text

Хотите всех напугать? И задавить понтами? Пользуйтесь vim!

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

Виртуальные хосты • размещения более чем одного веб-сайта на одной машине • epixx.ru и epicss.ru • /etc/hosts • %SystemRoot%\system32\drivers\etc\hosts • 127.0.0.1 yoursite.dev

Slide 67

Slide 67 text

httpd-vhosts.conf NameVirtualHost *:80 ! ! ....

Slide 68

Slide 68 text

DocumentRoot "/var/www/epicphp" ServerName epicphp.dev ! ....

Slide 69

Slide 69 text

Options Indexes FollowSymLinks Includes execCGI AllowOverride All Order allow,deny Allow from all

Slide 70

Slide 70 text

GIT

Slide 71

Slide 71 text

Система управления версиями ПО для облегчения работы с изменяющейся информацией. Позволяет хранить несколько версий одного и того же файла, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое. ! (от англ. Version Control System, VCS)

Slide 72

Slide 72 text

Как оно бывает

Slide 73

Slide 73 text

Как оно бывает • Лена и Ян работают над одним проектом

Slide 74

Slide 74 text

Как оно бывает • Лена и Ян работают над одним проектом • Работают каждый у себя дома

Slide 75

Slide 75 text

Как оно бывает • Лена и Ян работают над одним проектом • Работают каждый у себя дома • Файлами обмениваются по почте/через мессенджер/фтп

Slide 76

Slide 76 text

Как оно бывает • Лена и Ян работают над одним проектом • Работают каждый у себя дома • Файлами обмениваются по почте/через мессенджер/фтп • В один прекрасный момент им надо что- то изменить в одном и том же файле

Slide 77

Slide 77 text

Как оно бывает • Лена и Ян работают над одним проектом • Работают каждый у себя дома • Файлами обмениваются по почте/через мессенджер/фтп • В один прекрасный момент им надо что- то изменить в одном и том же файле • Одновременно

Slide 78

Slide 78 text

Как оно бывает

Slide 79

Slide 79 text

Как оно бывает • Александр работает над небольшим проектом несколько дней

Slide 80

Slide 80 text

Как оно бывает • Александр работает над небольшим проектом несколько дней • И вдруг понимает, что вчера случайно удалил файл, который сегодня очень нужен

Slide 81

Slide 81 text

Как оно бывает • Александр работает над небольшим проектом несколько дней • И вдруг понимает, что вчера случайно удалил файл, который сегодня очень нужен • А в другом участке кода выясняется, что версия, сделанная позавчера была правильная

Slide 82

Slide 82 text

Как оно бывает • Александр работает над небольшим проектом несколько дней • И вдруг понимает, что вчера случайно удалил файл, который сегодня очень нужен • А в другом участке кода выясняется, что версия, сделанная позавчера была правильная • Но ее уже нет

Slide 83

Slide 83 text

Как оно бывает

Slide 84

Slide 84 text

Как оно бывает • index.php

Slide 85

Slide 85 text

Как оно бывает • index.php • index_old.php

Slide 86

Slide 86 text

Как оно бывает • index.php • index_old.php • index_new.php

Slide 87

Slide 87 text

Как оно бывает • index.php • index_old.php • index_new.php • index_new_new.php

Slide 88

Slide 88 text

Как оно бывает • index.php • index_old.php • index_new.php • index_new_new.php • index_really_fucking_new_assure_you.php

Slide 89

Slide 89 text

Как оно бывает • index.php • index_old.php • index_new.php • index_new_new.php • index_really_fucking_new_assure_you.php • damn.php

Slide 90

Slide 90 text

No content

Slide 91

Slide 91 text

No content

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

Git Распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. На сегодняшний день поддерживается Джунио Хамано.

Slide 94

Slide 94 text

Git • http://git-scm.com/ • http://try.github.com/ • http://rogerdudler.github.io/git-guide/