|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace think\process; |
|
|
|
|
|
class Utils |
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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, '%')) { |
|
|
|
|
|
$escapedArgument .= '^%"' . substr($part, 1, -1) . '"^%'; |
|
|
} else { |
|
|
|
|
|
if ('\\' === substr($part, -1)) { |
|
|
$part .= '\\'; |
|
|
} |
|
|
$quote = true; |
|
|
$escapedArgument .= $part; |
|
|
} |
|
|
} |
|
|
if ($quote) { |
|
|
$escapedArgument = '"' . $escapedArgument . '"'; |
|
|
} |
|
|
return $escapedArgument; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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]; |
|
|
} |
|
|
|
|
|
} |
|
|
|