Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Write.php
Go to the documentation of this file.
1 <?php
8 
11 
12 class Write extends Read implements WriteInterface
13 {
19  protected $permissions = 0777;
20 
30  public function __construct(
33  $path,
34  $createPermissions = null,
35  ?PathValidatorInterface $pathValidator = null
36  ) {
37  parent::__construct($fileFactory, $driver, $path, $pathValidator);
38  if (null !== $createPermissions) {
39  $this->permissions = $createPermissions;
40  }
41  }
42 
50  protected function assertWritable($path)
51  {
52  if ($this->isWritable($path) === false) {
53  $path = (!$this->driver->isFile($path))
54  ? $this->getAbsolutePath($this->path, $path)
55  : $this->getAbsolutePath($path);
56  throw new FileSystemException(new \Magento\Framework\Phrase('The path "%1" is not writable.', [$path]));
57  }
58  }
59 
67  protected function assertIsFile($path)
68  {
69  clearstatcache();
70  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
71  if (!$this->driver->isFile($absolutePath)) {
72  throw new FileSystemException(
73  new \Magento\Framework\Phrase('The "%1" file doesn\'t exist.', [$absolutePath])
74  );
75  }
76  }
77 
86  public function create($path = null)
87  {
88  $this->validatePath($path);
89  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
90  if ($this->driver->isDirectory($absolutePath)) {
91  return true;
92  }
93  return $this->driver->createDirectory($absolutePath, $this->permissions);
94  }
95 
106  public function renameFile($path, $newPath, WriteInterface $targetDirectory = null)
107  {
108  $this->validatePath($path);
109  $this->assertIsFile($path);
110  $targetDirectory = $targetDirectory ?: $this;
111  if (!$targetDirectory->isExist($this->driver->getParentDirectory($newPath))) {
112  $targetDirectory->create($this->driver->getParentDirectory($newPath));
113  }
114  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
115  $absoluteNewPath = $targetDirectory->getAbsolutePath($newPath);
116  return $this->driver->rename($absolutePath, $absoluteNewPath, $targetDirectory->driver);
117  }
118 
129  public function copyFile($path, $destination, WriteInterface $targetDirectory = null)
130  {
131  $this->validatePath($path);
132  $this->assertIsFile($path);
133 
134  $targetDirectory = $targetDirectory ?: $this;
135  if (!$targetDirectory->isExist($this->driver->getParentDirectory($destination))) {
136  $targetDirectory->create($this->driver->getParentDirectory($destination));
137  }
138  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
139  $absoluteDestination = $targetDirectory->getAbsolutePath($destination);
140 
141  return $this->driver->copy($absolutePath, $absoluteDestination, $targetDirectory->driver);
142  }
143 
154  public function createSymlink($path, $destination, WriteInterface $targetDirectory = null)
155  {
156  $this->validatePath($path);
157  $targetDirectory = $targetDirectory ?: $this;
158  $parentDirectory = $this->driver->getParentDirectory($destination);
159  if (!$targetDirectory->isExist($parentDirectory)) {
160  $targetDirectory->create($parentDirectory);
161  }
162  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
163  $absoluteDestination = $targetDirectory->getAbsolutePath($destination);
164 
165  return $this->driver->symlink($absolutePath, $absoluteDestination, $targetDirectory->driver);
166  }
167 
176  public function delete($path = null)
177  {
178  $this->validatePath($path);
179  if (!$this->isExist($path)) {
180  return true;
181  }
182  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
183  if ($this->driver->isFile($absolutePath)) {
184  $this->driver->deleteFile($absolutePath);
185  } else {
186  $this->driver->deleteDirectory($absolutePath);
187  }
188  return true;
189  }
190 
201  {
202  $this->validatePath($path);
203  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
204 
205  return $this->driver->changePermissions($absolutePath, $permissions);
206  }
207 
218  public function changePermissionsRecursively($path, $dirPermissions, $filePermissions)
219  {
220  $this->validatePath($path);
221  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
222 
223  return $this->driver->changePermissionsRecursively($absolutePath, $dirPermissions, $filePermissions);
224  }
225 
235  public function touch($path, $modificationTime = null)
236  {
237  $this->validatePath($path);
238 
239  $folder = $this->driver->getParentDirectory($path);
240  $this->create($folder);
241  $this->assertWritable($folder);
242  return $this->driver->touch($this->driver->getAbsolutePath($this->path, $path), $modificationTime);
243  }
244 
253  public function isWritable($path = null)
254  {
255  $this->validatePath($path);
256 
257  return $this->driver->isWritable($this->driver->getAbsolutePath($this->path, $path));
258  }
259 
269  public function openFile($path, $mode = 'w')
270  {
271  $this->validatePath($path);
272  $folder = dirname($path);
273  $this->create($folder);
274  $this->assertWritable($this->isExist($path) ? $path : $folder);
275  $absolutePath = $this->driver->getAbsolutePath($this->path, $path);
276 
277  return $this->fileFactory->create($absolutePath, $this->driver, $mode);
278  }
279 
289  public function writeFile($path, $content, $mode = 'w+')
290  {
291  return $this->openFile($path, $mode)->write($content);
292  }
293 
299  public function getDriver()
300  {
301  return $this->driver;
302  }
303 }
changePermissionsRecursively($path, $dirPermissions, $filePermissions)
Definition: Write.php:218
createSymlink($path, $destination, WriteInterface $targetDirectory=null)
Definition: Write.php:154
touch($path, $modificationTime=null)
Definition: Write.php:235
renameFile($path, $newPath, WriteInterface $targetDirectory=null)
Definition: Write.php:106
__construct(\Magento\Framework\Filesystem\File\WriteFactory $fileFactory, \Magento\Framework\Filesystem\DriverInterface $driver, $path, $createPermissions=null, ?PathValidatorInterface $pathValidator=null)
Definition: Write.php:30
validatePath(?string $path, ?string $scheme=null, bool $absolutePath=false)
Definition: Read.php:71
if($exist=($block->getProductCollection() && $block->getProductCollection() ->getSize())) $mode
Definition: grid.phtml:15
getAbsolutePath($path=null, $scheme=null)
Definition: Read.php:108
changePermissions($path, $permissions)
Definition: Write.php:200
writeFile($path, $content, $mode='w+')
Definition: Write.php:289
copyFile($path, $destination, WriteInterface $targetDirectory=null)
Definition: Write.php:129