Re: Obtaining the Apache Content-type for a file
André Warnier <[email protected]>
| Newsgroups | gmane.comp.apache.mod-perl |
|---|---|
| Message-ID | <[email protected]> |
André Warnier wrote: > David Booth wrote: >> On Fri, 2012-01-13 at 12:09 -0500, David Booth wrote: >>> On Fri, 2012-01-13 at 16:06 +0100, André Warnier wrote: >>>> I have a PerlResponseHandler which processes some kind of "logical >>>> document-id" provided in a request, locates the corresponding "real >>>> document" on the filesystem, and returns it to the client via >>>> sendfile(). >>>> At the moment, this handler uses its own custom logic to determine >>>> the MIME type of the document and return it to the client as a >>>> Content-type HTTP header. >>>> >>>> My question is : instead of this custom logic, does there exist a >>>> way, via mod_perl, to obtain this target file's MIME-type from >>>> Apache, using Apache's own logic (mod_mime, AddType etc..) for that ? >>> This isn't exactly what you asked for, but if you don't need to server >>> anything else along with it, then perhaps you could use >>> internal_redirect >>> http://perl.apache.org/docs/2.0/api/Apache2/SubRequest.html#C_internal_redirect_ >>> >>> and let Apache set the Content-Type for you. >>> If you do find the direct answer to your question, please post it, as >>> I'm interested in this question also. >> >> P.S. I just noticed lookup_file: >> http://perl.apache.org/docs/2.0/api/Apache2/SubRequest.html#C_lookup_file_ >> >> I haven't tried it, but it sounds like it *might* do what you want. >> > Thanks. I will have a look at both. I don't think I an use the > internal_redirect in my case, > lookup_file sounds interesting. I didn't think of looking there. > I had a look, and it looks a bit like a circular argument.. I can do $r->lookup_file($my_path), but "lookup_file" is a method of Apache2::SubRequest (and returns an Apache2::SubRequest object). Apache2::SubRequest is a subclass of Apache2::RequestRec. Apache2::RequestRec has a "finfo" method, which returns an APR::Finfo object. The APR::Finfo object has wealth of information (see below), unfortunately apparently not what I'm after (the MIME type of $mypath, as resolved by mod_mime e.g.). $device = $finfo->device; # (stat $file)[0] $inode = $finfo->inode; # (stat $file)[1] # stat returns an octal number while protection is hex $prot = $finfo->protection; # (stat $file)[2] $nlink = $finfo->nlink; # (stat $file)[3] $gid = $finfo->group; # (stat $file)[4] $uid = $finfo->user; # (stat $file)[5] $size = $finfo->size; # (stat $file)[7] $atime = $finfo->atime; # (stat $file)[8] $mtime = $finfo->mtime; # (stat $file)[9] $ctime = $finfo->ctime; # (stat $file)[10] $csize = $finfo->csize; # consumed size: not portable! $filetype = $finfo->filetype; # file/dir/socket/etc $fname = $finfo->fname; $name = $finfo->name; # in filesystem case: Any other idea anyone ? We're now two to be interested in the answer.