# MIME::Types - man - phpMan

## NAME
    [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) - Definition of MIME types

## INHERITANCE
     [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)
       is a Exporter

## SYNOPSIS
     use [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown);
     my $mt    = [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)->new(...);    # [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) object
     my $type  = $mt->type('text/plain');  # [MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)  object
     my $type  = $mt->mimeTypeOf('gif');
     my $type  = $mt->mimeTypeOf('picture.jpg');
     my @types = $mt->httpAccept('text/html, application/json;q=0.1')

## DESCRIPTION
    MIME types are used in many applications (for instance as part of e-mail
    and HTTP traffic) to indicate the type of content which is transmitted.
    or expected. See RFC2045 at <https://www.ietf.org/rfc/rfc2045.txt>

    Sometimes detailed knowledge about a mime-type is need, however this
    module only knows about the file-name extensions which relate to some
    filetype. It can also be used to produce the right format: types which
    are not registered at IANA need to use 'x-' prefixes.

    This object administers a huge list of known mime-types, combined from
    various sources. For instance, it contains all IANA types and the
    knowledge of Apache. Probably the most complete table on the net!

  [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) and daemons (fork)
    If your program uses fork (usually for a daemon), then you want to have
    the type table initialized before you start forking. So, first call

       my $mt = [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)->new;

    Later, each time you create this object (you may, of course, also reuse
    the object you create here) you will get access to the same global table
    of types.

## METHODS
### Constructors
    [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)->new(%options)
        Create a new "[MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)" object which manages the data. In the
        current implementation, it does not matter whether you create this
        object often within your program, but in the future this may change.

         -Option         --Default
          db_file          <installed source>
          only_complete    <false>
          only_iana        <false>
          skip_extensions  <false>

        db_file => FILENAME
          The location of the database which contains the type information.
          Only the first instantiation of this object will have this
          parameter obeyed.

          [2.10] This parameter can be globally overruled via the
          "PERL_MIME_TYPE_DB" environment variable, which may be needed in
          case of PAR or other tricky installations. For PAR, you probably
          set this environment variable to "inc/lib/MIME/types.db"

        only_complete => BOOLEAN
          Only include complete MIME type definitions: requires at least one
          known extension. This will reduce the number of entries --and with
          that the amount of memory consumed-- considerably.

          In your program you have to decide: the first time that you call
          the creator ("new") determines whether you get the full or the
          partial information.

        only_iana => BOOLEAN
          Only load the types which are currently known by IANA.

        skip_extensions => BOOLEAN
          Do not load the table to map extensions to types, which is quite
          large.

