rtoss - Blame information for rev 7

Subversion Repositories:
Rev:
Rev Author Line No. Line
7 roytam 1 <?
2 /*
3 Directory Listing Script - Version 2
4 ====================================
5 Script Author: Ash Young <ash@evoluted.net>. www.evoluted.net
6 Layout: Manny <manny@tenka.co.uk>. www.tenka.co.uk
7  
8 REQUIREMENTS
9 ============
10 This script requires PHP and GD2 if you wish to use the
11 thumbnail functionality.
12  
13 INSTRUCTIONS
14 ============
15 1) Unzip all files
16 2) Edit this file, making sure everything is setup as required.
17 3) Upload to server
18 4) ??????
19 5) Profit!
20  
21 CONFIGURATION
22 =============
23 Edit the variables in this section to make the script work as
24 you require.
25  
26 Start Directory - To list the files contained within the current
27 directory enter '.', otherwise enter the path to the directory
28 you wish to list. The path must be relative to the current
29 directory.
30 */
31 $startdir = '.';
32  
33 /*
34 Show Thumbnails? - Set to true if you wish to use the
35 scripts auto-thumbnail generation capabilities.
36 This requires that GD2 is installed.
37 */
38 $showthumbnails = false;
39  
40 /*
41 Show Directories - Do you want to make subdirectories available?
42 If not set this to false
43 */
44 $showdirs = true;
45  
46 /*
47 Force downloads - Do you want to force people to download the files
48 rather than viewing them in their browser?
49 */
50 $forcedownloads = false;
51  
52 /*
53 Hide Files - If you wish to hide certain files or directories
54 then enter their details here. The values entered are matched
55 against the file/directory names. If any part of the name
56 matches what is entered below then it is now shown.
57 */
58 $hide = array(
59                                 'dlf',
60                                 'index.php',
61                                 'Thumbs',
62                                 '.htaccess',
63                                 '.htpasswd'
64                         );
65  
66 /*
67 Show index files - if an index file is found in a directory
68 to you want to display that rather than the listing output
69 from this script?
70 */
71 $displayindex = true;
72  
73 /*
74 Allow uploads? - If enabled users will be able to upload
75 files to any viewable directory. You should really only enable
76 this if the area this script is in is already password protected.
77 */
78 $allowuploads = true;
79  
80 /* Show delete button? */
81 $showdelete=true;
82  
83 /* Upload/Delete password */
84 $uppass = "uppass";
85  
86 /* Use PATH_INFO for the dirs? */
87 $usepathinfo=true;
88 /*
89 Overwrite files - If a user uploads a file with the same
90 name as an existing file do you want the existing file
91 to be overwritten?
92 */
93 $overwrite = false;
94  
95 /*
96 Index files - The follow array contains all the index files
97 that will be used if $displayindex (above) is set to true.
98 Feel free to add, delete or alter these
99 */
100  
101 $indexfiles = array (
102                                 'index.html',
103                                 'index.htm',
104                                 'index.php',
105                                 'default.htm',
106                                 'default.html'
107                         );
108  
109 /*
110 File Icons - If you want to add your own special file icons use
111 this section below. Each entry relates to the extension of the
112 given file, in the form <extension> => <filename>.
113 These files must be located within the dlf directory.
114 */
115 $filetypes = array (
116                                 'png' => 'jpg.gif',
117                                 'jpeg' => 'jpg.gif',
118                                 'bmp' => 'jpg.gif',
119                                 'jpg' => 'jpg.gif',
120                                 'gif' => 'gif.gif',
121                                 'zip' => 'archive.png',
122                                 'rar' => 'archive.png',
123                                 'exe' => 'exe.gif',
124                                 'setup' => 'setup.gif',
125                                 'txt' => 'text.png',
126                                 'htm' => 'html.gif',
127                                 'html' => 'html.gif',
128                                 'fla' => 'fla.gif',
129                                 'swf' => 'swf.gif',
130                                 'xls' => 'xls.gif',
131                                 'doc' => 'doc.gif',
132                                 'sig' => 'sig.gif',
133                                 'fh10' => 'fh10.gif',
134                                 'pdf' => 'pdf.gif',
135                                 'psd' => 'psd.gif',
136                                 'rm' => 'real.gif',
137                                 'mpg' => 'video.gif',
138                                 'mpeg' => 'video.gif',
139                                 'mov' => 'video2.gif',
140                                 'avi' => 'video.gif',
141                                 'eps' => 'eps.gif',
142                                 'gz' => 'archive.png',
143                                 'asc' => 'sig.gif',
144                         );
145 /*
146 That's it! You are now ready to upload this script to the server.
147  
148 Only edit what is below this line if you are sure that you know what you
149 are doing!
150 */
151 error_reporting(0);
152  
153 // cgi.fix_pathinfo Workaround
154 if(isset($_SERVER['ORIG_PATH_INFO'])) $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO'];
155  
156 // IIS Workaround
157 if(strpos($_SERVER['PATH_INFO'],$_SERVER['SCRIPT_NAME'])!==false) $_SERVER['PATH_INFO'] = substr($_SERVER['PATH_INFO'],strlen($_SERVER['SCRIPT_NAME']));
158  
159 function properSize($size,$maxcnt=0) {
160         $suffix=''; $suxAry=array("KB","MB","GB","TB");
161         $ccnt=$maxcnt?$maxcnt:count($suxAry);
162         for($cnt=0;$cnt<$ccnt;$cnt++)
163                 if($size > 1024) {$size/=1024; $suffix=$suxAry[$cnt];}
164         return $suffix?sprintf("%.1f",$size).$suffix:$size.'B';
165 }
166  
167 $myname=preg_replace('/.*\/+/', '', $_SERVER['PHP_SELF']);
168 $mypath=preg_replace("/$myname$/", '', $_SERVER['PHP_SELF']);
169 $myfilespath='http://'.$_SERVER['HTTP_HOST'].$mypath.'dlf';
170  
171 if(!function_exists('imagecreatetruecolor')) $showthumbnails = false;
172 $leadon = $startdir;
173 if($leadon=='.') $leadon = '';
174 if((substr($leadon, -1, 1)!='/') && $leadon!='') $leadon = $leadon . '/';
175 $startdir = $leadon;
176  
177 $cdir=isset($_GET['dir'])?$_GET['dir']:substr($_SERVER['PATH_INFO'],1);
178  
179 if($cdir) {
180         //check this is okay.
181  
182         if(substr($cdir, -1, 1)!='/') {
183                 $cdir = $cdir . '/';
184         }
185  
186         $dirok = true;
187         $dirnames = split('/', $cdir);
188         for($di=0; $di<sizeof($dirnames); $di++) {
189  
190                 if($di<(sizeof($dirnames)-2)) {
191                         $dotdotdir = $dotdotdir . $dirnames[$di] . '/';
192                 }
193  
194                 if($dirnames[$di] == '..') {
195                         $dirok = false;
196                 }
197         }
198  
199         if(substr($cdir, 0, 1)=='/') {
200                 $dirok = false;
201         }
202  
203         if($dirok) {
204                  $leadon = $leadon . $cdir;
205         }
206 }
207  
208 if($_GET['download'] && $forcedownloads) {
209         $file = str_replace('/', '', $_GET['download']);
210         $file = str_replace('..', '', $file);
211  
212         if(file_exists($leadon . $file)) {
213                 header("Content-type: application/x-download");
214                 header("Content-Length: ".filesize($leadon . $file));
215                 header('Content-Disposition: attachment; filename="'.$file.'"');
216                 readfile($leadon . $file);
217                 die();
218         }
219 }
220  
221  
222 if($allowuploads && $_FILES['file'] && $_POST['pass']==$uppass) {
223         $upload = true;
224         if(!$overwrite) {
225                 if(file_exists($leadon.$_FILES['file']['name'])) {
226                         $upload = false;
227                 }
228         }
229  
230         if($upload) {
231                 move_uploaded_file($_FILES['file']['tmp_name'], $leadon . $_FILES['file']['name']);
232                 @chmod(0666,$leadon . $_FILES['file']['name']);
233         }
234 }
235  
236 if($_POST['action']=="delete" && file_exists($leadon.$_POST['file']) && $_POST['pass']==$uppass) {
237                 @unlink($leadon.$_POST['file']);
238 }
239  
240 $opendir = $leadon;
241 if(!$leadon) $opendir = '.';
242 if(!file_exists($opendir)) {
243         $opendir = '.';
244         $leadon = $startdir;
245 }
246  
247 clearstatcache();
248 if ($handle = opendir($opendir)) {
249         while (false !== ($file = readdir($handle))) {
250                 //first see if this file is required in the listing
251                 if ($file == "." || $file == "..")  continue;
252                 $discard = false;
253                 for($hi=0;$hi<sizeof($hide);$hi++) {
254                         if(strpos($file, $hide[$hi])!==false) {
255                                 $discard = true;
256                         }
257                 }
258  
259                 if($discard) continue;
260                 if (@filetype($leadon.$file) == "dir") {
261                         if(!$showdirs) continue;
262  
263                         $n++;
264                         if($_GET['sort']=="date") {
265                                 $key = @filemtime($leadon.$file) . ".$n";
266                         }
267                         else {
268                                 $key = $n;
269                         }
270                         $dirs[$key] = $file . "/";
271                 }
272                 else {
273                         $n++;
274                         if($_GET['sort']=="date") {
275                                 $key = @filemtime($leadon.$file) . ".$n";
276                         }
277                         elseif($_GET['sort']=="size") {
278                                 $key = @filesize($leadon.$file) . ".$n";
279                         }
280                         else {
281                                 $key = $n;
282                         }
283                         $files[$key] = $file;
284  
285                         if($displayindex) {
286                                 if(in_array(strtolower($file), $indexfiles)) {
287                                         header("Location: $mypath$leadon$file");
288                                         die();
289                                 }
290                         }
291                 }
292         }
293         closedir($handle);
294 }
295  
296 //sort our files
297 if($_GET['sort']=="date") {
298         @ksort($dirs, SORT_NUMERIC);
299         @ksort($files, SORT_NUMERIC);
300 }
301 elseif($_GET['sort']=="size") {
302         @natcasesort($dirs);
303         @ksort($files, SORT_NUMERIC);
304 }
305 else {
306         @natcasesort($dirs);
307         @natcasesort($files);
308 }
309  
310 //order correctly
311 if($_GET['order']=="desc" && $_GET['sort']!="size") {$dirs = @array_reverse($dirs);}
312 if($_GET['order']=="desc") {$files = @array_reverse($files);}
313 $dirs = @array_values($dirs); $files = @array_values($files);
314  
315 $pathtitle=str_replace('//','/',dirname($_SERVER['PHP_SELF']).'/'.$leadon);
316 $pathtitle=str_replace('\\','',$pathtitle);
317 ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
318 <html xmlns="http://www.w3.org/1999/xhtml">
319 <head>
320 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
321 <title>Directory Listing of <?=$pathtitle;?></title>
322 <link rel="stylesheet" type="text/css" href="<?=$myfilespath;?>/styles.css" />
323 <?
324 if($showthumbnails) {
325 ?>
326 <script language="javascript" type="text/javascript">
327 <!--
328 function o(n, i) {
329         document.images['thumb'+n].src = '<?=$myfilespath;?>/i.php?f='+i;
330  
331 }
332  
333 function f(n) {
334         document.images['thumb'+n].src = '<?=$myfilespath;?>/trans.gif';
335 }
336 //-->
337 </script>
338 <?
339 }
340 ?>
341 <!--[if IE]>
342 <style type="text/css">
343 #listing a {
344         float:left;
345 }
346 </style>
347 <![endif]-->
348 </head>
349 <body>
350 <div id="container">
351   <h1>Directory Listing of <?=$pathtitle;?></h1>
352   <div id="breadcrumbs"> <a href="<?=$_SERVER['PHP_SELF'];?>">home</a>
353   <?
354          $breadcrumbs = split('/', $leadon);
355         if(($bsize = sizeof($breadcrumbs))>0) {
356                 $sofar = '';
357                 for($bi=0;$bi<($bsize-1);$bi++) {
358                         $sofar = $sofar . $breadcrumbs[$bi] . '/';
359                         echo ' &gt; <a href="'.$_SERVER['PHP_SELF'].'/'.urlencode($sofar).'">'.$breadcrumbs[$bi].'</a>';
360                 }
361         }
362  
363         $baseurl = $usepathinfo?$_SERVER['PHP_SELF'] . '/'.$cdir . '?':$_SERVER['PHP_SELF'] . '?dir='.$cdir . '&';
364         $fileurl = 'sort=name&amp;order=asc';
365         $sizeurl = 'sort=size&amp;order=asc';
366         $dateurl = 'sort=date&amp;order=asc';
367  
368         switch ($_GET['sort']) {
369                 case 'name':
370                         if($_GET['order']=='asc') $fileurl = 'sort=name&amp;order=desc';
371                         break;
372                 case 'size':
373                         if($_GET['order']=='asc') $sizeurl = 'sort=size&amp;order=desc';
374                         break;
375  
376                 case 'date':
377                         if($_GET['order']=='asc') $dateurl = 'sort=date&amp;order=desc';
378                         break;
379                 default:
380                         $fileurl = 'sort=name&amp;order=desc';
381                         break;
382         }
383   ?>
384   </div>
385   <div id="listingcontainer">
386     <div id="listingheader">
387         <div id="headerfile"><a href="<?=$baseurl . $fileurl;?>">File</a></div>
388         <div id="headersize"><a href="<?=$baseurl . $sizeurl;?>">Size</a></div>
389         <div id="headermodified"><a href="<?=$baseurl . $dateurl;?>">Last Modified</a></div>
390   </div>
391     <div id="listing">
392         <?
393         $class = 'b';
394         if($dirok) {
395         ?>
396         <div><a href="<?=$usepathinfo?$_SERVER['PHP_SELF'].'/'.urlencode($dotdotdir):$_SERVER['PHP_SELF'] . '?dir='.urlencode($dotdotdir);?>" class="<?=$class;?>"><img src="<?=$myfilespath;?>/dirup.png" alt="Folder" /><strong>..</strong> <em>-</em> <?=date ("M d Y h:i:s A", filemtime($dotdotdir));?></a></div>
397         <?
398                 if($class=='b') $class='w';
399                 else $class = 'b';
400         }
401         $arsize = sizeof($dirs);
402         for($i=0;$i<$arsize;$i++) {
403         ?>
404         <div><a href="<?=$usepathinfo?$_SERVER['PHP_SELF'].'/'.urlencode($leadon.$dirs[$i]):$_SERVER['PHP_SELF'] . '?dir='.urlencode($leadon.$dirs[$i]);?>" class="<?=$class;?>"><img src="<?=$myfilespath;?>/folder.png" alt="<?=$dirs[$i];?>" /><strong><?=$dirs[$i];?></strong> <em>-</em> <?=date ("M d Y h:i:s A", filemtime($leadon.$dirs[$i]));?></a></div>
405         <?
406                 if($class=='b') $class='w';
407                 else $class = 'b';
408         }
409  
410         $arsize = sizeof($files);
411         for($i=0;$i<$arsize;$i++) {
412                 $icon = 'unknown.png';
413                 $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1));
414                 $supportedimages = array('gif', 'png', 'jpeg', 'jpg');
415                 $thumb = '';
416  
417                 if($showthumbnails && in_array($ext, $supportedimages)) {
418                         $thumb = '<span><img src="'.$myfilespath.'/trans.gif" alt="'.$files[$i].'" name="thumb'.$i.'" /></span>';
419                         $thumb2 = ' onmouseover="o('.$i.', \''.urlencode($leadon . $files[$i]).'\');" onmouseout="f('.$i.');"';
420  
421                 }
422  
423                 if($filetypes[$ext]) {
424                         $icon = $filetypes[$ext];
425                 }
426  
427                 $filename = $files[$i];
428                 if(strlen($filename)>42) {
429                         $filename = substr($files[$i], 0, 39) . '...';
430                 }
431  
432                 $fileurl = $mypath.$leadon.$files[$i];
433                 if($forcedownloads) {
434                         $fileurl = $_SESSION['PHP_SELF'] . '?dir=' . urlencode($leadon) . '&amp;download=' . urlencode($files[$i]);
435                 }
436         ?>
437         <div><?php if($showdelete) { ?><a class="<?=$class;?>" style="float:left;text-align:left;width:0.5em;padding:2px;clear:none;" href="<?=$_SERVER['PHP_SELF'];?>?file=<?=urlencode($leadon.$files[$i]);?>&amp;action=del">D</a><?php } ?><a href="<?=$fileurl;?>" class="<?=$class;?>"<?=$thumb2;?>><img src="<?=$myfilespath;?>/<?=$icon;?>" alt="<?=$files[$i];?>" /><strong><?=$filename;?></strong> <em><?=properSize(filesize($leadon.$files[$i]),2);?></em> <?=date ("M d Y h:i:s A", filemtime($leadon.$files[$i]));?><?=$thumb;?></a></div>
438         <?
439                 if($class=='b') $class='w';
440                 else $class = 'b';
441         }
442         ?></div>
443         <?
444         if($allowuploads) {
445                 $phpallowuploads = (bool) ini_get('file_uploads');
446                 $phpmaxsize = ini_get('upload_max_filesize');
447                 $phpmaxsize = trim($phpmaxsize);
448                 $last = strtolower($phpmaxsize{strlen($phpmaxsize)-1});
449                 switch($last) {
450                         case 'g':
451                                 $phpmaxsize *= 1024;
452                         case 'm':
453                                 $phpmaxsize *= 1024;
454                 }
455  
456         ?>
457         <div id="upload">
458                 <div id="uploadtitle"><strong>File Upload</strong> (Max Filesize: <?=$phpmaxsize;?>KB)</div>
459                 <div id="uploadcontent">
460                         <?
461                         if($phpallowuploads) {
462                         ?>
463                         <form method="post" action="<?=$_SERVER['PHP_SELF'];?>?dir=<?=urlencode($leadon);?>" enctype="multipart/form-data">
464                         <input type="file" name="file" /> Password: <input type="password" name="pass" value="" size="8" /> <input type="submit" value="Upload" />
465                         </form>
466                         <?
467                         }
468                         else {
469                         ?>
470                         File uploads are disabled in your php.ini file. Please enable them.
471                         <?
472                         }
473                         ?>
474                 </div>
475  
476         </div>
477         <?
478         }
479         ?>
480         <?
481         if($_GET['action']=="del" && file_exists($leadon.$_GET['file'])) {
482         ?>
483         <div id="upload">
484                 <div id="uploadtitle"><strong>File Delete Confirmation</strong></div>
485                 <div id="uploadcontent">
486                         Input password and press Delete button if you are sure to delete file <strong>&quot;<?=$_GET['file'];?>&quot;</strong>.<br />
487                         <form method="post" action="<?=$_SERVER['PHP_SELF'];?>?dir=<?=urlencode($leadon);?>" enctype="multipart/form-data">
488                         <input type="hidden" name="file" value="<?=$_GET['file'];?>"/><input type="hidden" name="action" value="delete"/>Password: <input type="password" name="pass" value="" size="8" /> <input type="submit" value="Delete" />
489                         </form>
490                 </div>
491         </div>
492         <?
493         }
494         ?>
495   </div>
496 </div>
497 <div id="copy">Directory Listing Script &copy;2005 <a href="http://evoluted.net/">Ash Young</a>. Design by <a href="http://www.tenka.co.uk/">Manny</a>.</div>
498 </body>
499 </html>