SlideShare a Scribd company logo
PHP + Shell = ♥ 
Макс Волошин, PUG Dnepr #2
О чём рассказ? 
● работа в Shell 
● исполнение PHP в Shell 
● использование REPL 
● сравнение Boris и PsySH
Зачем нам это? 
Мы работаем с Shell когда 
● используем эмулятор терминала: 
iTerm / Gnome Terminal / Konsole / xterm / ... 
● заходим по ssh на удалённую машину 
● используем PHP функции: 
/ / / / ... 
● предоставляем интерфейс командной строки к 
своему приложению 
● ...
Что такое Shell? 
Shell – интерпретатор командного языка, 
который определяется стандартом POSIX
Что такое Shell? 
Существуют различные реализации Shell 
● оригинальный Bourne Shell – sh – используется в 
большинстве версий UNIX 
● Bourne Again Shell – bash – используется во многих 
дистрибутивах Linux 
● Debian Almquist Shell – dash – используется в Debian 
● Z Shell – zsh – используется продвинутыми 
пользователями командной строки :) 
● ...
Запуск PHP приложения из Shell
Shell переменные и окружение 
В Shell можно использовать переменные
Переменные окружения 
Узнать набор текущих переменных окружения
Переменные окружения 
Превратить простую переменную в переменную 
окружения 
…
Переменные окружения 
Индивидуальные переменные для новой команды 
…
Передача параметров из Shell в PHP
Использование переменных окружения
Использование аргументов вызова
Запуск приложения в POSIX стиле 
↓
Запуск приложения в POSIX стиле 
… 
(никто не имеет права исполнять файл) 
… 
(владелец имеет право исполнить файл)
Запуск приложения в POSIX стиле 
→
Запуск приложения в POSIX стиле
Потоки ввода/вывода/ошибок 
STDIN App 
STDOUT 
STDERR
Работа с потоком вывода
Работа с потоком ошибок
Работа с потоком ошибок
Работа с потоком ввода
Работа с потоком ввода
Работа с потоком ввода без блокировки
Работа с потоком ввода без блокировки
Композиция Shell программ
Последовательное выполнение
Успешность выполнения
Условное выполнение
Pipeline выполнение
REPL – read-eval-print loop
Зачем нам это? 
Чтобы быстро узнать результат одного или нескольких 
выражений 
● вы изучаете язык 
● вы вспоминаете язык 
● вы проверяете знание языка
Пример из жизни PHP разработчика
REPL в PHP 
– возможность исполнять код из аргумента без тегов: 
– запуск в режиме интерактивной среды:
REPL в PHP 
Интерактивная среда не является REPL 
● результат вычисления не выводится 
● при ошибках процесс обрывается 
Выход есть 
● Boris – tiny REPL for PHP 
● PsySH – runtime developer console, interactive 
debugger and REPL for PHP
REPL в PHP
Boris vs PsySH
Boris PsySH 
Статистика 
Первый коммит Nov 6, 2011 Apr 8, 2012 
Звёзды на Github 1 470 + 420 + 
Форки на Github 80 + 30 + 
Загрузок на Packagist за месяц 230 000 + 2 000 +
Установка 
Boris PsySH 
Phar + + 
Composer + +
Boris vs PsySH 
Работа в REPL
Возможность не писать в конце 
Boris PsySH
Возможность не писать в конце 
Boris PsySH
Возможность не писать в конце 
Boris PsySH
Отображение встроенных типов 
Boris PsySH
Отображение встроенных типов 
Boris PsySH
Ограничение глубины вывода 
Boris PsySH
Ограничение глубины вывода 
Boris PsySH
Ограничение глубины вывода 
Boris PsySH
Обработка нефатальных ошибок 
Boris PsySH
Обработка нефатальных ошибок 
Boris PsySH
Обработка нефатальных ошибок 
Boris PsySH
Обработка нефатальных ошибок 
Boris PsySH
Обработка исключений 
Boris PsySH
Обработка исключений 
Boris PsySH
Обработка бесконечных циклов 
Boris PsySH
Обработка бесконечных циклов 
Boris PsySH
Обработка бесконечных циклов 
Boris PsySH
Обработка бесконечных циклов 
Boris PsySH
Обработка бесконечных циклов 
Boris PsySH
Boris vs PsySH 
Внешняя конфигурация
Файл конфигурации 
Boris PsySH
Файл конфигурации 
Boris PsySH
Файл конфигурации 
Boris PsySH
Подключение индивидуальных файлов 
Boris PsySH
Подключение индивидуальных файлов 
Boris PsySH
Boris vs PsySH 
Интеграция со своим приложением
Зачем нам это? 
Чтобы понизить порог входа 
в разрабатываемую систему
Какие возможности REPL нам нужны? 
● создание своей точки входа 
● использование своих переменных 
● написание своих обработчиков для значений
Своя точка входа 
Boris PsySH
Своя точка входа 
Boris PsySH
Своя точка входа 
Boris PsySH
Свои переменные 
Boris PsySH
Свои переменные 
Boris PsySH
Свои переменные 
Boris PsySH
Свой обработчик значений 
Boris PsySH
Свой обработчик значений 
Boris PsySH
Свой обработчик значений
Свой обработчик значений 
Boris PsySH
Свой обработчик значений 
Boris PsySH
Свой обработчик значений 
Boris
Свой обработчик значений 
Boris
Свой обработчик значений 
Boris PsySH
Свой обработчик значений 
PsySH
Свой обработчик значений 
PsySH
Свой обработчик значений 
Boris PsySH
Несколько обработчиков 
Boris PsySH
Несколько обработчиков 
Boris PsySH
Boris PsySH 
принимает массив 
Несколько обработчиков
Рекурсивность обработчиков 
Boris PsySH
Рекурсивность обработчиков 
Boris PsySH
Рекурсивность обработчиков 
Boris PsySH
Итого 
Boris : PsySH 
… кроме этого в PsySH еще много всего хорошего 
http://psysh.org/
Спасибо! maxvoloshin.com

