From c6714c0f2717b0aa828060b366c9117e66efbfb1 Mon Sep 17 00:00:00 2001 From: Fabrice Luraine Date: Fri, 31 Jul 2009 15:08:33 +0200 Subject: [PATCH] Fix bug in file_is_text, removes mime_content_type compatibility function and add file_mime_content_type() [#15 state:resolved] --- lib/limonade.php | 37 ++++++++++++----------- tests/all.php | 1 + tests/data/deer.jpg | Bin 0 -> 13827 bytes tests/data/empty_text_file.txt | 0 tests/file.php | 52 +++++++++++++++++++++++++++++++++ 5 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 tests/data/deer.jpg create mode 100644 tests/data/empty_text_file.txt create mode 100644 tests/file.php diff --git a/lib/limonade.php b/lib/limonade.php index aabb35a..fe112db 100644 --- a/lib/limonade.php +++ b/lib/limonade.php @@ -1897,6 +1897,7 @@ function mime_type($ext = null) 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh', 'css' => 'text/css', + 'csv' => 'text/csv', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', 'djv' => 'image/vnd.djvu', @@ -2038,25 +2039,23 @@ function mime_type($ext = null) return is_null($ext) ? $types : $types[strtolower($ext)]; } -if(!function_exists('mime_content_type')) { - /** - * Detect MIME Content-type for a file - * - * @param string $filename Path to the tested file. - * @return string - */ - function mime_content_type($filename) - { - $ext = strtolower(array_pop(explode('.', $filename))); - if($mime = mime_type($ext)) return $mime; - elseif (function_exists('finfo_open')) { - $finfo = finfo_open(FILEINFO_MIME); - $mime = finfo_file($finfo, $filename); - finfo_close($finfo); - return $mime; - } - else return 'application/octet-stream'; +/** + * Detect MIME Content-type for a file + * + * @param string $filename Path to the tested file. + * @return string + */ +function file_mime_content_type($filename) +{ + $ext = file_extension($filename); /* strtolower isn't necessary */ + if($mime = mime_type($ext)) return $mime; + elseif (function_exists('finfo_open')) { + $finfo = finfo_open(FILEINFO_MIME); + $mime = finfo_file($finfo, $filename); + finfo_close($finfo); + return $mime; } + else return 'application/octet-stream'; } @@ -2132,7 +2131,7 @@ function file_extension($filename) */ function file_is_text($filename) { - if($mime = mime_content_type($filename)) return substr($mime,0,5) == "text/"; + if($mime = file_mime_content_type($filename)) return substr($mime,0,5) == "text/"; return null; } diff --git a/tests/all.php b/tests/all.php index 93a56b9..0f04b43 100644 --- a/tests/all.php +++ b/tests/all.php @@ -16,5 +16,6 @@ require $basedir."router.php"; require $basedir."request.php"; require $basedir."main.php"; + require $basedir."file.php"; require $basedir."functional.php"; end_test_suite(); diff --git a/tests/data/deer.jpg b/tests/data/deer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7347fb0221ecb60932f46810f60e19f1224676b2 GIT binary patch literal 13827 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 Q`}=48>!ZbAu--5KFOX)^Q2+n{ literal 0 HcmV?d00001 diff --git a/tests/data/empty_text_file.txt b/tests/data/empty_text_file.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/file.php b/tests/file.php new file mode 100644 index 0000000..3e89690 --- /dev/null +++ b/tests/file.php @@ -0,0 +1,52 @@ +