1*37748cd8SNickeau<?php 2*37748cd8SNickeau/** 3*37748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 4*37748cd8SNickeau * 5*37748cd8SNickeau * This source code is licensed under the GPL license found in the 6*37748cd8SNickeau * COPYING file in the root directory of this source tree. 7*37748cd8SNickeau * 8*37748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 9*37748cd8SNickeau * @author ComboStrap <support@combostrap.com> 10*37748cd8SNickeau * 11*37748cd8SNickeau */ 12*37748cd8SNickeau 13*37748cd8SNickeaunamespace ComboStrap; 14*37748cd8SNickeau 15*37748cd8SNickeau 16*37748cd8SNickeauclass File 17*37748cd8SNickeau{ 18*37748cd8SNickeau 19*37748cd8SNickeau private $path; 20*37748cd8SNickeau 21*37748cd8SNickeau 22*37748cd8SNickeau /** 23*37748cd8SNickeau * File constructor. 24*37748cd8SNickeau * @param $absolutePath 25*37748cd8SNickeau */ 26*37748cd8SNickeau protected function __construct($absolutePath) 27*37748cd8SNickeau { 28*37748cd8SNickeau $this->path = $absolutePath; 29*37748cd8SNickeau } 30*37748cd8SNickeau 31*37748cd8SNickeau /** 32*37748cd8SNickeau * @return mixed 33*37748cd8SNickeau */ 34*37748cd8SNickeau public function getFileSystemPath() 35*37748cd8SNickeau { 36*37748cd8SNickeau return $this->path; 37*37748cd8SNickeau } 38*37748cd8SNickeau 39*37748cd8SNickeau /** 40*37748cd8SNickeau * @return false|int 41*37748cd8SNickeau */ 42*37748cd8SNickeau public function getSize() 43*37748cd8SNickeau { 44*37748cd8SNickeau return filesize($this->path); 45*37748cd8SNickeau } 46*37748cd8SNickeau 47*37748cd8SNickeau public function exists() 48*37748cd8SNickeau { 49*37748cd8SNickeau return file_exists($this->path); 50*37748cd8SNickeau } 51*37748cd8SNickeau 52*37748cd8SNickeau public function __toString() 53*37748cd8SNickeau { 54*37748cd8SNickeau return $this->path; 55*37748cd8SNickeau } 56*37748cd8SNickeau 57*37748cd8SNickeau /** 58*37748cd8SNickeau * @return false|int - unix time stamp 59*37748cd8SNickeau */ 60*37748cd8SNickeau public function getModifiedTime() 61*37748cd8SNickeau { 62*37748cd8SNickeau return filemtime($this->path); 63*37748cd8SNickeau } 64*37748cd8SNickeau 65*37748cd8SNickeau /** 66*37748cd8SNickeau * @return string the last part of the path without the extension 67*37748cd8SNickeau */ 68*37748cd8SNickeau public function getBaseNameWithoutExtension() 69*37748cd8SNickeau { 70*37748cd8SNickeau 71*37748cd8SNickeau return pathinfo($this->path, PATHINFO_FILENAME); 72*37748cd8SNickeau } 73*37748cd8SNickeau 74*37748cd8SNickeau public function getExtension() 75*37748cd8SNickeau { 76*37748cd8SNickeau return pathinfo($this->path, PATHINFO_EXTENSION); 77*37748cd8SNickeau } 78*37748cd8SNickeau 79*37748cd8SNickeau 80*37748cd8SNickeau /** 81*37748cd8SNickeau * @return array|string|string[] the last part of the path (ie name + extension) 82*37748cd8SNickeau */ 83*37748cd8SNickeau public function getBaseName() 84*37748cd8SNickeau { 85*37748cd8SNickeau return pathinfo($this->path, PATHINFO_BASENAME); 86*37748cd8SNickeau } 87*37748cd8SNickeau 88*37748cd8SNickeau public function isImage() 89*37748cd8SNickeau { 90*37748cd8SNickeau return substr($this->getMime(), 0, 5) == 'image'; 91*37748cd8SNickeau } 92*37748cd8SNickeau 93*37748cd8SNickeau public function getMime() 94*37748cd8SNickeau { 95*37748cd8SNickeau return mimetype($this->getBaseName(), false)[1]; 96*37748cd8SNickeau } 97*37748cd8SNickeau 98*37748cd8SNickeau public function getKnownMime() 99*37748cd8SNickeau { 100*37748cd8SNickeau return mimetype($this->getBaseName(), true)[1]; 101*37748cd8SNickeau } 102*37748cd8SNickeau 103*37748cd8SNickeau public function getContent() 104*37748cd8SNickeau { 105*37748cd8SNickeau return file_get_contents($this->getFileSystemPath()); 106*37748cd8SNickeau } 107*37748cd8SNickeau 108*37748cd8SNickeau public function remove() 109*37748cd8SNickeau { 110*37748cd8SNickeau unlink($this->getFileSystemPath()); 111*37748cd8SNickeau } 112*37748cd8SNickeau 113*37748cd8SNickeau public function getParent() 114*37748cd8SNickeau { 115*37748cd8SNickeau return new File(pathinfo($this->path, PATHINFO_DIRNAME)); 116*37748cd8SNickeau } 117*37748cd8SNickeau 118*37748cd8SNickeau public function createAsDirectory() 119*37748cd8SNickeau { 120*37748cd8SNickeau 121*37748cd8SNickeau return mkdir($this->getFileSystemPath(), $mode = 0770, $recursive = true); 122*37748cd8SNickeau } 123*37748cd8SNickeau 124*37748cd8SNickeau public static function createFromPath($path) 125*37748cd8SNickeau { 126*37748cd8SNickeau return new File($path); 127*37748cd8SNickeau 128*37748cd8SNickeau } 129*37748cd8SNickeau 130*37748cd8SNickeau 131*37748cd8SNickeau 132*37748cd8SNickeau 133*37748cd8SNickeau 134*37748cd8SNickeau} 135