亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mediatypes.pm

?? ARM上的如果你對底層感興趣
?? PM
字號:
#
# $Id: MediaTypes.pm,v 1.22 1998/07/09 05:27:34 aas Exp $

package LWP::MediaTypes;

=head1 NAME

LWP::MediaTypes - guess media type for a file or a URL

=head1 SYNOPSIS

 use LWP::MediaTypes qw(guess_media_type);
 $type = guess_media_type("/tmp/foo.gif");

=head1 DESCRIPTION

This module provides functions for handling of media (also known as
MIME) types and encodings.  The mapping from file extentions to media
types is defined by the F<media.types> file.  If the F<~/.media.types>
file exist it is used as a replacement.
For backwards compatability we will also look for F<~/.mime.types>.

The following functions are exported by default:

=over 4

=cut

####################################################################

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(guess_media_type media_suffix);
@EXPORT_OK = qw(add_type add_encoding);
$VERSION = sprintf("%d.%02d", q$Revision: 1.22 $ =~ /(\d+)\.(\d+)/);

require LWP::Debug;
use strict;

# note: These hashes will also be filled with the entries found in
# the 'media.types' file.

my %suffixType = (
    'txt'   => 'text/plain',
    'html'  => 'text/html',
    'gif'   => 'image/gif',
    'jpg'   => 'image/jpeg',
);

my %suffixExt = (
    'text/plain' => 'txt',
    'text/html'  => 'h',
    'image/gif'  => 'gif',
    'image/jpeg' => 'jpg',
);

#XXX: there should be some way to define this in the media.types files.
my %suffixEncoding = (
    'Z'   => 'compress',
    'gz'  => 'gzip',
    'hqx' => 'x-hqx',
    'uu'  => 'x-uuencode',
    'z'   => 'x-pack'
);

sub _dump {
    require Data::Dumper;
    Data::Dumper->new([\%suffixType, \%suffixExt, \%suffixEncoding],
		      [qw(*suffixType *suffixExt *suffixEncoding)])->Dump;
}

read_media_types();



=item guess_media_type($filename_or_url, [$header_to_modify])

This function tries to guess media type and encoding for given file.
It returns the content-type, which is a string like C<"text/html">.
In array context it also returns any content-encodings applied (in the
order used to encode the file).  You can pass a URI::URL object
reference, instead of the file name, as the first parameter too.

If the type can not be deduced from looking at the file name only,
then guess_media_type() will let the C<-T> Perl operator take a look.
If this works (and C<-T> returns a TRUE value) then we return
I<text/plain> as the type, otherwise we return
I<application/octet-stream> as the type.

The optional second argument should be a reference to a HTTP::Headers
object (or any object that implement the $obj->header method in a
similar way).  When present we will set the values of the
'Content-Type' and 'Content-Encoding' for this header.

=cut

sub guess_media_type
{
    my($file, $header) = @_;
    return undef unless defined $file;

    my $fullname;
    if (ref($file)) {
	# assume URI::URL object
	$file = $file->path;
	#XXX should handle non http:, file: or ftp: URLs differently
    } else {
	$fullname = $file;  # enable peek at actual file
    }

    my @encoding = ();
    my $ct = undef;
    for (file_exts($file)) {
	# first check this dot part as encoding spec
	if (exists $suffixEncoding{$_}) {
	    unshift(@encoding, $suffixEncoding{$_});
	    next;
	}
	if (exists $suffixEncoding{lc $_}) {
	    unshift(@encoding, $suffixEncoding{lc $_});
	    next;
	}

	# check content-type
	if (exists $suffixType{$_}) {
	    $ct = $suffixType{$_};
	    last;
	}
	if (exists $suffixType{lc $_}) {
	    $ct = $suffixType{lc $_};
	    last;
	}

	# don't know nothing about this dot part, bail out
	last;
    }
    unless (defined $ct) {
	# Take a look at the file
	if (defined $fullname) {
	    $ct = (-T $fullname) ? "text/plain" : "application/octet-stream";
	} else {
	    $ct = "application/octet-stream";
	}
    }

    if ($header) {
	$header->header('Content-Type' => $ct);
	$header->header('Content-Encoding' => \@encoding) if @encoding;
    }

    wantarray ? ($ct, @encoding) : $ct;
}


=item media_suffix($type,...)

This function will return all suffixes that can be used to denote the
specified media type(s).  Wildcard types can be used.  In scalar
context it will return the first suffix found.

Examples:

  @suffixes = media_suffix('image/*', 'audio/basic');
  $suffix = media_suffix('text/html');

=cut

