From f959fcefc453ea8d3cf004aefc12dee2e7b6cfb0 Mon Sep 17 00:00:00 2001 From: mark_story Date: Sun, 18 Dec 2011 22:55:37 -0500 Subject: [PATCH] Add File::mime() Fixes #1051 --- lib/Cake/Test/Case/Utility/FileTest.php | 11 +++++++++ lib/Cake/Utility/File.php | 32 +++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/Cake/Test/Case/Utility/FileTest.php b/lib/Cake/Test/Case/Utility/FileTest.php index 64943bb35c3..0fb17b63cc8 100644 --- a/lib/Cake/Test/Case/Utility/FileTest.php +++ b/lib/Cake/Test/Case/Utility/FileTest.php @@ -463,6 +463,17 @@ public function testCopy() { $TmpFile->close(); } +/** + * Test mime() + * + * @return void + */ + public function testMime() { + $path = CAKE . 'Test' . DS . 'test_app' . DS . 'webroot' . DS . 'img' . DS . 'cake.power.gif'; + $file = new File($path); + $this->assertEquals('image/gif', $file->mime()); + } + /** * getTmpFile method * diff --git a/lib/Cake/Utility/File.php b/lib/Cake/Utility/File.php index eedd9184344..32d04e51d34 100644 --- a/lib/Cake/Utility/File.php +++ b/lib/Cake/Utility/File.php @@ -291,9 +291,16 @@ public function delete() { } /** - * Returns the File info. + * Returns the File info as an array with the following keys: * - * @return string The File extension + * - dirname + * - basename + * - extension + * - filename + * - filesize + * - mime + * + * @return array File information. * @link http://book.cakephp.org/2.0/en/core-utility-libraries/file-folder.html#File::info */ public function info() { @@ -306,6 +313,9 @@ public function info() { if (!isset($this->info['filesize'])) { $this->info['filesize'] = $this->size(); } + if (!isset($this->info['mime'])) { + $this->info['mime'] = $this->mime(); + } return $this->info; } @@ -536,4 +546,22 @@ public function copy($dest, $overwrite = true) { } return copy($this->path, $dest); } + +/** + * Get the mime type of the file. Uses the finfo extension if + * its available, otherwise falls back to mime_content_type + * + * @return false|string The mimetype of the file, or false if reading fails. + */ + public function mime() { + if (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME); + list($type, $charset) = explode(';', finfo_file($finfo, $this->pwd())); + return $type; + } else if (function_exists('mime_content_type')) { + return mime_content_type($this->pwd()); + } + return false; + } + }