<rmcreative>

RSS

Все заметки с тегом «PHP»

Можно уточнить:

  1. PHP Russia 2022

    14 ноября 2022

    В этом году конференцию сделать было особенно сложно, но мы справились. Получилось не так, как планировали. Наверное, немного лучше:

    1. Два зала и два дня вместе с Highload.
    2. Несколько раз сменившийся набор тем и докладчиков. Не всё на 100% гладко, но очень и очень достойно. Темы действительно интересные и практически все очень хорошо проработаны.

    Приходите послушать 24 и 25 ноября

    p.s. промокод на скидку 7% phpspeakers

    Комментировать
  2. PER Coding Style 1.0.0

    20 июня 2022

    Что такое PER я уже писал. Если коротко, то это "живой" стандарт, который применяется для постоянно меняющихся тем, на которые всё-таки стандарт какой-то нужен.

    Недавно мы тегнули первую версию PER Coding Style. Изначально я был редактором, но из-за февральских событий максимум на что хватило — начать и делать пристальное ревью.

    В итоге сейчас стандарт является, по сути, копией PSR-12 с поправленными описками и ошибками. А вот в master-ветке уже есть изменения, учитывающие свежие конструкции PHP, которые войдут во вторую версию.

    2 комментария
  3. Официально начата работа над Coding style PER

    31 января 2022

    Coding Style PER, который заменит PSR-12, официально одобрен PHP-FIG. Работы начаты в https://github.com/php-fig/per-coding-style.

    Это первый документ группы согласно PER, то есть «живой» стандарт. Его не будут заменить каждый раз при добавлении нового синтаксиса в PHP. Вместо этого пакет правки будут релизиться по SemVer.

    Комментировать
  4. PHP 8.1

    26 ноября 2021

    Ура! Релизнулся.

    Комментировать
  5. PHP: превращаем ошибку в исключение локально

    20 февраля 2021

    В PHP часто для обработки ошибки в функциях вроде dns_get_record() используют оператор @:

    $result = @dns_get_record($hostname, DNS_A);
    if (!$result) {
        throw new \RuntimeException('Unable to get record.');
    }

    Проблем несколько:

    • Использование @ не очень хорошо сказывается на производительности
    • Часто подавляется слишком много разных ошибок.

    Есть способ лучше:

    set_error_handler(
        static function (int $errorNumber, string $errorString) use ($hostname): ?bool {
             throw new \RuntimeException(
                 sprintf('Unable to get record: "%s". ', $hostname) . $errorString,
                  $errorNumber
             );
        }
    );
     
    $result = dns_get_record($hostname, DNS_A);
     
    restore_error_handler();
    2 комментария
  6. PHP, OpenSSL и ошибка certificate verify failed

    17 февраля 2021

    При попытке использования OpenSSL на некоторых системах возникает ошибка:

    stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

    Исправляется довольно просто:

    1. Сливаем https://curl.haxx.se/ca/cacert.pem.
    2. В php.ini добавляем openssl.cafile="/путь/до/cacert.pem".

    Так же точно исправляется ошибка "cURL error 60".

    Вроде просто, но почему-то подавляющее большинство советов на эту тему, в том числе большинство ответов на StackOverflow, говорят "отключить проверку", что, конечно же, приводит к возможности атаки man in the middle.

    Комментировать
  7. PHP 8

    30 ноября 2020

    На днях релизнулся PHP 8. Он не так богат на полезные возможности, как PHP 7.0 или PHP 7.4, но определённо хорош как производительностью с новым JIT, так и тысячей приятных мелочей.

    О новых возможностях коротко можно почитать на специальной странице, которую мы подготовили вместе Романом Пронским, JetBrains и сообществом.

    В честь выхода мы провели стрим с участием двух видных разработчиков этого релиза: Дмитрия Стогова и Никиты Попова.

    Запись можно посмотреть на YouTube.

    По поводу стабильности могу сказать, что, определённо можно пробовать переводить на восьмёрку продакшн. Большинство серьёзных багов отловили в бетах. Yii 1, Yii 2 и Yii 3 к PHP 8 готовы.

    4 комментария
  8. Windows Terminal и пара разных версий PHP в отдельных вкладках

    24 октября 2020

    Недавно у меня умер SSD и заставил настраивать заново всё окружение. Опробованные Linux по тем или иным причинам не зашли (но я ещё попробую, может пропустил что). Вернулся на Windows 10.

    Для тестов фреймворка мне необходимы несколько версий PHP и в этот раз удалось сделать удобно. В Windows Terminal у меня теперь несколько профилей с git bash и в каждом отдельная версия PHP.

    Делается так:

    1. Берём сам PHP, распаковываем в отдельные директории. Например, C:\php74, C:\php80.
    2. Добавляем профили:
    {
        "guid": "{e084a08a-ad94-499d-9573-1d5904b4e9a0}",
        "name": "Git Bash with PHP 8",
        "suppressApplicationTitle": true,
        "icon" : "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
        "commandline": "cmd.exe /C \"SET PATH=%PATH%;C:\\php80\\&& \"%PROGRAMFILES%\\Git\\bin\\bash.exe\" -login -i -l\"",
        "startingDirectory": "D:\\src\\"
     
    },
    {
        "guid": "{08a7817f-8812-4eb0-b4b7-a4939fc9d14a}",
        "name": "Git Bash with PHP 7",
        "suppressApplicationTitle": true,
        "icon" : "%PROGRAMFILES%/Git/mingw64/share/git/git-for-windows.ico",
        "commandline": "cmd.exe /C \"SET PATH=%PATH%;C:\\php74\\&& \"%PROGRAMFILES%\\Git\\bin\\bash.exe\" -login -i -l\"",
        "startingDirectory": "D:\\src\\"
     
    }
    7 комментариев
  9. PHP vs Go

    25 августа 2020

    15 августа записали видео где попытались разобраться, как пишут приложения на PHP и Go. Участники кроме меня:

    • Елена Граховац - руководитель программного комитета конференции GolangConf 2019, экс-ведущая подкаста GolangShow.
    • Илья Шихалеев - соорганизатор go-митапов в Йошкар-Оле, Казани и онлайне, по работе также пишет на PHP.
    • Руслан Ханов - соорганизует PHP-митапы http://symcode.ru в Петербурге.
    • Дискуссию вёл Антон Морев (Wormsoft).

    Смотрим

    Комментировать
  10. PHP friendly классы

    5 августа 2020

    Дружественные классы видят как минимум protected-методы друг друга. В PHP реализуются так:

    <?php
     
    abstract class Base
    {
        protected function doit()
        {
            throw new \RuntimeException('Not implemented');
        }
    }
     
    class Closed extends Base
    {
        protected function doit()
        {
            echo 'done!';
        }
    }
     
    class Opener extends Base
    {
        public function execute(Closed $closed)
        {
            $closed->doit();
        }
    }
     
    $closed = new Closed();
    $opener = new Opener();
     
     
    $opener->execute($closed);

    Здесь можно запустить. Если что, это не баг.

    Как это использовать? В Yii 3 мы так закрываем DI-контейнер и диспетчер событий чтобы в рантайме они были только для чтения, но, при этом их можно было сконфигурировать специальными friendly-конфигураторами на этапе инициализации приложения.

    Сделано это чтобы не дать стрелять себе в ногу, в этом плюс. Минус в том, что про такую фичу PHP мало кто знает и это вызывает вопросы:

    10 комментариев