sub media_suffix {
    if (!wantarray && @_ == 1 && $_[0] !~ /\*/) {
	return $suffixExt{$_[0]};
    }
    my(@type) = @_;
    my(@suffix, $ext, $type);
    foreach (@type) {
	if (s/\*/.*/) {
	    while(($ext,$type) = each(%suffixType)) {
		push(@suffix, $ext) if $type =~ /^$_$/;
	    }
	} else {
	    while(($ext,$type) = each(%suffixType)) {
		push(@suffix, $ext) if $type eq $_;
	    }
	}
    }
    wantarray ? @suffix : $suffix[0];
}


sub file_exts 
{
    my($file) = @_;
    $file =~ s,.*/,,;   # only basename left
    my @parts = reverse split(/\./, $file);
    pop(@parts);        # never concider first part
    @parts;
}


=back

The following functions are only exported by explict request:

=over 4

=item add_type($type, @exts)

Associate a list of file extensions with the given media type.

Example:

    add_type("x-world/x-vrml" => qw(wrl vrml));

=cut

sub add_type 
{
    my($type, @exts) = @_;
    for my $ext (@exts) {
	$ext =~ s/^\.//;
	$suffixType{$ext} = $type;
    }
    $suffixExt{$type} = $exts[0] if @exts;
}


=item add_encoding($type, @ext)

Associate a list of file extensions with and encoding type.

Example:

 add_encoding("x-gzip" => "gz");

=cut

sub add_encoding
{
    my($type, @exts) = @_;
    for my $ext (@exts) {
	$ext =~ s/^\.//;
	$suffixEncoding{$ext} = $type;
    }
}


=item read_media_types(@files)

Parse a media types file from disk and add the type mappings found there.

Example:

    read_media_types("conf/mime.types");

=cut

sub read_media_types 
{
    my(@files) = @_;

    local($/, $_) = ("\n", undef);  # ensure correct $INPUT_RECORD_SEPARATOR

    my @priv_files = ();
    push(@priv_files, "$ENV{HOME}/.media.types", "$ENV{HOME}/.mime.types")
	if defined $ENV{HOME};  # Some doesn't have a home (for instance Win32)

    # Try to locate "media.types" file, and initialize %suffixType from it
    my $typefile;
    unless (@files) {
	@files = map {"$_/LWP/media.types"} @INC;
	push @files, @priv_files;
    }
    for $typefile (@files) {
	local(*TYPE);
	open(TYPE, $typefile) || next;
        LWP::Debug::debug("Reading media types from $typefile");
	while (<TYPE>) {
	    next if /^\s*#/; # comment line
	    next if /^\s*$/; # blank line
	    s/#.*//;         # remove end-of-line comments
	    my($type, @exts) = split(' ', $_);
	    add_type($type, @exts);
	}
	close(TYPE);
    }
}

1;

=back 

=head1 COPYRIGHT

Copyright 1995-1998 Gisle Aas.

This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

