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

Breadcrumb

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

class ProcessStream

A stream supporting local processes.

@author Fabien Potencier <fabien@symfony.com> @author Chris Corbyn

@internal

Hierarchy

  • class \Symfony\Component\Mailer\Transport\Smtp\Stream\AbstractStream
    • class \Symfony\Component\Mailer\Transport\Smtp\Stream\ProcessStream extends \Symfony\Component\Mailer\Transport\Smtp\Stream\AbstractStream

Expanded class hierarchy of ProcessStream

1 file declares its use of ProcessStream
SendmailTransport.php in vendor/symfony/mailer/Transport/SendmailTransport.php

File

vendor/symfony/mailer/Transport/Smtp/Stream/ProcessStream.php, line 24

Namespace

Symfony\Component\Mailer\Transport\Smtp\Stream
View source
final class ProcessStream extends AbstractStream {
    private string $command;
    private bool $interactive = false;
    public function setCommand(string $command) : void {
        $this->command = $command;
    }
    public function setInteractive(bool $interactive) : void {
        $this->interactive = $interactive;
    }
    public function initialize() : void {
        $descriptorSpec = [
            0 => [
                'pipe',
                'r',
            ],
            1 => [
                'pipe',
                'w',
            ],
            2 => [
                'pipe',
                '\\' === \DIRECTORY_SEPARATOR ? 'a' : 'w',
            ],
        ];
        $pipes = [];
        $this->stream = proc_open($this->command, $descriptorSpec, $pipes);
        stream_set_blocking($pipes[2], false);
        if ($err = stream_get_contents($pipes[2])) {
            throw new TransportException('Process could not be started: ' . $err);
        }
        $this->in =& $pipes[0];
        $this->out =& $pipes[1];
        $this->err =& $pipes[2];
    }
    public function terminate() : void {
        if (null !== $this->stream) {
            fclose($this->in);
            $out = stream_get_contents($this->out);
            fclose($this->out);
            $err = stream_get_contents($this->err);
            fclose($this->err);
            if (0 !== ($exitCode = proc_close($this->stream))) {
                $errorMessage = 'Process failed with exit code ' . $exitCode . ': ' . $out . $err;
            }
        }
        parent::terminate();
        if (!$this->interactive && isset($errorMessage)) {
            throw new TransportException($errorMessage);
        }
    }
    protected function getReadConnectionDescription() : string {
        return 'process ' . $this->command;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
AbstractStream::$debug private property
AbstractStream::$err protected property
AbstractStream::$in protected property @var resource|null
AbstractStream::$out protected property @var resource|null
AbstractStream::$stream protected property @var resource|null
AbstractStream::flush public function Flushes the contents of the stream (empty it) and set the internal pointer to the beginning.
AbstractStream::getDebug public function
AbstractStream::readLine public function
AbstractStream::replace public static function
AbstractStream::write public function
ProcessStream::$command private property
ProcessStream::$interactive private property
ProcessStream::getReadConnectionDescription protected function Overrides AbstractStream::getReadConnectionDescription
ProcessStream::initialize public function Performs any initialization needed. Overrides AbstractStream::initialize
ProcessStream::setCommand public function
ProcessStream::setInteractive public function
ProcessStream::terminate public function Overrides AbstractStream::terminate
RSS feed
Powered by Drupal