### Knowledge
    $obj->addType($type, ...)
        Add one or more TYPEs to the set of known types. Each TYPE is a
        "[MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)" which must be experimental: either the main-type or the
        sub-type must start with "x-".

        Please inform the maintainer of this module when registered types
        are missing. Before version [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) version 1.14, a warning was
        produced when an unknown IANA type was added. This has been removed,
        because some people need that to get their application to work
        locally... broken applications...

    $obj->extensions()
        Returns a list of all defined extensions.

    $obj->listTypes()
        Returns a list of all defined mime-types by name only. This will not
        instantiate [MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown) objects. See types()

    $obj->mimeTypeOf($filename)
        Returns the "[MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)" object which belongs to the FILENAME (or
        simply its filename extension) or "undef" if the file type is
        unknown. The extension is used and considered case-insensitive.

        In some cases, more than one type is known for a certain filename
        extension. In that case, the preferred one is taken (for an unclear
        definition of preference)

        example: use of mimeTypeOf()

         my $types = [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)->new;
         my $mime = $types->mimeTypeOf('gif');

         my $mime = $types->mimeTypeOf('picture.jpg');
         print $mime->isBinary;

    $obj->type($string)
        Returns the "[MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)" which describes the type related to STRING.
        [2.00] Only one type will be returned.

        [before 2.00] One type may be described more than once. Different
        extensions may be in use for this type, and different operating
        systems may cause more than one "[MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)" object to be defined.
        In scalar context, only the first is returned.

    $obj->types()
        Returns a list of all defined mime-types. For reasons of backwards
        compatibility, this will instantiate [MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown) objects, which will
        be returned. See listTypes().

  HTTP support
    $obj->httpAccept($header)
        [2.07] Decompose a typical HTTP-Accept header, and sort it based on
        the included priority information. Returned is a sorted list of type
        names, where the highest priority type is first. The list may
        contain '*/*' (accept any) or a '*' as subtype.

        Ill-formated typenames are ignored. On equal qualities, the order is
        kept. See RFC2616 section 14.1

        example:

          my @types = $types->httpAccept('text/html, application/json;q=0.9');

    $obj->httpAcceptBest($accept|\@types, @have)
        [2.07] The $accept string is processed via httpAccept() to order the
        types on preference. You may also provide a list of ordered @types
        which may have been the result of that method, called earlier.

        As second parameter, you pass a LIST of types you @have to offer.
        Those need to be [MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown) objects. The preferred type will get
        selected. When none of these are accepted by the client, this will
        return "undef". It should result in a 406 server response.

        example:

           my $accept = $req->header('Accept');
           my @have   = map $mt->type($_), qw[text/plain text/html];
           my @ext    = $mt->httpAcceptBest($accept, @have);

    $obj->httpAcceptSelect($accept|\@types, @filenames|\@filenames)
        [2.07] Like httpAcceptBest(), but now we do not return a pair with
        mime-type and filename, not just the type. If $accept is "undef",
        the first filename is returned.

        example:

           use [HTTP::Status](https://www.chedong.com/phpMan.php/perldoc/HTTP%3A%3AStatus/markdown) ':constants';
           use [File::Glob](https://www.chedong.com/phpMan.php/perldoc/File%3A%3AGlob/markdown)   'bsd_glob';    # understands blanks in filename

           my @filenames   = bsd_glob "$imagedir/$fnbase.*;
           my $accept      = $req->header('Accept');
           my ($fn, $mime) = $mt->httpAcceptSelect($accept, @filenames);
           my $code        = defined $mime ? HTTP_NOT_ACCEPTABLE : HTTP_OK;

## FUNCTIONS
    The next functions are provided for backward compatibility with
    [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) versions [0.06] and below. This code originates from Jeff
    Okamoto <okamoto@corp.hp.com> and others.

    by_mediatype(TYPE)
        This function takes a media type and returns a list or anonymous
        array of anonymous three-element arrays whose values are the file
        name suffix used to identify it, the media type, and a content
        encoding.

        TYPE can be a full type name (contains '/', and will be matched in
        full), a partial type (which is used as regular expression) or a
        real regular expression.

    by_suffix(FILENAME|SUFFIX)
        Like "mimeTypeOf", but does not return an "[MIME::Type](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3AType/markdown)" object. If
        the file +type is unknown, both the returned media type and encoding
        are empty strings.

        example: use of function by_suffix()

         use [MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown) 'by_suffix';
         my ($mediatype, $encoding) = by_suffix('image.gif');

         my $refdata = by_suffix('image.gif');
         my ($mediatype, $encoding) = @$refdata;

    import_mime_types()
        This method has been removed: mime-types are only useful if
        understood by many parties. Therefore, the IANA assigns names which
        can be used. In the table kept by this "[MIME::Types](https://www.chedong.com/phpMan.php/perldoc/MIME%3A%3ATypes/markdown)" module all
        these names, plus the most often used temporary names are kept. When
        names seem to be missing, please contact the maintainer for
        inclusion.

## SEE ALSO
    This module is part of MIME-Types distribution version 2.22, built on
    October 27, 2021. Website: <http://perl.overmeer.net/CPAN/>

## LICENSE
    Copyrights 1999-2021 by [Mark Overmeer <<markov@cpan.org>>]. For other
    contributors see ChangeLog.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself. See <http://dev.perl.org/licenses/>

