Mercurial > dirlist-php
comparison index.php @ 3:9ea8be5b28d1
"refactor".
| author | edogawaconan <me@myconan.net> |
|---|---|
| date | Tue, 21 Oct 2014 18:01:43 +0900 |
| parents | 9b5884ba214a |
| children | 7812af1c23ae |
comparison
equal
deleted
inserted
replaced
| 2:9b5884ba214a | 3:9ea8be5b28d1 |
|---|---|
| 22 function h($string) { return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } | 22 function h($string) { return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); } |
| 23 function a($string) { return preg_replace("#(%2F)+#", "/", rawurlencode($string)); } | 23 function a($string) { return preg_replace("#(%2F)+#", "/", rawurlencode($string)); } |
| 24 function link_to($target, $title) { | 24 function link_to($target, $title) { |
| 25 return("<a href=\"".a($target)."\">".h($title)."</a>"); | 25 return("<a href=\"".a($target)."\">".h($title)."</a>"); |
| 26 } | 26 } |
| 27 function print_header() { | 27 function path_tree_header() { |
| 28 global $link_prefix, $link_base, $to_dir; | 28 global $link_prefix, $link_base, $to_dir; |
| 29 $path_tree = link_to('/', '[root]') . "/"; | 29 $path_tree = link_to('/', '[root]') . "/"; |
| 30 foreach ($to_dir as $level => $dir) { | 30 foreach ($to_dir as $level => $dir) { |
| 31 if($dir) { | 31 if($dir) { |
| 32 $link = "/"; | 32 $link = "/"; |
| 33 for ($i = 0; $i <= $level; $i++) { $link .= "$to_dir[$i]/"; } | 33 for ($i = 0; $i <= $level; $i++) { $link .= "$to_dir[$i]/"; } |
| 34 $path_tree .= link_to($link, $dir)."/"; | 34 $path_tree .= link_to($link, $dir)."/"; |
| 35 } | 35 } |
| 36 } | 36 } |
| 37 header('Content-Type: text/html; charset=utf-8'); | 37 return "Index of $path_tree"; |
| 38 echo "<!doctype html> | |
| 39 <meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\"> | |
| 40 <title>Index of ", h(rtrim($link_base,"/")."/"), "</title> | |
| 41 <body> | |
| 42 <h1>Index of $path_tree</h1>"; | |
| 43 } | 38 } |
| 39 function title() { | |
| 40 global $link_base; | |
| 41 return "Index of ".h(rtrim($link_base,"/")."/"); | |
| 42 } | |
| 43 | |
| 44 function nice_size($size) { | 44 function nice_size($size) { |
| 45 static $unit = array('B', 'KB', 'MB', 'GB', 'TB'); | 45 $thousand_units = array('ko', 'Mo', 'Go', 'To', 'Po'); |
| 46 for ($i = 0; $size >= 1000 && $i < count($unit); $i++) { $size /= 1000; } | 46 |
| 47 if ($i == 0) { return(sprintf("%d %s", $size, $unit[$i])); } | 47 $return_format = "%d %s"; |
| 48 else { return(sprintf("%.2f %s", $size, $unit[$i])); } | 48 |
| 49 if ($size <= 1) { | |
| 50 $return_unit = "octet"; | |
| 51 } elseif ($size < 10000) { | |
| 52 $return_unit = "octets"; | |
| 53 } else { | |
| 54 $size /= 1000; | |
| 55 for ($i = 0; $size >= 1000 && $i < count($thousand_units); $i++) { $size /= 1000; } | |
| 56 $return_format = "%.2f %s"; | |
| 57 $return_unit = $thousand_units[$i]; | |
| 58 } | |
| 59 return sprintf($return_format, $size, $return_unit); | |
| 49 } | 60 } |
| 61 | |
| 50 function file_rows($files, $is_dir) { | 62 function file_rows($files, $is_dir) { |
| 51 global $path, $link_base, $link_prefix; | 63 global $path, $link_base, $link_prefix; |
| 52 static $unit = array('B', 'KB', 'MB', 'GB', 'TB'); | 64 |
| 53 $file_rows = ""; | 65 $file_rows = ""; |
| 54 if ($is_dir) { | 66 if ($is_dir) { |
| 55 $file_suffix = "/"; | 67 $file_suffix = "/"; |
| 56 if($link_base != $link_prefix) { | 68 if($link_base != $link_prefix) { |
| 57 $file_rows .= "<tr><td colspan=3>".link_to(dirname($link_base),"..")."</td></tr>"; | 69 $file_rows .= "<tr><td colspan=3>".link_to(dirname($link_base)."/","..")."</td></tr>"; |
| 58 } | 70 } |
| 59 } else { $file_suffix = ""; } | 71 } else { $file_suffix = ""; } |
| 72 | |
| 60 foreach($files as $file) { | 73 foreach($files as $file) { |
| 61 $file_stat = stat("$path/".$file); | 74 $file_stat = stat("$path/".$file); |
| 62 $file_rows .= "<tr><td>". | 75 |
| 63 link_to("$link_base/".$file, $file.$file_suffix)."</td><td>". | 76 $file_rows .= "<tr>"; |
| 64 h(strftime("%a %d-%b-%G %H:%M", $file_stat['mtime']))."</td><td>"; | 77 $file_rows .= "<td>".link_to("$link_base/".$file.$file_suffix, $file.$file_suffix)."</td>"; |
| 78 | |
| 79 $file_rows .= "<td>"; | |
| 65 if ($is_dir) { $file_rows .= "[dir]"; } | 80 if ($is_dir) { $file_rows .= "[dir]"; } |
| 66 else { $file_rows .= nice_size($file_stat['size']); } | 81 else { $file_rows .= nice_size($file_stat['size']); } |
| 82 $file_rows .= "</td>"; | |
| 83 | |
| 84 $file_rows .= "<td>".h(strftime("%Y-%m-%d %H:%M %Z", $file_stat['mtime']))."</td>"; | |
| 85 | |
| 67 $file_rows .= "</tr>"; | 86 $file_rows .= "</tr>"; |
| 68 } | 87 } |
| 69 return $file_rows; | 88 return $file_rows; |
| 70 } | 89 } |
| 71 function print_list() { | |
| 72 global $dirs, $files; | |
| 73 echo "<table><thead><tr>", | |
| 74 "<td>File</td>", | |
| 75 "<td>Date</td>", | |
| 76 "<td>Size</td>", | |
| 77 "</tr></thead>", | |
| 78 "<tbody>", file_rows($dirs, true), file_rows($files, false), "</tbody>", | |
| 79 "</table>"; | |
| 80 } | |
| 81 function print_footer() { | |
| 82 echo "</body>"; | |
| 83 } | |
| 84 print_header(); | |
| 85 print_list(); | |
| 86 print_footer(); | |
| 87 ?> | 90 ?> |
| 91 <?php header('Content-Type: text/html; charset=utf-8'); ?> | |
| 92 <!doctype html> | |
| 93 <head> | |
| 94 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> | |
| 95 <title><?php echo title(); ?></title> | |
| 96 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> | |
| 97 <style type="text/css"> | |
| 98 * { box-sizing: border-box; } | |
| 99 body { | |
| 100 font-family: Segoe UI, sans-serif; | |
| 101 font-size: 14px; | |
| 102 } | |
| 103 h1 { margin: 5px; } | |
| 104 table { | |
| 105 width: 100%; | |
| 106 } | |
| 107 th:first-child, td:first-child { | |
| 108 width: 100%; | |
| 109 white-space: pre-wrap; | |
| 110 word-wrap: break-word; | |
| 111 word-break: break-all; | |
| 112 } | |
| 113 tr { | |
| 114 position: relative; | |
| 115 } | |
| 116 th, td { | |
| 117 white-space: nowrap; | |
| 118 padding: 2px 5px; | |
| 119 } | |
| 120 | |
| 121 @media (min-width: 768px) { | |
| 122 th { background: #ccc; } | |
| 123 tr:nth-child(even) { background: #eee; } | |
| 124 tr:hover { background: #ddd; } | |
| 125 } | |
| 126 | |
| 127 @media (max-width: 767px) { | |
| 128 table { | |
| 129 border-spacing: 0 10px; | |
| 130 } | |
| 131 th { display: none; } | |
| 132 tr { | |
| 133 background: #eee; | |
| 134 } | |
| 135 td { | |
| 136 display: inline-block; | |
| 137 } | |
| 138 td:first-child { | |
| 139 background: #ddd; | |
| 140 padding: 5px; | |
| 141 } | |
| 142 table a { | |
| 143 font-size: 18px; | |
| 144 display: block; | |
| 145 } | |
| 146 } | |
| 147 </style> | |
| 148 </head> | |
| 149 <body> | |
| 150 <h1><?php echo path_tree_header(); ?></h1> | |
| 151 | |
| 152 <table> | |
| 153 <thead><tr> | |
| 154 <th>File</th> | |
| 155 <th>Size</th> | |
| 156 <th>Date</th> | |
| 157 </tr></thead> | |
| 158 <tbody> | |
| 159 <?php echo file_rows($dirs, true); ?> | |
| 160 <?php echo file_rows($files, false); ?> | |
| 161 </tbody> | |
| 162 </table> | |
| 163 </body> |
