PHP-BE1
312 subscribers
344 photos
11 videos
19 files
625 links
Канал по PHP, полезный и интересный контент для всех уровней.
По вопросам сотрудничества @cyberJohnny
Download Telegram
Релиз PHP 8.4.8 и 8.3.22
https://www.php.net/ChangeLog-8.php

@php_be1
Сегодня PHP отмечает своё 30-летие.

@php_be1
This media is not supported in your browser
VIEW IN TELEGRAM
Релиз Laravel Nightwatch
Веб-сервис для мониторинга Laravel-приложений. Есть бесплатный план.
https://blog.laravel.com/announcing-laravel-nightwatch

@php_be1
Позавчера Тейлор запустил новый сервис - Laravel Nightwatch (https://nightwatch.laravel.com/).

Это сервис мониторинга работы приложения.

Краткий отзыв по истечении двух дней его использования вместе с анти-спам ботом @KvedeBot:

- Выдаёт общую информацию (есть или нет проблемы), в детали не вдаётся;
- Показывает список реально вызываемых консольных команд. Так, например, я узнал о команде php artisan schedule:finish, которая была вызвана 2'120 раз за это время... И да, эта команда также лимиты жрёт;
- Можно увидеть запросы к БД, но без самих данных - только конструкт;
- От внешних запросов виден лишь адрес без тела запроса;
- По общей статистике использования видим что из 200к бесплатных эвентов за двое суток приложение сожрало 173'596 (87%), из которых 49'009 эвентов - работа с кэшем. Да, эти cache hit, read, write и т.д. тоже считаются.

Таким образом, пришёл к выводу, что это MVP продукта и, с большой долей вероятности, он действительно будет хорош, но - потом. В текущем исполнении Nightwatch, скажем так, публикует хлам из подноготной фреймворка. Моё мнение, он делает это для того, чтобы побыстрее сожрать бесплатные лимиты дабы люди оформляли подписку.

В целом, сервис прикольный, но на полном серьёзе на сервере его использовать ну такое.

@php_be1
💡Совет по Laravel

Строишь URL с динамическими параметрами для HTTP-запроса?
Не нужно вручную склеивать длинную строку!

Используй URI-шаблоны с методом withUrlParameters() — так код станет чище и понятнее при работе с API.

https://laravel.com/docs/12.x/http-client#uri-templates

👉 [|@php_be1]
strlen() vs mb_strlen(): Почему 71% PHP-разработчиков ошибаются

В этой статье разберем, как PHP работает со строками и почему даже простой вызов strlen() может привести к неожиданным результатам. На примере крайне простой задачи "что выведет echo strlen('привет!');" посмотрим, что и как влияет на подсчет длины строки, заглянем внутрь реализации strlen() и развенчаем миф о строках как массивах.

https://habr.com/ru/articles/919192/

👉 [|@php_be1]
Сегодня я покажу вам, как быстро разрулить хаос в проекте с кастомным фреймворком, где нет нормального логирования.

Ситуация: клиент дал старый проект, ошибок — куча, но логов нет вообще. В коде try-catch, а в catch — пусто. Что делать?

Вот мой быстрый чеклист, который спасал не раз:

1. Глобальный обработчик ошибок и исключений

set_error_handler(function ($errno, $errstr, $errfile, $errline) {
error_log("[PHP ERROR] $errstr in $errfile:$errline");
return false;
});

set_exception_handler(function (Throwable $e) {
error_log("[UNCAUGHT EXCEPTION] " . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine());
});

Добавил в index.php, и уже вижу, что именно валится.

2. Простой логгер на каждый чих

Создал файл logger.php:

function log_debug($msg) {
file_put_contents(__DIR__.'/debug.log', date('[Y-m-d H:i:s] ') . $msg . PHP_EOL, FILE_APPEND);
}

В нужных местах пишу log_debug('что-то случилось');. Дёшево и сердито, зато работает.

3. Прокинул заголовки и запросы

В самых первых строках запроса:

log_debug("REQUEST: " . $_SERVER['REQUEST_METHOD'] . ' ' . $_SERVER['REQUEST_URI']);
log_debug("HEADERS: " . json_encode(getallheaders()));
log_debug("POST: " . json_encode($_POST));

Теперь видно, с чем именно клиент ломает мой старый код.

Не всегда есть время подтягивать Monolog и делать всё красиво. Иногда нужно быстро найти, где горит — и потушить. А уже потом наводить красоту.

А вы как действуете в таких ситуациях? Есть свои приёмы?

👉 [|@php_be1]
👉 [|@php_be1]