---
title: "lista mappar - krångel!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/82720-lista-mappar-krångel"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "fL0w"
published: "2003-07-25T07:37:39.000Z"
updated: "2003-07-27T01:21:27.000Z"
replies: 5
views: 397
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/82720-lista-mappar-krångel"
---

# lista mappar - krångel!

## #1 — fL0w, 2003-07-25T07:37Z

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
<?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.

Permalänk: https://www.webforum.nu/p/82720

## #2 — Kent.J, 2003-07-25T12:50Z

Gjorde en cut'n'paste.

Och scriptet fungerade.

Permalänk: https://www.webforum.nu/p/1121009

## #3 — fL0w, 2003-07-25T13:32Z

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

Permalänk: https://www.webforum.nu/p/1121029

## #4 — fL0w, 2003-07-25T13:35Z

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å?

Permalänk: https://www.webforum.nu/p/1121032

## #5 — Patrik81, 2003-07-26T01:12Z

$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

Permalänk: https://www.webforum.nu/p/1121462

## #6 — Kent.J, 2003-07-27T01:21Z

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

Permalänk: https://www.webforum.nu/p/1121916

---

Tråden på webben: https://www.webforum.nu/amne/php/82720-lista-mappar-krångel
