Subversion Repositories cryptochat

Rev

Blame | Last modification | View Log | RSS feed

  1. <?php
  2.  
  3. require 'DirectoryHashCalculator.class.php';
  4.  
  5. define('VER', '09.03.2010 21:30');
  6.  
  7. error_reporting(E_ALL | E_NOTICE);
  8.  
  9. $path = dirname($_SERVER['SCRIPT_NAME']);
  10.  
  11. ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  12.                 "http://www.w3.org/TR/html4/loose.dtd">
  13.  
  14. <html>
  15.  
  16. <head>
  17.         <title>Index f&uuml;r <?php echo $path; ?></title>
  18. </head>
  19.  
  20. <body>
  21.  
  22. <h1>Index f&uuml;r <?php echo $path; ?></h1>
  23.  
  24. <hr>
  25.  
  26. <br><table border="1" width="100%">
  27. <tr>
  28.         <td><b>Dateiname</b></td>
  29.         <td><b>Hochgeladen / Aktualisiert</b> (Sort)</td>
  30.         <td align="right"><b>Dateigr&ouml;&szlig;e</b></td>
  31.         <td align="right"><b>MD5-Hash</b></td>
  32. </tr><?php
  33.  
  34. $outarray = array();
  35. $sizesum = 0;
  36. $filesum = 0;
  37. $hash_calculator = new DirectoryHashCalculator();
  38. dir_rekursiv('', $outarray, $sizesum, $filesum, $hash_calculator);
  39. ksort($outarray);
  40.  
  41. foreach ($outarray as $value) {
  42.         echo $value;
  43. }
  44.  
  45. ?>
  46. </table><br>
  47.  
  48. <?php
  49.  
  50.  
  51. $filesum = number_format($filesum, 0, ',', '.');
  52. $sizesum = number_format($sizesum, 0, ',', '.');
  53.  
  54. /*
  55.  
  56. Note:
  57.         In this solution, ".*" and "index.html" (this script) and
  58.         "DirectoryHashCalculator.class.php" (required by this script)
  59.         are not calculated in because dir_rekursiv() ignored them,
  60.         so the Directory-Hash-Result may differ from other applications which
  61.         implement it.
  62.        
  63. */
  64.  
  65. $directory_hash = $hash_calculator->calculateDirectoryHash();
  66. $hash_alg = $hash_calculator->getVersionDescription();
  67.  
  68. echo '<p><code>Berechnung abgeschlossen am '.date('Y-m-d H:i:s \G\M\TO').'<br>';
  69. echo "$filesum Dateien mit $sizesum Byte Gr&ouml;&szlig;e.<br>";
  70. echo "Directory-Hash ($hash_alg): $directory_hash.</code></p>";
  71. echo '<hr>';
  72. echo '<p><i>Directory Listing Script Version '.VER.' &copy; 2010 <a href="http://www.viathinksoft.de/">ViaThinkSoft</a>.</i></p>';
  73.  
  74. ?>
  75.  
  76. </body>
  77.  
  78. </html><?php
  79.  
  80. // Ref: http://www.php.net/manual/de/function.urlencode.php#96256
  81. function encode_full_url($url) {
  82.         $url = urlencode($url);
  83.         $url = str_replace("%2F", "/", $url);
  84.         $url = str_replace("%3A", ":", $url);
  85.         $url = str_replace("+", "%20", $url); // Neu
  86.         return $url;
  87. }
  88.  
  89. function dir_rekursiv($verzeichnis, &$outarray, &$sizesum, &$filesum, $hash_calculator) {
  90.         if ($verzeichnis == '') $verzeichnis = './';
  91.        
  92.         $handle = opendir($verzeichnis);
  93.         while ($datei = readdir($handle))
  94.         {
  95.                 if (($datei != '.') && ($datei != '..'))
  96.                 {
  97.                         $file = $verzeichnis.$datei;
  98.                         if (is_dir($file)) // Wenn Verzeichniseintrag ein Verzeichnis ist
  99.                         {
  100.                                 // Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen
  101.                                 dir_rekursiv($file.'/', $outarray, $sizesum, $filesum, $hash_calculator);
  102.                         } else {
  103.                                 // Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben
  104.                                
  105.                                 if (substr($file, 0, 2) == './') {
  106.                                         $file = substr($file, 2, strlen($file)-2); // './' entfernen
  107.                                 }
  108.                                
  109.                                 if (($file != 'index.php') &&
  110.                                         ($file != 'DirectoryHashCalculator.class.php') &&
  111.                                         (substr($file, 0, 1) != '.')) {
  112.                                                 $filesize = filesize($file);
  113.                                                 $sizesum += $filesize;
  114.                                                 $filesum++;
  115.                                                 $sizeformat = number_format($filesize, 0, ',', '.');
  116.                                                 $file_md5 = $hash_calculator->addFile($file);
  117.                                                 if ($file_md5 === false) $file_md5 = '<b>ERROR!</b>';
  118.                                                 $mtime = filemtime($file);
  119.                                                 $date = date('Y-m-d H:i:s \G\M\TO', $mtime);
  120.                                                 if (!isset($outarray[$mtime])) $outarray[$mtime] = '';
  121.                                         $outarray[$mtime] .= '<tr>
  122.         <td><a href="'.encode_full_url($file).'" target="_blank">'.str_replace('/', ' / ', $file).'</a></td>
  123.         <td>'.$date.'</td>
  124.         <td align="right">'.$sizeformat.'</td>
  125.         <td align="right"><code>'.$file_md5.'</code></td>
  126. </tr>';
  127.                                         }
  128.                         }
  129.                 }
  130.         }
  131.         closedir($handle);
  132. }
  133.  
  134. ?>