=cut

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女久久久久久| 国产精品一区二区不卡| 激情欧美日韩一区二区| 色老综合老女人久久久| 久久久久国产一区二区三区四区 | 国产亚洲福利社区一区| 亚洲综合视频网| 成人免费看片app下载| 欧美一区二区二区| 亚洲成人一区在线| 色国产精品一区在线观看| 中文av字幕一区| 国内精品第一页| 精品欧美一区二区三区精品久久| 亚洲综合免费观看高清完整版| 成人久久视频在线观看| 精品国产乱码久久久久久浪潮 | 亚洲成人免费在线| 99v久久综合狠狠综合久久| 久久一区二区三区国产精品| 久久国内精品视频| 欧美精品一级二级三级| 视频一区二区三区在线| 一本色道久久综合狠狠躁的推荐| 国产精品久久久久影视| 成人丝袜高跟foot| 国产精品乱人伦一区二区| 国产福利91精品一区二区三区| 精品久久久久久久久久久久久久久久久 | 日本va欧美va欧美va精品| 欧美自拍偷拍午夜视频| 亚洲精品国产无天堂网2021| 99久久99久久精品免费看蜜桃| 中文字幕精品一区二区精品绿巨人| 国产福利一区二区三区在线视频| 亚洲精品在线免费观看视频| 国产麻豆精品在线| 久久久天堂av| a级高清视频欧美日韩| 国产精品成人免费在线| 91免费精品国自产拍在线不卡| 亚洲一区二区三区四区在线免费观看| 91国产精品成人| 日韩一区精品字幕| 日韩网站在线看片你懂的| 韩国精品一区二区| 欧美国产综合一区二区| 91网址在线看| 日韩精彩视频在线观看| 久久丝袜美腿综合| 972aa.com艺术欧美| 亚洲一区二区欧美| 欧美电视剧免费观看| 国产a区久久久| 一区二区三区久久久| 欧美一区二区三区系列电影| 国产乱码精品一区二区三区忘忧草| 国产精品免费视频一区| 欧美日韩在线播放| 精彩视频一区二区三区| 亚洲日本电影在线| 日韩精品在线一区二区| 粉嫩av亚洲一区二区图片| 一区二区三区欧美视频| 久久午夜老司机| 日本韩国视频一区二区| 九九九精品视频| 一区二区三区不卡在线观看| 欧美成人a∨高清免费观看| av高清久久久| 久久国产视频网| 亚洲你懂的在线视频| 精品毛片乱码1区2区3区| 色先锋久久av资源部| 精品在线免费视频| 亚洲国产中文字幕在线视频综合| 精品av综合导航| 欧美三级电影网| 成人av高清在线| 精品一区二区在线观看| 亚洲五码中文字幕| 一区二区中文视频| 欧美大尺度电影在线| 欧美三区在线观看| 91尤物视频在线观看| 国产在线看一区| 日本一不卡视频| 亚洲国产欧美在线| 曰韩精品一区二区| 国产精品久久久久久久蜜臀 | 国产精品沙发午睡系列990531| 9191国产精品| 欧美日韩一区中文字幕| 色av成人天堂桃色av| 成人sese在线| 国产黄人亚洲片| 狠狠色综合日日| 蜜桃视频一区二区| 丝袜亚洲另类丝袜在线| 亚洲成人精品一区二区| 亚洲黄色在线视频| 一区二区三区在线观看视频| 国产精品欧美经典| 中文字幕乱码一区二区免费| 久久久99精品久久| 久久亚洲一区二区三区明星换脸| 日韩精品一区二区三区视频播放| 91精品国产综合久久香蕉麻豆 | 日本美女一区二区三区视频| 五月天激情综合| 五月开心婷婷久久| 五月综合激情日本mⅴ| 亚洲成人自拍偷拍| 午夜免费久久看| 首页综合国产亚洲丝袜| 青青草97国产精品免费观看 | 久久美女艺术照精彩视频福利播放 | 欧美午夜电影网| 欧美中文字幕一区| 欧美日韩一区二区三区在线看 | 欧美国产1区2区| 国产精品午夜在线| 18涩涩午夜精品.www| 亚洲日本在线看| 亚洲国产成人tv| 日本视频一区二区| 狠狠色2019综合网| 国产91精品露脸国语对白| 99久久综合色| 欧美视频日韩视频| 日韩欧美一区二区久久婷婷| 精品国产亚洲一区二区三区在线观看| 国产片一区二区三区| 一区二区三区产品免费精品久久75| 亚洲成人先锋电影| 国产一区999| 91影院在线免费观看| 91精品国产福利在线观看| ww久久中文字幕| 亚洲图片你懂的| 天天综合色天天| 国产精品自在在线| 色噜噜狠狠色综合中国| 欧美大度的电影原声| 中文字幕一区在线观看视频| 亚洲国产欧美在线人成| 国产成人精品综合在线观看 | 五月婷婷欧美视频| 国产另类ts人妖一区二区| 91免费视频观看| 精品国产一区二区在线观看| 亚洲品质自拍视频| 国产一区二区三区在线观看精品| 99v久久综合狠狠综合久久| 欧美一区二区三区在线观看 | 国产中文字幕精品| 91欧美一区二区| 精品久久久久久久久久久久久久久久久 | 国产精选一区二区三区| 欧美色图免费看| 国产女人aaa级久久久级| 午夜日韩在线电影| 不卡的av中国片| 久久亚洲精品小早川怜子| 亚洲最大的成人av| 从欧美一区二区三区| 日韩欧美精品在线| 亚洲电影欧美电影有声小说| fc2成人免费人成在线观看播放 | 一区二区三区在线视频免费| 韩国一区二区在线观看| 欧美精品一卡二卡| 亚洲综合一二三区| 99久久久久久| 亚洲国产精品二十页| 久久成人免费网| 欧美日韩二区三区| 夜夜嗨av一区二区三区中文字幕| 成人黄色免费短视频| 精品精品国产高清一毛片一天堂| 亚洲高清视频的网址| 91一区二区三区在线播放| 中文字幕不卡三区| 国产成a人无v码亚洲福利| 亚洲精品在线网站| 精品综合免费视频观看| 欧美精品久久久久久久多人混战| 亚洲蜜臀av乱码久久精品蜜桃| av在线播放一区二区三区| 国产欧美一区二区三区网站| 国内一区二区视频| 久久免费视频一区| 黑人巨大精品欧美一区| 欧美成人在线直播| 国产在线视视频有精品| 久久色在线视频| 国产一区二区网址| 日本一区二区久久| 成人动漫av在线| 亚洲人亚洲人成电影网站色|