Новое в Symfony 6.4: Обработчик подпроцессов

Источник: «New in Symfony 6.4: Subprocess Handler»
В Symfony 6.4 реализована новая возможность запуска подпроцессов с той же конфигурацией, что и их родительские PHP-процессы.

Рассмотрим следующую консольную команду Symfony:

use Symfony\Component\Process\Process;
// ...

class MyCommand extends Command
{
// ...

protected function execute(InputInterface $input, OutputInterface $output): int
{
$subProcess = new Process(['bin/console', 'cache:pool:prune']);

// ...
}
}

Если выполнить эту команду следующим образом:

php -d memory_limit=-1 bin/console app:my-command

Каким будет лимит памяти команды cache:pool:prune, запущенной внутри app:my-command? Он не будет равен -1. Причина в том, что подпроцессы в PHP не наследуют конфигурацию своих родительских процессов. Вместо этого они используют конфигурацию по умолчанию, заданную в соответствующих php.ini файлах.

В Symfony 6.4 для решения этой проблемы мы вводим новый класс PhpSubprocess. Если вам необходимо запустить подпроцесс с той же конфигурацией PHP, что и родительский процесс, используйте PhpSubprocess вместо Process для запуска этого подпроцесса:

use Symfony\Component\Process\PhpSubprocess;
// ...

class MyCommand extends Command
{
// ...

protected function execute(InputInterface $input, OutputInterface $output): int
{
// этот подпроцесс унаследует всю конфигурацию родительского процесса
$subProcess = new PhpSubprocess(['bin/console', 'cache:pool:prune']);

// ...
}
}

Дополнительные материалы

Предыдущая Статья

Новая CSS функция light-dark() для переключения цвета темы

Следующая Статья

Руководство по Soft Delete в Laravel