diff --git a/phpBB/phpbb/storage/adapter/adapter_interface.php b/phpBB/phpbb/storage/adapter/adapter_interface.php index b2f6043741..f9fb2438b6 100644 --- a/phpBB/phpbb/storage/adapter/adapter_interface.php +++ b/phpBB/phpbb/storage/adapter/adapter_interface.php @@ -85,4 +85,15 @@ interface adapter_interface * When the file cannot be copied */ public function copy($path_orig, $path_dest); + + /** + * Get file info. + * + * @param string $path The file + * + * @throws \phpbb\storage\exception\not_implemented When the adapter doesnt implement the method + * + * @return \phpbb\storage\file_info Returns file_info object + */ + public function file_properties($path); } diff --git a/phpBB/phpbb/storage/adapter/local.php b/phpBB/phpbb/storage/adapter/local.php index 9e7dc7db79..34c2894569 100644 --- a/phpBB/phpbb/storage/adapter/local.php +++ b/phpBB/phpbb/storage/adapter/local.php @@ -236,16 +236,43 @@ class local implements adapter_interface, stream_interface } } + /** + * {@inheritdoc} + */ public function file_properties($path) { return []; } + /** + * Get file size. + * + * @param string $path The file + * + * @throws \phpbb\storage\exception\exception When cannot get size + * + * @return int File size in bytes + */ public function file_size($path) { - return filesize($this->root_path . $path); + $size = filesize($this->root_path . $path); + + if ($size === null) + { + throw new exception('STORAGE_CANNOT_GET_FILESIZE'); + } + + return $size; } + + /** + * Get file mimetype. + * + * @param string $path The file + * + * @return string Mime type + */ public function file_mimetype($path) { return mime_content_type($this->root_path . $path); diff --git a/phpBB/phpbb/storage/file_info.php b/phpBB/phpbb/storage/file_info.php index 04a6eb7e99..ec80eb3ccf 100644 --- a/phpBB/phpbb/storage/file_info.php +++ b/phpBB/phpbb/storage/file_info.php @@ -17,10 +17,19 @@ use phpbb\storage\exception\not_implemented; class file_info { + /** + * @var \phpbb\storage\adapter\adapter_interface + */ protected $adapter; + /** + * @var string + */ protected $path; + /** + * @var array + */ protected $properties; public function __construct($adapter, $path) @@ -29,6 +38,11 @@ class file_info $this->path = $path; } + /** + * Load propertys lazily. + * + * @param string path The file path. + */ protected function fill_properties($path) { if ($this->properties === null) @@ -42,6 +56,13 @@ class file_info } } + /** + * Load propertys lazily. + * + * @param string name The property name. + * + * @return string Returns the property value + */ public function get($name) { $this->fill_properties($this->path); @@ -59,6 +80,9 @@ class file_info return $this->properties[$name]; } + /** + * Alias of \phpbb\storage\file_info->get() + */ public function __get($name) { return $this->get($name);