comparison index.php @ 23:949398173ecb

Much simpler setup with $request_filename. Configuration change, bump version.
author edogawaconan <me@myconan.net>
date Thu, 23 Oct 2014 21:47:51 +0900
parents 431682ff9169
children 69b2c15cadfb
comparison
equal deleted inserted replaced
22:431682ff9169 23:949398173ecb
1 <?php 1 <?php
2 define('DL_VERSION', '1.0.0'); 2 define('DL_VERSION', '2.0.0');
3 // Required for strftime(). Set to UTC because :internet:. 3 // Required for strftime(). Set to UTC because :internet:.
4 date_default_timezone_set('UTC'); 4 date_default_timezone_set('UTC');
5 5
6 // $path: actual requested path, with $alias_prefix removed, relative to $root. 6 // $uri: web-facing path
7 $path = $_SERVER["REQUEST_URI"]; 7 $uri = $_SERVER["REQUEST_URI"];
8 $query_string_start = strpos($path, "?"); 8 $query_string_start = strpos($uri, "?");
9 if ($query_string_start !== false) { 9 if ($query_string_start !== false) {
10 $path = substr($path, 0, $query_string_start); 10 $uri = substr($uri, 0, $query_string_start);
11 } 11 }
12 $path = urldecode($path); 12 $uri = urldecode($uri);
13 13
14 $prefix = $_SERVER["DL_PREFIX"]; 14 // $dir: filesystem path
15 if ($prefix === null) { $prefix = ""; } 15 $dir = $_SERVER["DL_DIR"];
16 16 if ($dir === null || $dir === "") { $dir = $_SERVER["DOCUMENT_ROOT"] . $uri; }
17 $path = substr($path, strlen($prefix)); 17
18 if ($path === false) { $path = "/"; } 18 if (realpath($dir) === false) {
19
20 // root of directory listing.
21 $root = $_SERVER["DL_ROOT"];
22 if ($root === null || $root === "") { $root = $_SERVER["DOCUMENT_ROOT"]; }
23
24 if (realpath($root . $path) === false) {
25 header("HTTP/1.0 404 Not Found"); 19 header("HTTP/1.0 404 Not Found");
26 } elseif (substr($path, -1) !== "/") { 20 } elseif (substr($uri, -1) !== "/") {
27 header("Location: " . $path . "/"); 21 header("Location: " . $uri . "/");
28 } 22 }
29 23
30 if (http_response_code() !== 200) { exit; } 24 if (http_response_code() !== 200) { exit; }
31 25
32 $dir_handle = @opendir($root . $path); 26 $dir_handle = @opendir($dir);
33 $files = array(); 27 $files = array();
34 $dirs = array(); 28 $dirs = array();
35 while (($file = readdir($dir_handle)) !== false) { 29 while (($file = readdir($dir_handle)) !== false) {
36 if ($file === "." || $file === "..") { continue; } 30 if ($file === "." || $file === "..") { continue; }
37 elseif (is_dir($root . $path . $file)) { $dirs[] = $file; } 31 elseif (is_dir($dir . $file)) { $dirs[] = $file; }
38 else { $files[] = $file; } 32 else { $files[] = $file; }
39 } 33 }
40 sort($files); 34 sort($files);
41 sort($dirs); 35 sort($dirs);
42 36
63 return sprintf($return_format, $size, $return_unit); 57 return sprintf($return_format, $size, $return_unit);
64 } 58 }
65 // END UTILITY 59 // END UTILITY
66 60
67 function tree_link() { 61 function tree_link() {
68 global $path, $prefix; 62 global $uri;
69 63
70 $path_array = explode("/", trim($path, "/")); 64 $uri_array = explode("/", trim($uri, "/"));
71 array_unshift($path_array, trim($prefix, "/"));
72 65
73 $tree_path = "/"; 66 $tree_path = "/";
74 if ($prefix === "") { $tree_link = link_to($tree_path, "[root]"); } 67 $tree_link = link_to($tree_path, "[root]");
75 $tree_link .= "/"; 68 $tree_link .= "/";
76 69
77 foreach ($path_array as $p) { 70 foreach ($uri_array as $p) {
78 if ($p === "") { continue; } 71 if ($p === "") { continue; }
79 $tree_path .= $p . "/"; 72 $tree_path .= $p . "/";
80 $tree_link .= link_to($tree_path, $p) . "/"; 73 $tree_link .= link_to($tree_path, $p) . "/";
81 } 74 }
82 75
83 return $tree_link; 76 return $tree_link;
84 } 77 }
85 78
86 function file_rows($files, $is_dir) { 79 function file_rows($files, $is_dir) {
87 global $path, $root, $prefix; 80 global $dir, $uri;
88 81
89 $file_rows = ""; 82 $file_rows = "";
90 $file_suffix = ""; 83 $file_suffix = "";
91 84
92 if ($is_dir) { 85 if ($is_dir) {
93 $file_suffix = "/"; 86 $file_suffix = "/";
94 87
95 if ($path !== "/") { 88 if ($uri !== "/") {
96 $file_rows .= "<tr><td colspan=3>" . link_to(dirname($prefix . $path) . "/", "[up]") . "</td></tr>"; 89 $file_rows .= "<tr><td colspan=3>" . link_to(dirname($uri) . "/", "[up]") . "</td></tr>";
97 } 90 }
98 } 91 }
99 92
100 foreach($files as $file) { 93 foreach($files as $file) {
101 $file_stat = stat($root . $path . "/". $file); 94 $file_stat = stat($dir . "/". $file);
102 95
103 $file_rows .= "<tr>"; 96 $file_rows .= "<tr>";
104 $file_rows .= "<td>".link_to($file . $file_suffix, $file . $file_suffix)."</td>"; 97 $file_rows .= "<td>".link_to($file . $file_suffix, $file . $file_suffix)."</td>";
105 98
106 $file_rows .= "<td>"; 99 $file_rows .= "<td>";
117 ?> 110 ?>
118 <?php header('Content-Type: text/html; charset=utf-8'); ?> 111 <?php header('Content-Type: text/html; charset=utf-8'); ?>
119 <!doctype html> 112 <!doctype html>
120 <head> 113 <head>
121 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 114 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
122 <title>Index of <?php echo h($prefix . $path); ?></title> 115 <title>Index of <?php echo h($uri); ?></title>
123 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 116 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
124 <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/css/lightbox.css"> 117 <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/css/lightbox.css">
125 <style type="text/css"> 118 <style type="text/css">
126 .lb-data a { color: #ccc; } 119 .lb-data a { color: #ccc; }
127 .lightbox { 120 .lightbox {