You are here

class ProcessUtils in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/process/ProcessUtils.php \Symfony\Component\Process\ProcessUtils

ProcessUtils is a bunch of utility methods.

This class contains static methods only and is not meant to be instantiated.

@author Martin Hasoň <martin.hason@gmail.com>

Hierarchy

Expanded class hierarchy of ProcessUtils

1 file declares its use of ProcessUtils
ProcessUtilsTest.php in vendor/symfony/process/Tests/ProcessUtilsTest.php

File

vendor/symfony/process/ProcessUtils.php, line 23

Namespace

Symfony\Component\Process
View source
class ProcessUtils {

  /**
   * This class should not be instantiated.
   */
  private function __construct() {
  }

  /**
   * Escapes a string to be used as a shell argument.
   *
   * @param string $argument The argument that will be escaped
   *
   * @return string The escaped argument
   */
  public static function escapeArgument($argument) {

    //Fix for PHP bug #43784 escapeshellarg removes % from given string

    //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows

    //@see https://bugs.php.net/bug.php?id=43784

    //@see https://bugs.php.net/bug.php?id=49446
    if ('\\' === DIRECTORY_SEPARATOR) {
      if ('' === $argument) {
        return escapeshellarg($argument);
      }
      $escapedArgument = '';
      $quote = false;
      foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) {
        if ('"' === $part) {
          $escapedArgument .= '\\"';
        }
        elseif (self::isSurroundedBy($part, '%')) {

          // Avoid environment variable expansion
          $escapedArgument .= '^%"' . substr($part, 1, -1) . '"^%';
        }
        else {

          // escape trailing backslash
          if ('\\' === substr($part, -1)) {
            $part .= '\\';
          }
          $quote = true;
          $escapedArgument .= $part;
        }
      }
      if ($quote) {
        $escapedArgument = '"' . $escapedArgument . '"';
      }
      return $escapedArgument;
    }
    return escapeshellarg($argument);
  }

  /**
   * Validates and normalizes a Process input.
   *
   * @param string $caller The name of method call that validates the input
   * @param mixed  $input  The input to validate
   *
   * @return string The validated input
   *
   * @throws InvalidArgumentException In case the input is not valid
   *
   * Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.
   */
  public static function validateInput($caller, $input) {
    if (null !== $input) {
      if (is_resource($input)) {
        return $input;
      }
      if (is_scalar($input)) {
        return (string) $input;
      }

      // deprecated as of Symfony 2.5, to be removed in 3.0
      if (is_object($input) && method_exists($input, '__toString')) {
        @trigger_error('Passing an object as an input is deprecated since version 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
        return (string) $input;
      }
      throw new InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller));
    }
    return $input;
  }
  private static function isSurroundedBy($arg, $char) {
    return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1];
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ProcessUtils::escapeArgument public static function Escapes a string to be used as a shell argument.
ProcessUtils::isSurroundedBy private static function
ProcessUtils::validateInput public static function Validates and normalizes a Process input.
ProcessUtils::__construct private function This class should not be instantiated.