From d7cf85d86ae82a698887cfd1a69b160bb05c7bd9 Mon Sep 17 00:00:00 2001 From: Yaroslav Ognevoy Date: Fri, 6 Jun 2025 22:06:50 -0200 Subject: [PATCH 1/2] some fixes --- src/php/uncategorized.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/php/uncategorized.md b/src/php/uncategorized.md index 20f1d7c..516814c 100644 --- a/src/php/uncategorized.md +++ b/src/php/uncategorized.md @@ -39,7 +39,7 @@ Here are the major differences, Анонимные функции реализуются с использованием класса [Closure](http://php.net/manual/ru/class.closure.php). -В пхп замыканием считает любая анонимная функция, которая может использовать переменные из внешнего(для функции) контекста с помощью конструкции use. +В пхп замыканием считается любая анонимная функция, которая может использовать переменные из внешнего(для функции) контекста с помощью конструкции use. ```php $message = 'привет'; @@ -71,8 +71,8 @@ $example(); `composer install` делает следующее: - Проверяет, существует ли `composer.lock` -- если нет, резолвит зависимости и создаёт его -- если `composer.lock` существует, устанавливает версии, указанные в нём +- Если нет, резолвит зависимости и создаёт его +- Если `composer.lock` существует, устанавливает версии, указанные в нём `composer update`: @@ -159,11 +159,11 @@ You can use [register_shutdown_function()](http://www.php.net/register_shutdown_ - [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) - [phan](https://github.com/phan/phan) -## Сегфолт в пхп фпм, как поймать, как отловить трейс +## Сегфолт в php fpm, как поймать, как отловить трейс **Ошибка сегментации** ([англ.](https://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%B3%D0%BB%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA) Segmentation fault, сокр. segfault, жарг. *сегфолт*) — ошибка, возникающая при попытке обращения к недоступным для записи участкам [памяти](https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C) либо при попытке изменить память запрещённым способом -## Список модулей пхп +## Список модулей php `php -m` From 570d9b7fd252d6e1ade2ce9cc843f3665f189d87 Mon Sep 17 00:00:00 2001 From: Yaroslav Ognevoy Date: Fri, 6 Jun 2025 22:40:37 -0200 Subject: [PATCH 2/2] update translation --- src/php/uncategorized.md | 43 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/php/uncategorized.md b/src/php/uncategorized.md index 516814c..53fcff3 100644 --- a/src/php/uncategorized.md +++ b/src/php/uncategorized.md @@ -20,17 +20,18 @@ ## PSR-0 vs PSR-4 -Here are the major differences, +Вот основные различия, -**1.** For example if you define that the `Acme\Foo\` namespace is anchored in `src/`, -- with PSR-0 it means it will look for `Acme\Foo\Bar` in `src/Acme/Foo/Bar.php` -- while in PSR-4 it will look for `Acme\Foo\Bar` in `src/Bar.php(where Bar class is)`. -**2.** PSR-4 does not convert underscores to directory separators -**3.** You would prefer using PSR-4 with namespaces -**4.** PSR-0 will not work even if the class name is different from file name, like considering above example: +**1.** Например, если определяем, что пространство имен `Acme\Foo\` привязано к `src/`, то класс Acme\Foo\Bar будет искаться: +- по PSR-0: в `src/Acme/Foo/Bar.php` +- по PSR-4: в `src/Bar.php` -- `Acme\Foo\Bar` ---> `src/Acme/Foo/Bar.php` (for Bar class) will work -- `Acme\Foo\Bar` ---> `src/Acme/Foo/Bar2.php` (for Bar class) will not work +**2.** PSR-4 не преобразует подчеркивания в разделители каталогов +**3.** Вы предпочтете использовать PSR-4 с пространствами имен +**4.** PSR-0 не будет работать, если имя класса отличается от имени файла, рассматривая вышеприведенный пример: + +- `Acme\Foo\Bar` ---> `src/Acme/Foo/Bar.php` (для класса Bar) будет работать +- `Acme\Foo\Bar` ---> `src/Acme/Foo/Bar2.php` (для класса Bar) не будет работать ## Замыкания и лямда функции @@ -83,10 +84,10 @@ $example(); `composer require somePackage`: -For example if we want to add a dependency with the command line we will simply execute +Выполняем если хотим добавить зависимость через командную строку -- composer.json file will be modified automatically and the new dependency will be added -- the dependency will be downloaded to the project +- `composer.json` будет изменен автоматически, добавится новая зависимость +- Зависимость будет загружена в проект - http://php.net/manual/ru/class.splsubject.php ### Варианты ограничений версий для composer.json @@ -145,7 +146,7 @@ session.save_path = «tcp://192.1680.10:11211, tcp://192.168.0.20:11211» ## Как выполнить код после exit? -You can use [register_shutdown_function()](http://www.php.net/register_shutdown_function) to set a callback function which will be executed when PHP exits. +Мы можем использовать функцию [register_shutdown_function()](http://www.php.net/register_shutdown_function) для задания callback-функции, которая будет выполнена при завершении выполнения скрипта PHP. ## Отладка и профилировка @@ -183,7 +184,7 @@ SPL предоставляет ряд стандартных структур д ## declare(strict_types=1); -By default, PHP will cast values of the wrong type into the expected scalar type if possible. For example, a function that is given an integer for a parameter that expects a string will get a variable of type string. +По умолчанию PHP приводит значения неподходящего типа к ожидаемому скалярному типу, где это возможно. Например, если функция получает в качестве аргумента целое число, тогда как ожидается строка, это значение будет приведено к строковому типу. В случае включенного строгого режима будут фаталы при несовпадении типов. Строгий режим действует ТОЛЬКО внутри того файла, где он был объявлен. @@ -297,25 +298,25 @@ received signal 15 ## Получить тело HTTP запроса в PHP -To access the entity body of a POST or PUT request (or any other HTTP method): +Для получения тела запроса при использовании POST, PUT или любого другого метода: ```php $entityBody = file_get_contents('php://input'); ``` -Also, the `STDIN` constant is an already-open stream to `php://input`, so you can alternatively do: +Альтернативно, вместо `php://input` можно использовать уже открытый поток с помощью константы `STDIN`: ```php $entityBody = stream_get_contents(STDIN); ``` -From the [PHP manual entry on I/O streams*docs*](http://php.net/manual/en/wrappers.php.php): +Согласно официальной документации [PHP о потоках ввода/вывода](http://php.net/manual/en/wrappers.php.php): -> *php://input* is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to use *php://input* instead of `$HTTP_RAW_POST_DATA` as it does not depend on special php.ini directives. Moreover, for those cases where`$HTTP_RAW_POST_DATA` is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. *php://input* is not available with enctype="multipart/form-data". +> `php://input` предоставляет доступ только для чтения к сырому телу запроса. В случае POST-запроса предпочтительнее использовать `php://input` вместо устаревшего `$HTTP_RAW_POST_DATA`, так как он не зависит от дополнительных директив в `php.ini`. Кроме того, если переменная `$HTTP_RAW_POST_DATA` не инициализируется по умолчанию, `php://input` предлагает более экономичный с точки зрения потребления памяти способ работы с телом запроса. Обратите внимание, что `php://input` недоступен, при использовании enctype="multipart/form-data". -Specifically you'll want to note that the `php://input` stream, regardless of how you access it in a web SAPI, *is not seekable*. This means that it can only be read once. If you're working in an environment where large HTTP entity bodies are routinely uploaded you may wish to maintain the input in its stream form (rather than buffering it like the first example above). +Поток `php://input` (независимо от способа обращения к нему в рамках web SAPI) — это неперематываемый (non-seekable) поток. Это означает, что он может быть прочитан только один раз. Если вы работаете в окружении, где часто загружаются большие тела HTTP-запросов, рекомендуется сохранить поток в его исходной форме (в виде stream ресурса), а не буферизовать его полностью, как это делается в первом примере. -To maintain the stream resource something like this can be helpful: +Для сохранения ресурса потока может быть полезно: ```php