| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- <?php
- namespace Path\Path;
- class Path
- {
- protected string $path;
- public function __construct(string $path)
- {
- $this->path = $path;
- }
- /**
- * Resolve the path.
- *
- * @return bool|string Returns the resolved path as a string if successful, otherwise returns false.
- */
- public function resolve(): bool|string
- {
- return realpath($this->path);
- }
- /**
- * Check if the path refers to a regular file.
- *
- * @return bool Returns true if the path refers to a regular file, otherwise returns false.
- */
- public function isFile(): bool
- {
- return is_file($this->path);
- }
- /**
- * Check if the given path is a directory.
- *
- * @return bool Returns true if the path is a directory, false otherwise.
- */
- public function isDir()
- {
- return is_dir($this->path);
- }
- /**
- * Get the extension of the given path.
- *
- * @return array|string Returns the extension of the path as a string if it exists, or an empty string otherwise.
- */
- public function extension(): array|string
- {
- return pathinfo($this->path, PATHINFO_EXTENSION);
- }
- /**
- * Get the name of the file or path.
- *
- * @return array|string Returns the name of the file or path.
- * If the path has an extension, it returns the name without the extension as a string.
- * If the path doesn't have an extension, it returns the name as an array containing the directory name and the file name.
- */
- public function name(): array|string
- {
- return pathinfo($this->path, PATHINFO_FILENAME);
- }
- /**
- * Get the base name of the path.
- *
- * @return string The base name of the path.
- */
- public function basename(): string
- {
- return pathinfo($this->path, PATHINFO_BASENAME);
- }
- /**
- * Creates a new directory.
- *
- * @param int $mode (optional) The permissions for the new directory. Default is 0777.
- * @param bool $recursive (optional) Indicates whether to create parent directories if they do not exist. Default is false.
- *
- * @return void
- */
- public function mkdir($mode = 0777, $recursive = false): void
- {
- if (!file_exists($this->path)) {
- mkdir($this->path, $mode, $recursive);
- }
- }
- /**
- * Deletes a file or a directory.
- *
- * @return void
- */
- public function delete(): void
- {
- if (is_file($this->path)) {
- unlink($this->path); //for file
- }
- else if (is_dir($this->path)) {
- rmdir($this->path); //for directory
- }
- }
- /**
- * Copies a file to a specified destination.
- *
- * @param string $destination The path to the destination file or directory to copy to.
- *
- * @return void
- */
- public function copy($destination): void
- {
- if (is_file($this->path)) {
- copy($this->path, $destination);
- }
- else if (is_dir($this->path)) {
- // Copy dir needs special handling, not covered in this example.
- }
- }
- /**
- * Moves a file or directory to a new location.
- *
- * @param string $destination The new location where the file or directory should be moved to.
- *
- * @return void
- */
- public function move($destination): void
- {
- rename($this->path, $destination);
- }
- /**
- * Updates the access and modification time of a file or creates a new empty file if it doesn't exist.
- *
- * @param int|null $time (optional) The access and modification time to set. Default is the current time.
- * @param int|null $atime (optional) The access time to set. Default is the value of $time.
- *
- * @return void
- */
- public function touch($time = null, $atime = null): void
- {
- if (!file_exists($this->path)) {
- touch($this->path, $time, $atime);
- }
- }
- /**
- * Returns the last modified timestamp of a file or directory.
- *
- * @return int|bool The last modified timestamp, or false if an error occurred.
- */
- public function lastModified(): bool|int
- {
- return filemtime($this->path);
- }
- /**
- * Calculates the size of a file.
- *
- * @return bool|int The size of the file in bytes. Returns false if the file does not exist or on failure.
- */
- public function size(): bool|int
- {
- return filesize($this->path);
- }
- /**
- * Retrieves the parent directory of a file or directory path.
- *
- * @return string The parent directory of the specified path.
- */
- public function parent(): string
- {
- return dirname($this->path);
- }
- /**
- * Retrieves the contents of a file.
- *
- * @return bool|string The contents of the file as a string. Returns false if the file does not exist or on failure.
- */
- public function getContents(): bool|string
- {
- return file_get_contents($this->path);
- }
- /**
- * Writes contents to a file.
- *
- * @param mixed $contents The contents to be written to the file.
- * @return void
- */
- public function putContents($contents): void
- {
- file_put_contents($this->path, $contents);
- }
- /**
- * Appends contents to a file.
- *
- * @param string $contents The contents to append to the file.
- *
- * @return void
- */
- public function appendContents($contents): void
- {
- file_put_contents($this->path, $contents, FILE_APPEND);
- }
- /**
- * Retrieves the permissions of a file or directory.
- *
- * @return string The permissions of the file or directory in octal notation. Returns an empty string if the file or directory does not exist.
- */
- public function getPermissions(): string
- {
- return substr(sprintf('%o', fileperms($this->path)), -4);
- }
- /**
- * Changes the permissions of a file or directory.
- *
- * @param int $permissions The new permissions to set. The value should be an octal number.
- * @return bool Returns true on success, false on failure.
- */
- public function changePermissions($permissions): bool
- {
- return chmod($this->path, $permissions);
- }
- /**
- * Checks if a file exists.
- *
- * @return bool Returns true if the file exists, false otherwise.
- */
- public function exists(): bool
- {
- return file_exists($this->path);
- }
- }
|