diff --git a/data.php b/data.php index 78646b0..535345c 100644 --- a/data.php +++ b/data.php @@ -64,11 +64,21 @@ class Data extends Base { } public function getMimeType () { + $result = "application/octet-stream"; if ($this->isKnownType ()) { return self::$mimetypes [$this->extension]; - } else { - return "application/octet-stream"; + } elseif (function_exists('finfo_open') === true) { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + + if (is_resource($finfo) === true) + { + $result = finfo_file($finfo, $this->getLocalPath ()); + } + + finfo_close($finfo); + } + return $result; } public function getFilename () { diff --git a/test/bookTest.php b/test/bookTest.php index a2fac8f..88e3b59 100644 --- a/test/bookTest.php +++ b/test/bookTest.php @@ -291,6 +291,29 @@ class BookTest extends PHPUnit_Framework_TestCase $this->assertNull ($book->getDataFormat ("FB2")); } + + public function testGetMimeType () { + $book = Book::getBookById(17); + + // Get Alice MOBI=>17, PDF=>19, EPUB=>20 + $data = $book->getDataFormat ("EPUB"); + $this->assertEquals ("application/epub+zip", $data->getMimeType ()); + $data = $book->getDataFormat ("MOBI"); + $this->assertEquals ("application/x-mobipocket-ebook", $data->getMimeType ()); + $data = $book->getDataFormat ("PDF"); + $this->assertEquals ("application/pdf", $data->getMimeType ()); + + // Alter a data to make a test for finfo_file if enabled + $data->extension = "ico"; + $data->format = "ICO"; + $data->name = "favicon"; + $data->book->path = realpath (dirname(__FILE__) . "/../"); + if (function_exists('finfo_open') === true) { + $this->assertEquals ("image/x-icon", $data->getMimeType ()); + } else { + $this->assertEquals ("application/octet-stream", $data->getMimeType ()); + } + } public function testTypeaheadSearch () {