123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Filesystem\Io;
- /**
- * Install and upgrade client abstract class
- */
- abstract class AbstractIo implements IoInterface
- {
- /**
- * If this variable is set to true, our library will be able to automaticaly
- * create non-existant directories
- *
- * @var bool
- */
- protected $_allowCreateFolders = false;
- /**
- * Allow automaticaly create non-existant directories
- *
- * @param bool $flag
- * @return $this
- */
- public function setAllowCreateFolders($flag)
- {
- $this->_allowCreateFolders = (bool)$flag;
- return $this;
- }
- /**
- * Open a connection
- *
- * @param array $args
- * @return false
- */
- public function open(array $args = [])
- {
- return false;
- }
- /**
- * @return string
- */
- public function dirsep()
- {
- return '/';
- }
- /**
- * @param string $path
- * @return string
- * @SuppressWarnings(PHPMD.CyclomaticComplexity)
- */
- public function getCleanPath($path)
- {
- if (empty($path)) {
- return './';
- }
- $path = trim(preg_replace("/\\\\/", "/", (string)$path));
- if (!preg_match("/(\.\w{1,4})$/", $path) && !preg_match("/\?[^\\/]+$/", $path) && !preg_match("/\\/$/", $path)
- ) {
- $path .= '/';
- }
- $matches = [];
- $pattern = "/^(\\/|\w:\\/|https?:\\/\\/[^\\/]+\\/)?(.*)$/i";
- preg_match_all($pattern, $path, $matches, PREG_SET_ORDER);
- $pathTokR = $matches[0][1];
- $pathTokP = $matches[0][2];
- $pathTokP = preg_replace(["/^\\/+/", "/\\/+/"], ["", "/"], $pathTokP);
- $pathParts = explode("/", $pathTokP);
- $realPathParts = [];
- for ($i = 0, $realPathParts = []; $i < count($pathParts); $i++) {
- if ($pathParts[$i] == '.') {
- continue;
- } elseif ($pathParts[$i] == '..') {
- if (isset($realPathParts[0]) && $realPathParts[0] != '..' || $pathTokR != "") {
- array_pop($realPathParts);
- continue;
- }
- }
- $realPathParts[] = $pathParts[$i];
- }
- return $pathTokR . implode('/', $realPathParts);
- }
- /**
- * @param string $haystackPath
- * @param string $needlePath
- * @return bool
- */
- public function allowedPath($haystackPath, $needlePath)
- {
- return strpos($this->getCleanPath($haystackPath), $this->getCleanPath($needlePath)) === 0;
- }
- }
|