Mercurial > dirlist-php
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 { |
