Что если хочется в легаси приложении использовать удобные функции Laravel? Например, очереди? Рецепт: на лету создать инстанс Laravel приложения, забутстрапить его и теперь можно пользоваться удобными Laravel-очередями:
```
// Подготавливаем инстанс Laravel приложения
// путь к директории bootstrap с Laravel приложением может отличается,
// зависит от текущего .php файла
$laravelApp = require DIR . '/../../bootstrap/app.php';
$bootstrappers = [
LoadEnvironmentVariables::class,
LoadConfiguration::class,
HandleExceptions::class,
RegisterFacades::class,
SetRequestForConsole::class,
RegisterProviders::class,
BootProviders::class,
];
$laravelApp->bootstrapWith($bootstrappers);
$laravelApp->loadDeferredProviders();
// Запускаем Laravel Job находясь где-то посредине Legacy приложения!
MyJob::dispatch();
```
```
// Подготавливаем инстанс Laravel приложения
// путь к директории bootstrap с Laravel приложением может отличается,
// зависит от текущего .php файла
$laravelApp = require DIR . '/../../bootstrap/app.php';
$bootstrappers = [
LoadEnvironmentVariables::class,
LoadConfiguration::class,
HandleExceptions::class,
RegisterFacades::class,
SetRequestForConsole::class,
RegisterProviders::class,
BootProviders::class,
];
$laravelApp->bootstrapWith($bootstrappers);
$laravelApp->loadDeferredProviders();
// Запускаем Laravel Job находясь где-то посредине Legacy приложения!
MyJob::dispatch();
```
Blackfire (достаточно удобный профилировщик) научился распознавать имена Blade шаблонов! Раньше показывал длинное имя скомпилированного файла шаблона, что было не удобно: http://amp.gs/cls0
Про Blackfire я рассказывал в одном из старых выпусков подкаста: http://amp.gs/cls3
Но с тех пор я отказался от платной подписки и лишь иногда пользуюсь ограниченными возможностями бесплатной версии. Сейчас в основном профилирую локально.
Про Blackfire я рассказывал в одном из старых выпусков подкаста: http://amp.gs/cls3
Но с тех пор я отказался от платной подписки и лишь иногда пользуюсь ограниченными возможностями бесплатной версии. Сейчас в основном профилирую локально.
Blackfire.io Le Blog
Laravel Blade Templates Names Decoded
Laravel Blade templates can now be identified at a glance in a profile.
Рекомендую прочитать свежую статью про Fibers в PHP 8.1 от Christian Lück (один из разработчиков ReactPHP): http://amp.gs/cn9d
В статье много наглядных примеров и в целом читается легко.
Крис отвечает на несколько вопросов:
— Что такое Fibers в целом и какие особенности в PHP в частности
— Станет ли PHP асинхронным с появлением Fibers? (спойлер: нет, но приближают нас к этому)
— Какую проблему решают Fibers? (спойлер: косметически/синтаксическую, код будет немного проще писать и читать)
— Что насчёт Promises и async/await?
— Повлияет ли появление Fibers в PHP на проект
ReactPHP?
— А на какое влияние на PHP в целом?
— Framework X? http://amp.gs/cn9q
Также Крис упоминает легендарную статью "What Color is Your Function?" описывающую всю боль от асинхронного программирования, дам ссылку сразу на перевод на Хабре: http://amp.gs/cn9u
В статье много наглядных примеров и в целом читается легко.
Крис отвечает на несколько вопросов:
— Что такое Fibers в целом и какие особенности в PHP в частности
— Станет ли PHP асинхронным с появлением Fibers? (спойлер: нет, но приближают нас к этому)
— Какую проблему решают Fibers? (спойлер: косметически/синтаксическую, код будет немного проще писать и читать)
— Что насчёт Promises и async/await?
— Повлияет ли появление Fibers в PHP на проект
ReactPHP?
— А на какое влияние на PHP в целом?
— Framework X? http://amp.gs/cn9q
Также Крис упоминает легендарную статью "What Color is Your Function?" описывающую всю боль от асинхронного программирования, дам ссылку сразу на перевод на Хабре: http://amp.gs/cn9u
clue·engineering
Fibers in PHP: A new opportunity for async PHP?
It looks like PHP will get fibers soon with PHP 8.1! That’s awesome! Or is it? What are fibers? I think the Ruby documentation does a good job at describing what fibers are: Fibers are primitives for implementing light weight cooperative concurrency…
Классический способ публикации PHP проектов: имеем текущую версию кода в некоей директории директории /app/version1 и символическую ссылку /app/current -> /app/version1.
Настройки nginx таковы, что код запускается из /app/current (т.е. по символической ссылке).
Пришло время вложить новую версию: заливаем на сервер в директорию /app/version2 и после этого переключаем символическую ссылку /app/current -> /app/version2.
Атомарно? Не факт!
Есть несколько дополнительных факторов, которые нужно учитывать при деплое:
- OPCache
- realpath_cache
- А начиная с PHP 7.4 ещё и preload
И сразу возникают вопросы:
- Нужно ли делать сброс OPCache при такой схеме деплоя с двумя директориями и символической ссылкой? А если нужно, как это сделать правильно: php-fpm restart vs php-fpm reload vs gordalina/cachetool?
- Нужно ли сбрасывать realpath_cache или достаточно использовать $realpath_root в настройках nginx?
- Приводит ли php-fpm reload к сбросу realpath_cache?
- А если используем preload (PHP 7.4+), то выходит в любом случае придётся делать php-fpm reload? Или php-fpm restart?
Сознательно опускаю вопросы миграции базы данных и специфичные кеширующие механизмы тех или иных фреймворков.
Что рекомендую прочитать:
1. Не плохая статья-расследование с заголовком «Во всём виноват PHP OPCache?» http://amp.gs/cPeI
Спойлер: в этом случае OPCache не виноват, проблема была в realpath_cache
2. Подробности про работу realpath_cache: http://amp.gs/cPej
3. 5 способов деплоя PHP-кода в условиях хайлоада: http://amp.gs/cPeT
В этой статье специфика проекта, с которой вряд ли придётся столкнуться 99% разработчикам: «2 000 серверов, на которых 150 000 файлов объемом по 900 Мб PHP-кода и стейджинг-кластер на 50 машин». Однако написано хорошо и, безусловно, есть полезная информация и для разработчиков обычных, не столь нагруженных проектов.
После прочтения данной заметки, возможно, у вас появилось ещё больше вопросов, чем было! Будем разбираться дальше.
Настройки nginx таковы, что код запускается из /app/current (т.е. по символической ссылке).
Пришло время вложить новую версию: заливаем на сервер в директорию /app/version2 и после этого переключаем символическую ссылку /app/current -> /app/version2.
Атомарно? Не факт!
Есть несколько дополнительных факторов, которые нужно учитывать при деплое:
- OPCache
- realpath_cache
- А начиная с PHP 7.4 ещё и preload
И сразу возникают вопросы:
- Нужно ли делать сброс OPCache при такой схеме деплоя с двумя директориями и символической ссылкой? А если нужно, как это сделать правильно: php-fpm restart vs php-fpm reload vs gordalina/cachetool?
- Нужно ли сбрасывать realpath_cache или достаточно использовать $realpath_root в настройках nginx?
- Приводит ли php-fpm reload к сбросу realpath_cache?
- А если используем preload (PHP 7.4+), то выходит в любом случае придётся делать php-fpm reload? Или php-fpm restart?
Сознательно опускаю вопросы миграции базы данных и специфичные кеширующие механизмы тех или иных фреймворков.
Что рекомендую прочитать:
1. Не плохая статья-расследование с заголовком «Во всём виноват PHP OPCache?» http://amp.gs/cPeI
Спойлер: в этом случае OPCache не виноват, проблема была в realpath_cache
2. Подробности про работу realpath_cache: http://amp.gs/cPej
3. 5 способов деплоя PHP-кода в условиях хайлоада: http://amp.gs/cPeT
В этой статье специфика проекта, с которой вряд ли придётся столкнуться 99% разработчикам: «2 000 серверов, на которых 150 000 файлов объемом по 900 Мб PHP-кода и стейджинг-кластер на 50 машин». Однако написано хорошо и, безусловно, есть полезная информация и для разработчиков обычных, не столь нагруженных проектов.
После прочтения данной заметки, возможно, у вас появилось ещё больше вопросов, чем было! Будем разбираться дальше.
Хабр
Во всём виноват PHP OPCache?
Когда я начинал карьеру разработчика, то очень удивился, прочитав фразу, которую приписывают Филу Карлтону (Phil Karlton): «В информатике есть лишь две сложности: инвалидация кеша и присвоение...
https://phpfwtrends.org/ - сайт, который собирает статистику по скачиваниям фреймворков с Packagist.
Интересно, что был учтён ряд нюансов:
- Поскольку Laravel под капотом опирается на компоненты Symfony, то при подсчёте число загрузок Laravel вычитается из загрузок Symfony. Иными словами: 1 загрузка пакета Laravel = 0 загрузок Symfony (с учётом конкретного списка зависимостей пакетов Laravel от пакетов Symfony)
- Не учитываются пакеты < 500 загрузок в день
- Не учитывают пакеты моложе 12 месяцев, чтобы было возможно построить тренд "на сколько процентов пакет вырос за год?"
- Не учитываются мета пакеты и демки, типа symfony/demo (список прилагается)
Поразительный результат Laminas +103% за год - это эффект низкой базы после переименования из Zend Expressive.
Статистика обновляется раз в неделю.
Интересно, что был учтён ряд нюансов:
- Поскольку Laravel под капотом опирается на компоненты Symfony, то при подсчёте число загрузок Laravel вычитается из загрузок Symfony. Иными словами: 1 загрузка пакета Laravel = 0 загрузок Symfony (с учётом конкретного списка зависимостей пакетов Laravel от пакетов Symfony)
- Не учитываются пакеты < 500 загрузок в день
- Не учитывают пакеты моложе 12 месяцев, чтобы было возможно построить тренд "на сколько процентов пакет вырос за год?"
- Не учитываются мета пакеты и демки, типа symfony/demo (список прилагается)
Поразительный результат Laminas +103% за год - это эффект низкой базы после переименования из Zend Expressive.
Статистика обновляется раз в неделю.
Молния: сервер git.php.net скомпрометирован, исходники PHP переезжают на GitHub (раньше было только зеркало): http://amp.gs/chnr
Подробности: http://amp.gs/chnS
Теория заговора: Никита и Расмус инсцинировали взлом, чтобы форсировать переезд на GitHub 🧐
Подробности: http://amp.gs/chnS
Теория заговора: Никита и Расмус инсцинировали взлом, чтобы форсировать переезд на GitHub 🧐
Поделюсь ссылками на несколько полезных Twitter тредов про ООП от Кирилла Мокевнина (Хекслет):
1. Разные школы ООП и полиморфизм подтипов: https://twitter.com/mokevnin/status/1339256302850207751
2. Динамическая диспетчеризация: https://twitter.com/mokevnin/status/1339989917011734530
3. Наследования и отношения: https://twitter.com/mokevnin/status/1341804176544829444
4. Инкапсуляция: https://twitter.com/mokevnin/status/1346884002041516035
5. Что делает код ООП кодом: https://twitter.com/mokevnin/status/1351590325362565120
1. Разные школы ООП и полиморфизм подтипов: https://twitter.com/mokevnin/status/1339256302850207751
2. Динамическая диспетчеризация: https://twitter.com/mokevnin/status/1339989917011734530
3. Наследования и отношения: https://twitter.com/mokevnin/status/1341804176544829444
4. Инкапсуляция: https://twitter.com/mokevnin/status/1346884002041516035
5. Что делает код ООП кодом: https://twitter.com/mokevnin/status/1351590325362565120
Автор популярного YouTube канала Laravel Daily провёл опрос о способах деплоя, приняло участие 447 респондентов.
Интересный факт: 114 используют shared hosting и половина из них FTP — дух 2000-х всё ещё жив в PHP разработке, даже в среде Laravel!
https://youtu.be/BpTpOV5ZuTQ
Интересный факт: 114 используют shared hosting и половина из них FTP — дух 2000-х всё ещё жив в PHP разработке, даже в среде Laravel!
https://youtu.be/BpTpOV5ZuTQ
Привет!
Канал Пятиминутка PHP не стоит на месте и продолжает развиваться. Я принял решение рассылать новости с помощью телеграмм.
Телеграммы — принципиально новый формат доставки новостей:
— На настоящем физическом носителе!
— С заботой о вашем зрении: бумага намного безопаснее для глаз, чем яркий экран смартфона.
— Когда мы запустим сервис по доставке еды для PHP разработчиков, вы будете одним из первых в списке на бета-тест (не еды, а сервиса).
— Получить долгожданную телеграмму гораздо приятнее, чем просто сообщение в мессенджере, не так ли?
Все текущие подписчики канала Пятиминутка PHP автоматически переводятся на рассылку телеграмм, следите за PHP новостями в ближайшем отделении почты!
Канал Пятиминутка PHP не стоит на месте и продолжает развиваться. Я принял решение рассылать новости с помощью телеграмм.
Телеграммы — принципиально новый формат доставки новостей:
— На настоящем физическом носителе!
— С заботой о вашем зрении: бумага намного безопаснее для глаз, чем яркий экран смартфона.
— Когда мы запустим сервис по доставке еды для PHP разработчиков, вы будете одним из первых в списке на бета-тест (не еды, а сервиса).
— Получить долгожданную телеграмму гораздо приятнее, чем просто сообщение в мессенджере, не так ли?
Все текущие подписчики канала Пятиминутка PHP автоматически переводятся на рассылку телеграмм, следите за PHP новостями в ближайшем отделении почты!
Сегодня была опубликована версия 3.0 пакета spatie/data-transfer-object.
Сам по себе этот пакет, возможно, вам и не пригодится, но версия 3.0 примечательна изменениями в коде, который теперь по максимуму использует возможности PHP 8.
При переходе от версии 2 на версию 3 из пакета была удалена вся функциональность по проверке типов в Runtime в пользу системы типов и атрибутов PHP 8.
Рекомендую заглянуть в исходный код в поисках вдохновения и идей относительно продвинутого использования PHP 8.
http://amp.gs/crpJ
Сам по себе этот пакет, возможно, вам и не пригодится, но версия 3.0 примечательна изменениями в коде, который теперь по максимуму использует возможности PHP 8.
При переходе от версии 2 на версию 3 из пакета была удалена вся функциональность по проверке типов в Runtime в пользу системы типов и атрибутов PHP 8.
Рекомендую заглянуть в исходный код в поисках вдохновения и идей относительно продвинутого использования PHP 8.
http://amp.gs/crpJ
Несколько интересных подробностей о недавнем взломе git.php.net из подкаста
http://amp.gs/csjK
— Нет обязательного процесса Code Review для каждого коммита в исходники PHP, но ключевые разработчики просматривают поток коммитов
— Реализация новых RFC проходит code review ещё до голосования
— После взлома git.php.net сервер был отключён, способ взлома не понятен
— Переход на GitHub по хорошему должен был состояться ещё несколько лет назад. Этот случай форсировал переход
— На GitHub включена обязательная двухфакторная аутентификация
— На первом этапе не планируется использовать Pull Requests, чтобы не вносить слишком много изменений в рабочий процесс за раз
— Большинство контрибьютеров на данный момент не подписывают свои коммиты криптографической подписью, не плохо было бы внедрить этот процесс для всех
— Также планируется добавить автоматизированные проверки исходного кода, в первую очередь на использование небезопасных функций типа eval и появление base64 фрагментов в коде
— Полностью контролировать свою инфраструктуру раньше казалось хорошей идеей. Но это также требует внимания к обслуживанию, к настройке безопасности. Лучше доверить это профессионалам, в частности вместо поддержки своего git сервера использовать GitHub.
http://amp.gs/csjK
— Нет обязательного процесса Code Review для каждого коммита в исходники PHP, но ключевые разработчики просматривают поток коммитов
— Реализация новых RFC проходит code review ещё до голосования
— После взлома git.php.net сервер был отключён, способ взлома не понятен
— Переход на GitHub по хорошему должен был состояться ещё несколько лет назад. Этот случай форсировал переход
— На GitHub включена обязательная двухфакторная аутентификация
— На первом этапе не планируется использовать Pull Requests, чтобы не вносить слишком много изменений в рабочий процесс за раз
— Большинство контрибьютеров на данный момент не подписывают свои коммиты криптографической подписью, не плохо было бы внедрить этот процесс для всех
— Также планируется добавить автоматизированные проверки исходного кода, в первую очередь на использование небезопасных функций типа eval и появление base64 фрагментов в коде
— Полностью контролировать свою инфраструктуру раньше казалось хорошей идеей. Но это также требует внимания к обслуживанию, к настройке безопасности. Лучше доверить это профессионалам, в частности вместо поддержки своего git сервера использовать GitHub.
php[architect]
About PHP's Compromised Git Commit | php[architect]
PHP internals contributor Sara Golemon answers questions from a panel of php[architect] and PHP Ugly contributors about the recent git compromise that affected the PHP project and what they're doing about it. You can also watch a video of the roundtable with…
Хорошее описание работы Laravel Octane с подробностями и деталями, как происходит управление жизненным циклом приложения - много хаков и нюансов, нельзя так просто взять и отказаться от наследия «PHP умирает на каждом запросе» http://amp.gs/cMie
Порекомендую статью достаточно базового уровня, но при этом с хорошим и последовательным изложением: Laravel sessions vs PHP session
— В чём отличие cookie от сессий в PHP?
— Почему не стоит хранить логин в cookie и почему WordPress это делает?
— Время жизни cookie и время жизни сессии — в чём разница и как контролировать (
— Как Laravel взаимодействует с PHP сессиями через различные «драйвера»?
— Что общего между WordPress и Laravel Cookie Session Driver?
— Принцип «remember me»
http://amp.gs/cbks
— В чём отличие cookie от сессий в PHP?
— Почему не стоит хранить логин в cookie и почему WordPress это делает?
— Время жизни cookie и время жизни сессии — в чём разница и как контролировать (
session.gc\_maxlifetime vs session.cookie\_lifetime)? — Как Laravel взаимодействует с PHP сессиями через различные «драйвера»?
— Что общего между WordPress и Laravel Cookie Session Driver?
— Принцип «remember me»
http://amp.gs/cbks