Ошибка отлова исключения в PHP 7.0+

Столкнулся с интересной ошибкой сегодня. Есть вызов функции. Есть обертка try — catch в ней, а она не срабатывает! Гуглил. Долго думал.. Оказывается в PHP 7.0 и выше, изменилось дерево наследования ошибок на:

Соответственно «всех выше теперь» — Throwable, и если хочется теперь словить «глобальную» ошибку, то блок вызывать нужно:

PHP: определение языка пользователя сайта

В ранние годы, чаще всего определяли языка пользователя на основании его IP. Да и до исх пор так часто делают. И всё чаще ошибаются из-за широкого распространения VPN и всяческих аномайзеров. Поэтом правильнее будет полагаться на стандарт W3C, согласно которому браузер должен передавать на сервер в заголовке HTTP заполненую переменную HTTP_ACCEPT_LANGUAGE. Собстевенно в PHP оно попадает в $_SERVER[‘HTTP_ACCEPT_LANGUAGE’]. Далее остается распрасить переменную с сортировкой по «весам»:

Получаем массив вида:

Установка капчи reCAPTCHA v2 на сайт без отправки формы

Технически задача выглядит так:  на клиенте пользователь нажимает галочку «Я не робот» (описание от Google), по нажатии какойто кнопки — проверяем деймтвитель но ли капча пройдена.

Html (клиент):

PHP (сервер)

SSL routines:ssl3_get_server_certificate:certificate verify failed

Эта ошибка может выходить на некоторых серверах при установце wss соединения WebSocket.

Решение:  отключаем проверку Peer

Многопоточность в PHP

Ну как известно штатно её нет (с). А иногда очень хочется. Предлагаемая пока альтернатива разработчками — функция Fork() которая по сути создает дочерний процесс, куда передает все открытые соединения, значения переменных и т.п. и продолжает в дочернем процессе с того момента с которого процесс в «родителе» начат.  Один нюанс — при завершении дочернего процесса — все соединения закрываются. Обходить этот нюанс можно посылая сигнал posix_kill(posix_getpid(), SIGHUP);  в дочернем процессе в случае нужды его завершить.

Таким образом «эталонная» реализация «многопоточности» в PHP будет выглядеть примерно так:

 

1 4 5 6 7 8 21