More Related Content

PDF
Алексей Иванкин: Highload + PHP
PPTX
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
PDF
Демонизированный PHP - before it was cool
PDF
My talk on HBase ops engineering at TBD Jun 2016
PDF
Всему своё время / Роман Ивлиев (Банки.ру)
PDF
Performance engineering stories from #fdminicon Saransk
PPT
PHP: SAPI
PDF
Javascript-фреймворки:
 должен остаться только один
Алексей Иванкин: Highload + PHP
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Демонизированный PHP - before it was cool
My talk on HBase ops engineering at TBD Jun 2016
Всему своё время / Роман Ивлиев (Банки.ру)
Performance engineering stories from #fdminicon Saransk
PHP: SAPI
Javascript-фреймворки:
 должен остаться только один

What's hot (18)

PDF
SECON'2016. Васильков Василий, Серверное программирование сегодня
PDF
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PPTX
мир без Jsp. thymeleaf 2.0
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
PPTX
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
PDF
NoSQL — неспроста ли это "ЖЖЖ"?
PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
PDF
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
PDF
Salt and Ansible - Python-based CM systems
PPTX
Какой фреймворк нам нужен для Web? Денис Цыплаков
PDF
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
PPTX
Организация надежного резервного копирования веб-проекта. Практика и подводны...
PDF
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
PDF
PDF
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
PDF
My talk on Hadoop stack operations engineering at OSPCon
KEY
Что и почему писать на Erlang
SECON'2016. Васильков Василий, Серверное программирование сегодня
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
мир без Jsp. thymeleaf 2.0
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
Миф об очень сложном Highload / Александр Горный (Mail.Ru Group)
NoSQL — неспроста ли это "ЖЖЖ"?
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
Salt and Ansible - Python-based CM systems
Какой фреймворк нам нужен для Web? Денис Цыплаков
Порядок для скорости. Система структурирования фронтендовой части веб-приложе...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
My talk on Hadoop stack operations engineering at OSPCon
Что и почему писать на Erlang
Ad

Similar to Макс Волошин: Php + shell = ♥ (20)

PPT
The basic design of the PHP language
PDF
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
PDF
Php. dark and light side
PDF
Сборник практических задании по Php
PDF
Специфика тестирования проектов с открытым исходным кодом
PPTX
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
PPT
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
PPSX
Programming history. Algorithm
PDF
Как мы делаем модули PHP в Badoo – Антон Довгаль
PDF
Особенности тестирования открытого ПО
PPT
PDF
Algorithms and programming lecture in ru
PDF
Алгоритмизация и программирование С/С++
PPTX
Язык программирования PHP. EasyCode. Стартовая презентация.
PDF
Компиляция скриптов PHP. Алексей Романенко
PDF
Компиляция скриптов PHP (Алексей Романенко)
PDF
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
PDF
Remote (dev)tools своими руками
PDF
Отладка в Python: 2016 edition
PPTX
Язык программирования PHP
The basic design of the PHP language
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Php. dark and light side
Сборник практических задании по Php
Специфика тестирования проектов с открытым исходным кодом
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Programming history. Algorithm
Как мы делаем модули PHP в Badoo – Антон Довгаль
Особенности тестирования открытого ПО
Algorithms and programming lecture in ru
Алгоритмизация и программирование С/С++
Язык программирования PHP. EasyCode. Стартовая презентация.
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP (Алексей Романенко)
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Remote (dev)tools своими руками
Отладка в Python: 2016 edition
Язык программирования PHP
Ad

More from Oleg Poludnenko (11)

PPTX
Дмитрий Красун: Сегодня вы уйдете с новым представлением о REST
PDF
Александр Трищенко: PHP 7 Evolution
PPTX
Иван Стеценко: ЯП Zephir. Панацея или лечение?
PPTX
Александр Трищенко: Phalcon framework
PPTX
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
PPTX
Алексей Рыстенко: Highload и микросервисы
PPTX
Алексей Плеханов: Новинки Laravel 5
PPTX
Дмитрий Тарасов: Google App Engine & PHP SDK
PPTX
Алексей Рыстенко: Continuous Integration
PPTX
Илья Андриенко: Вёрстка в проекте глазами “неверстальщика”
PDF
Алексей Плеханов: 25 причин попробовать Laravel
Дмитрий Красун: Сегодня вы уйдете с новым представлением о REST
Александр Трищенко: PHP 7 Evolution
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Александр Трищенко: Phalcon framework
Антон Довгоброд: Highload и очереди задач на примере PHP + Gearman + Yii2
Алексей Рыстенко: Highload и микросервисы
Алексей Плеханов: Новинки Laravel 5
Дмитрий Тарасов: Google App Engine & PHP SDK
Алексей Рыстенко: Continuous Integration
Илья Андриенко: Вёрстка в проекте глазами “неверстальщика”
Алексей Плеханов: 25 причин попробовать Laravel

Макс Волошин: Php + shell = ♥