РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1051 of 1361 menu

Класс Process

Класс Process запускает внешние команды из PHP-кода и позволяет управлять их выполнением. Первым параметром передаётся массив с именем программы и её аргументами. Класс предоставляет методы для синхронного и асинхронного запуска, получения вывода, кода возврата и работы с ошибками.

Синтаксис

<?php use SymfonyComponentProcessProcess; $process = new Process([command, arg1, arg2]); ?>

Пример

Давайте выполним команду ls и получим её вывод:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentProcessProcess; class ProcessController extends AbstractController { #[Route('/process', name: 'process_index')] public function index(): Response { $process = new Process(['ls', '-la']); $process->run(); return new Response($process->getOutput()); } } ?>

Результат выполнения кода:

"total 8"

Пример

Давайте проверим успешность выполнения команды с помощью метода isSuccessful:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentProcessProcess; class ProcessController extends AbstractController { #[Route('/process-check', name: 'process_check')] public function check(): Response { $process = new Process(['php', '-v']); $process->run(); if ($process->isSuccessful()) { return new Response('success'); } return new Response('fail'); } } ?>

Результат выполнения кода:

"success"

Пример

Давайте запустим команду асинхронно с помощью метода start и дождёмся её завершения через wait:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentProcessProcess; class ProcessController extends AbstractController { #[Route('/process-async', name: 'process_async')] public function async(): Response { $process = new Process(['echo', 'hello']); $process->start(); while ($process->isRunning()) { // waiting } $process->wait(); return new Response($process->getOutput()); } } ?>

Результат выполнения кода:

"hello"

Пример

Давайте получим вывод ошибок через метод getErrorOutput:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentProcessProcess; class ProcessController extends AbstractController { #[Route('/process-error', name: 'process_error')] public function error(): Response { $process = new Process(['ls', '/nonexistent-path-abcde']); $process->run(); return new Response($process->getErrorOutput()); } } ?>

Результат выполнения кода:

"ls: cannot access '/nonexistent-path-abcde': No such file or directory"

Пример

Давайте создадим процесс из строки команды с помощью статического метода fromShellCommandline:

<?php namespace AppController; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentProcessProcess; class ProcessController extends AbstractController { #[Route('/process-shell', name: 'process_shell')] public function shell(): Response { $process = Process::fromShellCommandline('echo "abcde"'); $process->run(); return new Response($process->getOutput()); } } ?>

Результат выполнения кода:

"abcde"

Смотрите также

  • метод run,
    который синхронно запускает процесс
  • метод mustRun,
    который запускает процесс и бросает исключение при ошибке
  • метод getOutput,
    который возвращает стандартный вывод процесса
  • метод getErrorOutput,
    который возвращает вывод ошибок процесса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить