Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Epic PHP #3

Roma
March 03, 2014

Epic PHP #3

Слайды к третьему занятию курса Epic PHP (http://epixx.ru/epic-php/).
Темы: web features, формы, cookie, сессии, CLI, Git

Roma

March 03, 2014
Tweet

More Decks by Roma

Other Decks in Programming

Transcript

  1. Predefined Variables Каждый выполняемый скрипт PHP снабжает целой пачкой предопределенных

    переменных с разной информацией. Их набор и значения зависят от запроса, настроек и конфигурации сервера и других факторов. Часть из этих переменных недоступна при выполнении в CLI.
  2. Сказка про register_globals В темные времена $_GET['foo'] могло быть доступно

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

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

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

    • PUT — обнови • DELETE — удали
  6. Формы Обработка форм — одна из наиболее сильных сторон PHP.

    При этом, конечно, не лишенная нюансов. ! Каждый элемент формы будет автоматически доступен в вашем PHP скрипте.
  7. Формы <form action="foo.php" method="post"> Name: <input type="text" name="username" /><br />

    Email: <input type="text" name="email" /><br /> <input type="submit" name="submit" value="Submit me!" /> </form>
  8. Формы • action — пункт назначения • method — get

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

    символ подчеркивания. ! Например, <input name="a.b" /> попадет в $_GET["a_b"].
  10. Формы и массивы <form action="" method="post"> Name: <input type="text" name="personal[name]"

    /><br /> Email: <input type="text" name="personal[email]" /><br /> Beer: <br /> <select multiple name="beer[]"> <option value="warthog">Warthog</option> <option value="guinness">Guinness</option> <option value="stuttgarter">Stuttgarter Schwabenbräu</option> </select><br /> <input type="submit" value="submit me!" /> </form>
  11. Формы и массивы <?php if ($_POST) { echo '<pre>'; echo

    htmlspecialchars(print_r($_POST, true)); echo '</pre>'; }
  12. Задание Создадим праобраз простого блога. ! Поля поста: название, дата,

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

    post на тот же скрипт. Пост дописывается в массив и выводится с остальными. Да, он пока что не сохранится :) ! Форма поиска постов: строковое поле. Отправляется через get. Ищет посты по вхождению строки в название или тело сообщения.
  14. Формы. Файлы <input type="hidden" name="MAX_FILE_SIZE" value="4194304" /> ! <input type="file"

    name="logo" /> ! MAX_FILE_SIZE — после достижения этого значения PHP перестанет получать данные файла. Ошибка будет присутсвовать только в массиве $_FILES. Доверять этой настройке нельзя.
  15. Формы. Файлы • enctype=”multipart/form-data” — для отправки файлов • ini

    директивы • post_max_size • max_input_time • upload_max_filesize
  16. Формы. Файлы <?php $uploaddir = __DIR__; $uploadfile = $uploaddir .

    DIRECTORY_SEPARATOR . basename($_FILES['userfile']['name']); ! if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible file upload attack!\n"; }
  17. Формы Значения по умолчанию ! <input type="text" name="username" value=”jack” />

    ! Подстановка значений ! <?php $username = htmlspecialchars($_GET[‘username’]); ?> <input type="text" name="username" value=”<?=$username ?>” />
  18. Cookies Небольшой фрагмент данных, отправленный веб- сервером и хранимый на

    компьютере пользователя. ! Используется для отслеживания пользователей и передачи информации между запросами к серверу.
  19. setcookie() bool setcookie ( string $name [, string $value [,

    int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] ) ! Печеньки передаются как часть заголовков запроса. Поэтому они должны задаваться до любого вывода в браузер.
  20. setcookie() <?php if (isset($_COOKIE['count'])) { $count = $_COOKIE['count'] + 1;

    } else { $count = 1; } setcookie('count', $count, time() + 3600); echo $count;
  21. Cookies • Хранится на клиентской стороне (браузер) • Значения должны

    быть скалярными • Можно задавать через header() как любой другой заголовок • Значения с одинаковыми именами перезаписываются
  22. Задание В нашем праобразе блога с помощью cookie добавьте ограничение:

    пользователю нельзя отправлять сообщение чаще чем раз в 2 минуты. Если он пытается это сделать, надо выводить ему ошибку.
  23. Sessions Еще один способ осуществить связь между запросами к серверу.

    ! В отличии от Cookie данные хранятся на сервере, а их принадлежность пользователю определяется по уникальному id, который либо передается через Cookie, либо через параметра url.
  24. Sessions <?php session_start(); if (!isset($_SESSION['count'])) { $_SESSION['count'] = 0; }

    else { $_SESSION['count']++; } echo $_SESSION[‘count’];
  25. Sessions • Сессии надо стартовать • session_start() • session.auto_start =

    1 • Сессии хранятся на сервере • session.save_handler — как • session.save_path — где
  26. Задание Добавьте к праобразу блога счетчик, сколько раз данный пользователь

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

    т.е. содержимым страниц или файлов, но и заголовками. ! void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
  28. Заголовки Тип данных ! <?php // Будем передавать PDF header('Content-type:

    application/pdf'); ! // Который будет называться downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); ! // Исходный PDF файл original.pdf readfile('original.pdf');
  29. CLI

  30. Жизненное • Умение не отрывать руки от клавиаутры и не

    пользоваться мышью повышает шансы на успех на 146% • Изучайте hotkeys • Когда-то файлы на сервер заливали через FTP • Но чем дальше в лес, тем больше git и ssh. Deal with it!
  31. CLI? WTF? • Command Line Interface • Это вам не

    окошки перетаскивать и мышкой щелкать • Linux – есть везде • Mac – Terminal, iTerm • Windows – CygWin
  32. Ориентация в пространстве • pwd — Где я, черт подери?

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

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

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

    чувак? • which — А ты с какого района? • tree — Зри в корень!
  36. PHP? • php -h — Бэн, это Данила. Ай нид

    хелп! • php -v — А ты кто по жизни? • php -i — А, если в карманах посмотрю? • php --ini — Скажи мне, кто твои друзья?
  37. PHP? • php -S localhost:8000 -t web • php -r

    'echo "hello\n";' • php test.php
  38. Ну, что еще? • mkdir — создание каталога • touch

    — создание пустого файла • ssh [email protected] — попасть на сервер
  39. Виртуальные хосты • размещения более чем одного веб-сайта на одной

    машине • epixx.ru и epicss.ru • /etc/hosts • %SystemRoot%\system32\drivers\etc\hosts • 127.0.0.1 yoursite.dev
  40. GIT

  41. Система управления версиями ПО для облегчения работы с изменяющейся информацией.

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

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

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

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

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

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

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

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

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

    index_new_new.php • index_really_fucking_new_assure_you.php • damn.php
  51. Git Распределённая система управления версиями файлов. Проект был создан Линусом

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