webForumDet fria alternativet

lista mappar - krångel!

5 svar · 381 visningar · startad av fL0w

fL0wMedlem sedan aug. 200122 inlägg
#1

Har en kod som ser ut såhär, funkar alla tiders.
bara det att man inte kan gå in i katalogerna som listas fram

<?php 

define( SELFNAME, basename($SCRIPT_NAME)); 
define( SELFPATH, dirname($SCRIPT_NAME)); 
define( DATE_FORMAT, "d-M-Y H:i"); 
//define( ALLOWED_EXT, ".gif.jpg.jpeg.png."); 
define( DENIED_EXT, ".htm.html.phtml.php.php3."); 
define( SHOW_DIR, TRUE); 

$D = substr_replace( $D, '', 0, strspn( $D, './\\'));   // ocisti zaciatok 
$D = strrev($D); 
$D = substr_replace( $D, '', 0, strspn( $D, './\\'));   // ocisti koniec 
$D = strrev($D); 
$D = strtr( str_replace( '..', '', $D), '\\', '/');   // este vo vnutri 

if ($D != '') 
{ 
   if (!defined('SHOW_DIR') || !is_dir($D)) 
   { 
      header( "HTTP/1.0 404 Not Found"); 
      die( "<html><body><b>\nOoops!<br>\nNo such directory in current scope.</b>\n</body></html>");   // niekto nas skusa ;-) 
   } 
   $parent = substr( $D, 0, strrpos( $D, '/')); 
   if ($parent != '') 
      $parent .= '/'; 
   else 
      unset($parent); 
   $D .= '/'; 
} 
else 
{ 
   unset($D); 
} 

//header( "Expires: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 

<html> 
<head> 
   <title>index of <?php if (strlen(SELFPATH) > 1) echo SELFPATH; echo '/'.$D.' at '.$SERVER_NAME ?></title> 
   <meta name="Description" content="generated directory listing"> 
   <meta name="author" content="(c) martinko 2001 / ga-mato.host.sk"> 
</head> 

<body> 
<h2>Index of /<?php 
if (strlen(SELFPATH) > 1) 
   echo substr( SELFPATH, 1, strrpos( SELFPATH, '/')) . '<a href="'.SELFNAME.'">' . substr( SELFPATH, strrpos( SELFPATH, '/') + 1) . '</a>/'; 
echo dir_expand( $D, ''); 
?></h2> 
<pre> 
<?php 

$dirlist = array(); 
$dir = dir( ($D!='') ? "$D" : "."); 
while (($entry = $dir->read()) !== FALSE) 
{ 
   if (defined('SHOW_DIR') && is_dir($D.$entry)) 
   { 
      if (($entry != ".") && !(($entry == "..") && ($D == "")))   // not (this or root_parent) 
         $dirlist[] = array( 'name' => $entry, 'size' => "<DIR>", 'time' => filemtime($D.$entry)); 
   } 
   if (is_file($D.$entry)) 
   { 
      if (is_allowed_ext( strrchr( $entry, '.'))) 
         $dirlist[] = array( 'name' => $entry, 'size' => filesize($D.$entry), 'time' => filemtime($D.$entry)); 
   } 
} 
$dir->close(); 

foreach ($dirlist as $entry) 
{ 
   if ($entry['size'] == "<DIR>") 
   { 
      echo "<a href=\"".SELFNAME; 
      if ($entry['name'] == "..") 
      { 
         if ($parent != '') 
            echo "?D=" . urlencode( substr( $parent, 0, -1)); 
      } 
      else 
      { 
         echo "?D=" . urlencode( $D.$entry['name']); 
      } 
      echo 
         "\">[" . htmlspecialchars( $entry['name']) . "]</a>" . 
         str_pad( '', 30 - 2 - strlen($entry['name'])) . 
         htmlspecialchars( str_pad( $entry['size'], 10, ' ', STR_PAD_LEFT)) . "\t" . 
         htmlspecialchars( date( DATE_FORMAT, $entry['time'])) . "\n"; 
   } 
} 
foreach ($dirlist as $entry) 
{ 
   if ($entry['size'] != "<DIR>") 
   { 
      echo 
         "<a href=\"$D$entry[name]\">" . htmlspecialchars( $entry['name']) . "</a>" . 
         str_pad( '', 30 - strlen($entry['name'])) . 
         htmlspecialchars( str_pad( size_format( $entry['size']), 10, ' ', STR_PAD_LEFT)) . "\t" . 
         htmlspecialchars( date( DATE_FORMAT, $entry['time'])) . "\n"; 
   } 
} 

echo "</pre>\n-<br><i><small>".gmdate("D, d M Y H:i:s").' UTC from <a href="http://'.$SERVER_NAME.":".$SERVER_PORT.'" title="'.gethostbyname($SERVER_NAME).'">'.$SERVER_NAME."</a> port ".$SERVER_PORT."</small></i>\n"; 
?> 
</body> 
</html> 
<?php 

function dir_expand ($dir, $base) 
{ 
   if ($dir != '') 
   { 
      $dl = strcspn( $dir, '/\\'); 
      $ds = substr( $dir, 0, $dl); 
      $bs = ($base!='') ? $base.'/'.$ds : $ds; 
      $return .= '<a href="'.SELFNAME.'?D='.urlencode($bs).'">'.$ds.'</a>'; 
      $ts = substr( $dir, $dl); 
      $sl = strspn( $ts, '/\\'); 
      $return .= substr( $ts, 0, $sl); 
      $return .= dir_expand( substr( $ts, $sl), $bs); 
   } 
   return $return; 
} 

function is_allowed_ext ($ext) 
{ 
   $return = TRUE; 
   if (!empty($ext)) 
   { 
      $ext .= '.'; 
      if (defined('ALLOWED_EXT')) 
         if (stristr( ALLOWED_EXT, $ext) == FALSE) 
            $return = FALSE; 
      if (defined('DENIED_EXT')) 
         if (stristr( DENIED_EXT, $ext) != FALSE) 
            $return = FALSE; 
   } 
   else 
   { 
      if (defined('ALLOWED_EXT')) 
         $return = FALSE; 
   } 
   return $return; 
} 

function size_format ($num) 
{ 
   if (is_int($num)) 
      $num = ceil($num/1024).'K'; 
   return $num; 
} 
?>

Någon som kanske har en aning om vart felet ligger?
Tacksam för svar.

Kent.JMedlem sedan aug. 2001153 inlägg
#2

Gjorde en cut'n'paste.

Och scriptet fungerade.

fL0wMedlem sedan aug. 200122 inlägg
#3

hmm, kan det vara register_globals som jag har fel då?

fL0wMedlem sedan aug. 200122 inlägg
#4

okej, du måste ha register_globals On. För det funkar för mig också, om jag ändrar till On, men nu är det så att jag vill ha off :) hur gör jag då?

Patrik81Medlem sedan okt. 2001538 inlägg
#5

$SCRIPT_NAME borde väl ändras till $_SERVER['SCRIPT_NAME'] och efter att bara ha ögnat igenom koden lite snabbt, så var det det enda jag kunde direkt se som kunde dumma sig med globals=off
Det är en början iaf.
MVH Patrik

Kent.JMedlem sedan aug. 2001153 inlägg
#6

Behövs det inte en $_GET på $d med? $D skickas ju trots allt i URL'n.
$D = $_GET['D']; Kanske räcker.

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)