массивы — проверять совместимость между расширениями файлов с mimetype в Stack Overflow

как убедиться, что файл имеет указанное расширение и mimetype, потому что это может быть кто-то, кто изменяет расширение файла. это может быть использовано для предотвращения загрузки файлов с тем же расширением, но с другим mimetype.

это мой код, но результат не тот, который я хочу:

function mimeInfo($filename) {
$realpath = realpath( $filename );
if ( $realpath
&& function_exists( 'finfo_file' )
&& function_exists( 'finfo_open' )
&& defined( 'FILEINFO_MIME_TYPE' )
) {
// Use the Fileinfo PECL extension (PHP 5.3+)
return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
}
if ( function_exists( 'mime_content_type' ) ) {
// Deprecated in PHP 5.3
return mime_content_type( $realpath );
}
return false;
}

function uploadAllows($pathfile){
$fileAllows = array(
"rar"=>"application/x-rar",
"xls"=>array(
"application/vnd.ms-office",
"application/x-msexcel",
"application/x-excel",
"application/excel",
"application/vnd.ms-excel",
)
);

$mimeInfo = mimeInfo($pathfile);
$file = pathinfo($pathfile);
$ext = $file['extension'];

if(count($fileAllows[$ext])>1){
if(in_array($mimeInfo, $fileAllows[$ext])){
return true;
}else{
return false;
}
}else{
if(in_array($mimeInfo, $fileAllows)){
return true;
}else{
return false;
}
}
}

ожидается 1:

1. extension must *.rar
2. mimetype must "application/x-rar"

ожидается 2:

1. extension must *.xls
2. mimetype must one of the spesific array

Благодарю.

0

Решение

Вы должны делать это так

// MIME types must be array even if there is only 1 of them
$fileAllows = array(
"rar"=>array("application/x-rar"),
"xls"=>array(
"application/vnd.ms-office",
"application/x-msexcel",
"application/x-excel",
"application/excel",
"application/vnd.ms-excel",
)
);

$mimeInfo = mimeInfo($pathfile);
$file = pathinfo($pathfile);
$ext = strtolower($file['extension']); // convert to lowercase

if(is_array($fileAllows[$ext])) return in_array($mimeInfo, $fileAllows[$ext]);
else return false;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]