![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/knplabs/gaufrette/src/Gaufrette/Adapter/ |
<?php namespace Gaufrette\Adapter; use Gaufrette\Util; use Gaufrette\Adapter; use Gaufrette\Stream; /** * Adapter for the local filesystem. * * @author Antoine Hérault <[email protected]> * @author Leszek Prabucki <[email protected]> */ class Local implements Adapter, StreamFactory, ChecksumCalculator, SizeCalculator, MimeTypeProvider { protected $directory; private $create; private $mode; /** * @param string $directory Directory where the filesystem is located * @param bool $create Whether to create the directory if it does not * exist (default FALSE) * @param int $mode Mode for mkdir * * @throws \RuntimeException if the specified directory does not exist and * could not be created */ public function __construct($directory, $create = false, $mode = 0777) { $this->directory = Util\Path::normalize($directory); if (is_link($this->directory)) { $this->directory = realpath($this->directory); } $this->create = $create; $this->mode = $mode; } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function read($key) { if ($this->isDirectory($key)) { return false; } return file_get_contents($this->computePath($key)); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function write($key, $content) { $path = $this->computePath($key); $this->ensureDirectoryExists(\Gaufrette\Util\Path::dirname($path), true); return file_put_contents($path, $content); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function rename($sourceKey, $targetKey) { $targetPath = $this->computePath($targetKey); $this->ensureDirectoryExists(\Gaufrette\Util\Path::dirname($targetPath), true); return rename($this->computePath($sourceKey), $targetPath); } /** * {@inheritdoc} */ public function exists($key) { return is_file($this->computePath($key)); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function keys() { $this->ensureDirectoryExists($this->directory, $this->create); try { $files = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $this->directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS ), \RecursiveIteratorIterator::CHILD_FIRST ); } catch (\Exception $e) { $files = new \EmptyIterator(); } $keys = []; foreach ($files as $file) { $keys[] = $this->computeKey($file); } sort($keys); return $keys; } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function mtime($key) { return filemtime($this->computePath($key)); } /** * {@inheritdoc} * * Can also delete a directory recursively when the given $key matches a * directory. */ public function delete($key) { if ($this->isDirectory($key)) { return $this->deleteDirectory($this->computePath($key)); } elseif ($this->exists($key)) { return unlink($this->computePath($key)); } return false; } /** * @param string $key * * @return bool * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function isDirectory($key) { return is_dir($this->computePath($key)); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function createStream($key) { return new Stream\Local($this->computePath($key), $this->mode); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function checksum($key) { return Util\Checksum::fromFile($this->computePath($key)); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function size($key) { return Util\Size::fromFile($this->computePath($key)); } /** * {@inheritdoc} * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function mimeType($key) { $fileInfo = new \finfo(FILEINFO_MIME_TYPE); return $fileInfo->file($this->computePath($key)); } /** * Computes the key from the specified path. * * @param $path * @return string * * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ public function computeKey($path) { $path = $this->normalizePath($path); return ltrim(substr($path, strlen($this->directory)), '/'); } /** * Computes the path from the specified key. * * @param string $key The key which for to compute the path * * @return string A path * * @throws \InvalidArgumentException If the directory already exists * @throws \OutOfBoundsException If the computed path is out of the directory * @throws \RuntimeException If directory does not exists and cannot be created */ protected function computePath($key) { $this->ensureDirectoryExists($this->directory, $this->create); return $this->normalizePath($this->directory . '/' . $key); } /** * Normalizes the given path. * * @param string $path * * @return string * @throws \OutOfBoundsException If the computed path is out of the * directory */ protected function normalizePath($path) { $path = Util\Path::normalize($path); if (0 !== strpos($path, $this->directory)) { throw new \OutOfBoundsException(sprintf('The path "%s" is out of the filesystem.', $path)); } return $path; } /** * Ensures the specified directory exists, creates it if it does not. * * @param string $directory Path of the directory to test * @param bool $create Whether to create the directory if it does * not exist * * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory does not exists and could not * be created */ protected function ensureDirectoryExists($directory, $create = false) { if (!is_dir($directory)) { if (!$create) { throw new \RuntimeException(sprintf('The directory "%s" does not exist.', $directory)); } $this->createDirectory($directory); } } /** * Creates the specified directory and its parents. * * @param string $directory Path of the directory to create * * @throws \InvalidArgumentException if the directory already exists * @throws \RuntimeException if the directory could not be created */ protected function createDirectory($directory) { if (!@mkdir($directory, $this->mode, true) && !is_dir($directory)) { throw new \RuntimeException(sprintf('The directory \'%s\' could not be created.', $directory)); } } /** * @param string The directory's path to delete * * @throws \InvalidArgumentException When attempting to delete the root * directory of this adapter. * * @return bool Wheter the operation succeeded or not */ private function deleteDirectory($directory) { if ($this->directory === $directory) { throw new \InvalidArgumentException( sprintf('Impossible to delete the root directory of this Local adapter ("%s").', $directory) ); } $status = true; if (file_exists($directory)) { $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS ), \RecursiveIteratorIterator::CHILD_FIRST ); foreach ($iterator as $item) { if ($item->isDir()) { $status = $status && rmdir(strval($item)); } else { $status = $status && unlink(strval($item)); } } $status = $status && rmdir($directory); } return $status; } }