cvs: docweb /www redirect.php

[email protected] ("Nuno Lopes")
Newsgroups php.doc.web
Message-ID <cvsnlopess1116869460@cvsserver>
nlopess		Mon May 23 13:31:00 2005 EDT

  Modified files:              
    /docweb/www	redirect.php 
  Log:
  fix bug that prevented files from beeing downloaded, because we were including them as PHP files.
  cache the sanitized URI
  add a minimal mime types table
  
http://cvs.php.net/diff.php/docweb/www/redirect.php?r1=1.4&r2=1.5&ty=u
Index: docweb/www/redirect.php
diff -u docweb/www/redirect.php:1.4 docweb/www/redirect.php:1.5
--- docweb/www/redirect.php:1.4	Fri Apr 15 14:07:42 2005
+++ docweb/www/redirect.php	Mon May 23 13:30:58 2005
@@ -15,11 +15,20 @@
 +----------------------------------------------------------------------+
 | Authors:          Sean Coates <[email protected]>                         |
 +----------------------------------------------------------------------+
-$Id: redirect.php,v 1.4 2005/04/15 18:07:42 nlopess Exp $
+$Id: redirect.php,v 1.5 2005/05/23 17:30:58 nlopess Exp $
 */
 
 require_once('../include/lib_proj_lang.inc.php');
 
+/* mime types for downloading files */
+$mime_types = array(
+    'gz'     => 'application/x-gunzip',
+    'tgz'    => 'application/x-tar-gz',
+    'tar.gz' => 'application/x-tar-gz',
+    'zip'    => 'application/x-zip-compressed'
+);
+
+
 function part_is_project($part) {
     return isset($GLOBALS['PROJECTS'][$part]);
 }
@@ -49,7 +58,9 @@
 }
 
 function part_is_valid_uri($part) {
-    return file_exists(part_get_filename($part));
+    if (file_exists($uri = part_get_filename($part)))
+        return $uri;
+    return false;
 }
 
 $parts = explode('/', $_SERVER['REQUEST_URI'], 4);
@@ -63,20 +74,35 @@
     } elseif (part_is_language($part)) {
         $language = $part;
 
-    } else {
+    } elseif ($part) {
         $uri .= "/$part";
     }
 }
 
-if (!$uri || !part_is_valid_uri($uri)) {
+if (!$uri || !($uri = part_is_valid_uri($uri))) {
     unset($uri);
 }
 
 
 // we have a valid URI, answer the request
 if (isset($uri)) {
-  header($_SERVER['SERVER_PROTOCOL']." 200 Found (magic redirect)");
-  require(part_get_filename($uri));
+    header($_SERVER['SERVER_PROTOCOL']." 200 Found (magic redirect)");
+
+    // If it's a PHP file include it, otherwise pass it through
+    if (substr($uri, -4) == '.php') {
+        require(part_get_filename($uri));
+    } else {
+        // get the file mime type
+        foreach ($mime_types as $ext => $type) {
+            if (substr($uri, -strlen(ext)) == $ext) {
+                $mime = $type;
+                break;
+            }
+        }
+
+        header("Content-Type: $mime");
+        readfile($uri);
+    }
 } else {
   // no resource found:
   header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.