Allow to check for the mimetype by content only

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2019-11-28 15:24:57 +01:00 committed by Backportbot
parent d32fd77d22
commit 0f3fe7be2c
2 changed files with 30 additions and 8 deletions

View File

@ -192,12 +192,12 @@ class Detection implements IMimeTypeDetector {
}
/**
* detect mimetype based on both filename and content
*
* detect mimetype only based on the content of file
* @param string $path
* @return string
* @since 18.0.0
*/
public function detect($path) {
public function detectContent(string $path): string {
$this->loadMappings();
if (@is_dir($path)) {
@ -205,9 +205,7 @@ class Detection implements IMimeTypeDetector {
return "httpd/unix-directory";
}
$mimeType = $this->detectPath($path);
if ($mimeType === 'application/octet-stream' and function_exists('finfo_open')
if (function_exists('finfo_open')
and function_exists('finfo_file') and $finfo = finfo_open(FILEINFO_MIME)
) {
$info = @strtolower(finfo_file($finfo, $path));
@ -219,7 +217,7 @@ class Detection implements IMimeTypeDetector {
}
$isWrapped = (strpos($path, '://') !== false) and (substr($path, 0, 7) === 'file://');
if (!$isWrapped and $mimeType === 'application/octet-stream' && function_exists("mime_content_type")) {
if (!$isWrapped and function_exists("mime_content_type")) {
// use mime magic extension if available
$mimeType = mime_content_type($path);
}
@ -242,6 +240,22 @@ class Detection implements IMimeTypeDetector {
return $mimeType;
}
/**
* detect mimetype based on both filename and content
*
* @param string $path
* @return string
*/
public function detect($path) {
$mimeType = $this->detectPath($path);
if ($mimeType !== 'application/octet-stream') {
return $mimeType;
}
return $this->detectContent($path);
}
/**
* detect mimetype based on the content of a string
*

View File

@ -39,9 +39,17 @@ interface IMimeTypeDetector {
* @param string $path
* @return string
* @since 8.2.0
**/
*/
public function detectPath($path);
/**
* detect mimetype only based on the content of file
* @param string $path
* @return string
* @since 18.0.0
*/
public function detectContent(string $path): string;
/**
* detect mimetype based on both filename and content
*