aboutsummaryrefslogtreecommitdiffstats
path: root/includes/StreamFile.php
diff options
context:
space:
mode:
authorTim Starling <tstarling@users.mediawiki.org>2005-04-16 04:33:34 +0000
committerTim Starling <tstarling@users.mediawiki.org>2005-04-16 04:33:34 +0000
commit9411d91b49b50de73f878d7e677d5209030d751a (patch)
tree2f3f889a369b1e68c922cb30790ab5c3ca400c00 /includes/StreamFile.php
parent16bcc74aa3c847c0923d4030766ce2a677743615 (diff)
downloadmediawikicore-9411d91b49b50de73f878d7e677d5209030d751a.tar.gz
mediawikicore-9411d91b49b50de73f878d7e677d5209030d751a.zip
Optional thumbnail generation by client request, using thumb.php. This removes any need for access to image files on page view. Experimental, some aspects still haven't been tested.
Notes
Notes: http://mediawiki.org/wiki/Special:Code/MediaWiki/8378
Diffstat (limited to 'includes/StreamFile.php')
-rw-r--r--includes/StreamFile.php157
1 files changed, 157 insertions, 0 deletions
diff --git a/includes/StreamFile.php b/includes/StreamFile.php
new file mode 100644
index 000000000000..07f374d35e68
--- /dev/null
+++ b/includes/StreamFile.php
@@ -0,0 +1,157 @@
+<?php
+
+function wfStreamFile( $fname ) {
+ global $wgSquidMaxage;
+ $stat = stat( $fname );
+ if ( !$stat ) {
+ header( 'HTTP/1.0 404 Not Found' );
+ echo "<html><body>
+<h1>File not found</h1>
+<p>Although this PHP script ({$_SERVER['SCRIPT_NAME']}) exists, the file requested for output
+does not.</p>
+</body></html>";
+ return;
+ }
+
+
+ $type = wfGetType( $fname );
+ if ( $type ) {
+ header("Content-type: $type");
+ } else {
+ header('Content-type: application/x-wiki');
+ }
+ header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', $stat['mtime'] ) );
+ header( "Cache-Control: s-maxage=$wgSquidMaxage, must-revalidate, max-age=0" );
+ readfile( $fname );
+ exit;
+}
+
+function wfGetType( $filename ) {
+ # There's probably a better way to do this
+ $types = <<<END_STRING
+application/andrew-inset ez
+application/mac-binhex40 hqx
+application/mac-compactpro cpt
+application/mathml+xml mathml
+application/msword doc
+application/octet-stream bin dms lha lzh exe class so dll
+application/oda oda
+application/ogg ogg
+application/pdf pdf
+application/postscript ai eps ps
+application/rdf+xml rdf
+application/smil smi smil
+application/srgs gram
+application/srgs+xml grxml
+application/vnd.mif mif
+application/vnd.ms-excel xls
+application/vnd.ms-powerpoint ppt
+application/vnd.wap.wbxml wbxml
+application/vnd.wap.wmlc wmlc
+application/vnd.wap.wmlscriptc wmlsc
+application/voicexml+xml vxml
+application/x-bcpio bcpio
+application/x-cdlink vcd
+application/x-chess-pgn pgn
+application/x-cpio cpio
+application/x-csh csh
+application/x-director dcr dir dxr
+application/x-dvi dvi
+application/x-futuresplash spl
+application/x-gtar gtar
+application/x-hdf hdf
+application/x-javascript js
+application/x-koan skp skd skt skm
+application/x-latex latex
+application/x-netcdf nc cdf
+application/x-sh sh
+application/x-shar shar
+application/x-shockwave-flash swf
+application/x-stuffit sit
+application/x-sv4cpio sv4cpio
+application/x-sv4crc sv4crc
+application/x-tar tar
+application/x-tcl tcl
+application/x-tex tex
+application/x-texinfo texinfo texi
+application/x-troff t tr roff
+application/x-troff-man man
+application/x-troff-me me
+application/x-troff-ms ms
+application/x-ustar ustar
+application/x-wais-source src
+application/xhtml+xml xhtml xht
+application/xslt+xml xslt
+application/xml xml xsl
+application/xml-dtd dtd
+application/zip zip
+audio/basic au snd
+audio/midi mid midi kar
+audio/mpeg mpga mp2 mp3
+audio/x-aiff aif aiff aifc
+audio/x-mpegurl m3u
+audio/x-pn-realaudio ram rm
+audio/x-pn-realaudio-plugin rpm
+audio/x-realaudio ra
+audio/x-wav wav
+chemical/x-pdb pdb
+chemical/x-xyz xyz
+image/bmp bmp
+image/cgm cgm
+image/gif gif
+image/ief ief
+image/jpeg jpeg jpg jpe
+image/png png
+image/svg+xml svg
+image/tiff tiff tif
+image/vnd.djvu djvu djv
+image/vnd.wap.wbmp wbmp
+image/x-cmu-raster ras
+image/x-icon ico
+image/x-portable-anymap pnm
+image/x-portable-bitmap pbm
+image/x-portable-graymap pgm
+image/x-portable-pixmap ppm
+image/x-rgb rgb
+image/x-xbitmap xbm
+image/x-xpixmap xpm
+image/x-xwindowdump xwd
+model/iges igs iges
+model/mesh msh mesh silo
+model/vrml wrl vrml
+text/calendar ics ifb
+text/css css
+text/richtext rtx
+text/rtf rtf
+text/sgml sgml sgm
+text/tab-separated-values tsv
+text/vnd.wap.wml wml
+text/vnd.wap.wmlscript wmls
+text/x-setext etx
+video/mpeg mpeg mpg mpe
+video/quicktime qt mov
+video/vnd.mpegurl mxu
+video/x-msvideo avi
+video/x-sgi-movie movie
+x-conference/x-cooltalk ice
+END_STRING;
+ // Needed for windows servers who use \r\n not \n
+ $endl = "
+";
+ $types = explode( $endl, $types );
+ if ( !preg_match( "/\.([^.]*?)$/", $filename, $matches ) ) {
+ return false;
+ }
+
+ foreach( $types as $type ) {
+ $extensions = explode( " ", $type );
+ for ( $i=1; $i<count( $extensions ); $i++ ) {
+ if ( $extensions[$i] == $matches[1] ) {
+ return $extensions[0];
+ }
+ }
+ }
+ return false;
+}
+
+?>