![]() 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/old/vendor/magento/framework/Archive/Helper/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * Helper class that simplifies files stream reading and writing */ namespace Magento\Framework\Archive\Helper; use Magento\Framework\Exception\LocalizedException; class File { /** * Full path to directory where file located * * @var string */ protected $_fileLocation; /** * File name * * @var string */ protected $_fileName; /** * Full path (directory + filename) to file * * @var string */ protected $_filePath; /** * File permissions that will be set if file opened in write mode * * @var int */ protected $_chmod; /** * File handler * * @var resource */ protected $_fileHandler; /** * Whether file has been opened in write mode * * @var bool */ protected $_isInWriteMode; /** * Set file path via constructor * * @param string $filePath */ public function __construct($filePath) { $pathInfo = pathinfo($filePath); $this->_filePath = $filePath; $this->_fileLocation = isset($pathInfo['dirname']) ? $pathInfo['dirname'] : ''; $this->_fileName = isset($pathInfo['basename']) ? $pathInfo['basename'] : ''; } /** * Close file if it's not closed before object destruction */ public function __destruct() { if ($this->_fileHandler) { $this->_close(); } } /** * Open file * * @param string $mode * @param int $chmod * @return void * @throws LocalizedException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function open($mode = 'w+', $chmod = null) { $this->_isInWriteMode = $this->_isWritableMode($mode); if ($this->_isInWriteMode) { if (!is_writable($this->_fileLocation)) { throw new LocalizedException( new \Magento\Framework\Phrase( 'You don\'t have permissions to write to the "%1" file.', [$this->_fileLocation] ) ); } if (is_file($this->_filePath) && !is_writable($this->_filePath)) { throw new LocalizedException( new \Magento\Framework\Phrase( 'You don\'t have the permissions to open the "%1" file for writing access.', [$this->_fileName] ) ); } } if ($this->_isReadableMode($mode) && (!is_file($this->_filePath) || !is_readable($this->_filePath))) { if (!is_file($this->_filePath)) { throw new LocalizedException( new \Magento\Framework\Phrase( 'The "%1" file doesn\'t exist. Verify the file and try again.', [$this->_filePath] ) ); } if (!is_readable($this->_filePath)) { throw new LocalizedException( new \Magento\Framework\Phrase( 'You don\'t have permissions to read the "%1" file.', [$this->_filePath] ) ); } } $this->_open($mode); $this->_chmod = $chmod; } /** * Write data to file * * @param string $data * @return void */ public function write($data) { $this->_checkFileOpened(); $this->_write($data); } /** * Read data from file * * @param int $length * @return string|boolean */ public function read($length = 4096) { $data = false; $this->_checkFileOpened(); if ($length > 0) { $data = $this->_read($length); } return $data; } /** * Check whether end of file reached * * @return boolean */ public function eof() { $this->_checkFileOpened(); return $this->_eof(); } /** * Close file * * @return void */ public function close() { $this->_checkFileOpened(); $this->_close(); $this->_fileHandler = false; if ($this->_isInWriteMode && isset($this->_chmod)) { @chmod($this->_filePath, $this->_chmod); } } /** * Implementation of file opening * * @param string $mode * @return void * @throws LocalizedException */ protected function _open($mode) { $this->_fileHandler = @fopen($this->_filePath, $mode); if (false === $this->_fileHandler) { throw new LocalizedException( new \Magento\Framework\Phrase('The "%1" file failed to open.', [$this->_filePath]) ); } } /** * Implementation of writing data to file * * @param string $data * @return void * @throws LocalizedException */ protected function _write($data) { $result = @fwrite($this->_fileHandler, $data); if (false === $result) { throw new LocalizedException( new \Magento\Framework\Phrase('The data failed to write to "%1".', [$this->_filePath]) ); } } /** * Implementation of file reading * * @param int $length * @return string * @throws LocalizedException */ protected function _read($length) { $result = fread($this->_fileHandler, $length); if (false === $result) { throw new LocalizedException( new \Magento\Framework\Phrase('Failed to read data from %1', [$this->_filePath]) ); } return $result; } /** * Implementation of EOF indicator * * @return boolean */ protected function _eof() { return feof($this->_fileHandler); } /** * Implementation of file closing * * @return void */ protected function _close() { fclose($this->_fileHandler); } /** * Check whether requested mode is writable mode * * @param string $mode * @return int */ protected function _isWritableMode($mode) { return preg_match('/(^[waxc])|(\+$)/', $mode); } /** * Check whether requested mode is readable mode * * @param string $mode * @return bool */ protected function _isReadableMode($mode) { return !$this->_isWritableMode($mode); } /** * Check whether file is opened * * @return void * @throws LocalizedException */ protected function _checkFileOpened() { if (!$this->_fileHandler) { throw new LocalizedException(new \Magento\Framework\Phrase('File not opened')); } } }