Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. DefaultPhpProcess.php

function DefaultPhpProcess::runProcess

Handles creating the child process and returning the STDOUT and STDERR.

@psalm-return array{stdout: string, stderr: string}

Throws

Exception

PhpProcessException

1 call to DefaultPhpProcess::runProcess()
DefaultPhpProcess::runJob in vendor/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php
Runs a single job (PHP code) using a separate PHP process.

File

vendor/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php, line 67

Class

DefaultPhpProcess
@no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit

Namespace

PHPUnit\Util\PHP

Code

protected function runProcess(string $job, array $settings) : array {
    $env = null;
    if ($this->env) {
        $env = $_SERVER ?? [];
        unset($env['argv'], $env['argc']);
        $env = array_merge($env, $this->env);
        foreach ($env as $envKey => $envVar) {
            if (is_array($envVar)) {
                unset($env[$envKey]);
            }
        }
    }
    $pipeSpec = [
        0 => [
            'pipe',
            'r',
        ],
        1 => [
            'pipe',
            'w',
        ],
        2 => [
            'pipe',
            'w',
        ],
    ];
    if ($this->stderrRedirection) {
        $pipeSpec[2] = [
            'redirect',
            1,
        ];
    }
    $process = proc_open($this->getCommand($settings, $this->tempFile), $pipeSpec, $pipes, null, $env);
    if (!is_resource($process)) {
        throw new PhpProcessException('Unable to spawn worker process');
    }
    if ($job) {
        $this->process($pipes[0], $job);
    }
    fclose($pipes[0]);
    $stderr = $stdout = '';
    if (isset($pipes[1])) {
        $stdout = stream_get_contents($pipes[1]);
        fclose($pipes[1]);
    }
    if (isset($pipes[2])) {
        $stderr = stream_get_contents($pipes[2]);
        fclose($pipes[2]);
    }
    proc_close($process);
    $this->cleanup();
    return [
        'stdout' => $stdout,
        'stderr' => $stderr,
    ];
}
RSS feed
Powered by Drupal