summaryrefslogtreecommitdiff
path: root/includes/StreamFile.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2006-10-11 18:12:39 +0000
committerPierre Schmitz <pierre@archlinux.de>2006-10-11 18:12:39 +0000
commit183851b06bd6c52f3cae5375f433da720d410447 (patch)
treea477257decbf3360127f6739c2f9d0ec57a03d39 /includes/StreamFile.php
MediaWiki 1.7.1 wiederhergestellt
Diffstat (limited to 'includes/StreamFile.php')
-rw-r--r--includes/StreamFile.php72
1 files changed, 72 insertions, 0 deletions
diff --git a/includes/StreamFile.php b/includes/StreamFile.php
new file mode 100644
index 00000000..83417185
--- /dev/null
+++ b/includes/StreamFile.php
@@ -0,0 +1,72 @@
+<?php
+/** */
+
+/** */
+function wfStreamFile( $fname ) {
+ $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;
+ }
+
+ header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s', $stat['mtime'] ) . ' GMT' );
+
+ // Cancel output buffering and gzipping if set
+ while( $status = ob_get_status() ) {
+ ob_end_clean();
+ if( $status['name'] == 'ob_gzhandler' ) {
+ header( 'Content-Encoding:' );
+ }
+ }
+
+ $type = wfGetType( $fname );
+ if ( $type and $type!="unknown/unknown") {
+ header("Content-type: $type");
+ } else {
+ header('Content-type: application/x-wiki');
+ }
+
+ if ( !empty( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) {
+ $modsince = preg_replace( '/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
+ $sinceTime = strtotime( $modsince );
+ if ( $stat['mtime'] <= $sinceTime ) {
+ header( "HTTP/1.0 304 Not Modified" );
+ return;
+ }
+ }
+
+ header( 'Content-Length: ' . $stat['size'] );
+
+ readfile( $fname );
+}
+
+/** */
+function wfGetType( $filename ) {
+ global $wgTrivialMimeDetection;
+
+ # trivial detection by file extension,
+ # used for thumbnails (thumb.php)
+ if ($wgTrivialMimeDetection) {
+ $ext= strtolower(strrchr($filename, '.'));
+
+ switch ($ext) {
+ case '.gif': return 'image/gif';
+ case '.png': return 'image/png';
+ case '.jpg': return 'image/jpeg';
+ case '.jpeg': return 'image/jpeg';
+ }
+
+ return 'unknown/unknown';
+ }
+ else {
+ $magic=& wfGetMimeMagic();
+ return $magic->guessMimeType($filename); //full fancy mime detection
+ }
+}
+
+?>