1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau/* 4*04fd306cSNickeau * This file is part of the Symfony package. 5*04fd306cSNickeau * 6*04fd306cSNickeau * (c) Fabien Potencier <fabien@symfony.com> 7*04fd306cSNickeau * 8*04fd306cSNickeau * For the full copyright and license information, please view the LICENSE 9*04fd306cSNickeau * file that was distributed with this source code. 10*04fd306cSNickeau */ 11*04fd306cSNickeau 12*04fd306cSNickeaunamespace Symfony\Component\Process; 13*04fd306cSNickeau 14*04fd306cSNickeauuse Symfony\Component\Process\Exception\InvalidArgumentException; 15*04fd306cSNickeau 16*04fd306cSNickeau/** 17*04fd306cSNickeau * ProcessUtils is a bunch of utility methods. 18*04fd306cSNickeau * 19*04fd306cSNickeau * This class contains static methods only and is not meant to be instantiated. 20*04fd306cSNickeau * 21*04fd306cSNickeau * @author Martin Hasoň <martin.hason@gmail.com> 22*04fd306cSNickeau */ 23*04fd306cSNickeauclass ProcessUtils 24*04fd306cSNickeau{ 25*04fd306cSNickeau /** 26*04fd306cSNickeau * This class should not be instantiated. 27*04fd306cSNickeau */ 28*04fd306cSNickeau private function __construct() 29*04fd306cSNickeau { 30*04fd306cSNickeau } 31*04fd306cSNickeau 32*04fd306cSNickeau /** 33*04fd306cSNickeau * Validates and normalizes a Process input. 34*04fd306cSNickeau * 35*04fd306cSNickeau * @param string $caller The name of method call that validates the input 36*04fd306cSNickeau * @param mixed $input The input to validate 37*04fd306cSNickeau * 38*04fd306cSNickeau * @return mixed 39*04fd306cSNickeau * 40*04fd306cSNickeau * @throws InvalidArgumentException In case the input is not valid 41*04fd306cSNickeau */ 42*04fd306cSNickeau public static function validateInput(string $caller, $input) 43*04fd306cSNickeau { 44*04fd306cSNickeau if (null !== $input) { 45*04fd306cSNickeau if (\is_resource($input)) { 46*04fd306cSNickeau return $input; 47*04fd306cSNickeau } 48*04fd306cSNickeau if (\is_string($input)) { 49*04fd306cSNickeau return $input; 50*04fd306cSNickeau } 51*04fd306cSNickeau if (is_scalar($input)) { 52*04fd306cSNickeau return (string) $input; 53*04fd306cSNickeau } 54*04fd306cSNickeau if ($input instanceof Process) { 55*04fd306cSNickeau return $input->getIterator($input::ITER_SKIP_ERR); 56*04fd306cSNickeau } 57*04fd306cSNickeau if ($input instanceof \Iterator) { 58*04fd306cSNickeau return $input; 59*04fd306cSNickeau } 60*04fd306cSNickeau if ($input instanceof \Traversable) { 61*04fd306cSNickeau return new \IteratorIterator($input); 62*04fd306cSNickeau } 63*04fd306cSNickeau 64*04fd306cSNickeau throw new InvalidArgumentException(sprintf('"%s" only accepts strings, Traversable objects or stream resources.', $caller)); 65*04fd306cSNickeau } 66*04fd306cSNickeau 67*04fd306cSNickeau return $input; 68*04fd306cSNickeau } 69*04fd306cSNickeau} 70