123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- // +----------------------------------------------------------------------
- // | TopThink [ WE CAN DO IT JUST THINK IT ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2015 http://www.topthink.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: zhangyajun <448901948@qq.com>
- // +----------------------------------------------------------------------
- namespace think\process;
- class Utils
- {
- /**
- * 转义字符串
- * @param string $argument
- * @return string
- */
- public static function escapeArgument($argument)
- {
- if ('' === $argument) {
- return escapeshellarg($argument);
- }
- $escapedArgument = '';
- $quote = false;
- foreach (preg_split('/(")/i', $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;
- }
- /**
- * 验证并进行规范化Process输入。
- * @param string $caller
- * @param mixed $input
- * @return string
- * @throws \InvalidArgumentException
- */
- public static function validateInput($caller, $input)
- {
- if (null !== $input) {
- if (is_resource($input)) {
- return $input;
- }
- if (is_scalar($input)) {
- 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];
- }
- }
|