Recursive directory listing (mappen/bestanden weergeven op pagina)

Status
Niet open voor verdere reacties.

ewoutd

Gebruiker
Lid geworden
1 dec 2011
Berichten
53
Hallo,

Ik gebruik de volgende code (gevonden op internet) om de bestanden en mappen, in de map waar de code staat, weer te geven. (VB: path is nu: www.site.nl/dir/voorbeeld
Hij werkt prima alleen zou ik graag willen dat hij niet de map weergeeft waar de code in staat maar een hoofdmap (VB: www.site.nl/) op pagina weergeeft.

Zou iemand mij hiermee kunnen helpen?

Alvast bedankt.
PHP:
<?php


define('SHOW_PATH', FALSE);
define('SHOW_PARENT_LINK', FALSE);
define('SHOW_HIDDEN_ENTRIES', FALSE);

function get_grouped_entries($path) {
    list($dirs, $files) = collect_directories_and_files($path);
    $dirs = filter_directories($dirs);
    $files = filter_files($files);
    return array_merge(
        array_fill_keys($dirs, FALSE),
        array_fill_keys($files, FALSE));
}

function collect_directories_and_files($path) {
    $entries = scandir($path);
    return array_partition($entries, function($entry) {
        return is_dir($entry);
    });
}

function array_partition($array, $predicate_callback) {
    $results = array_fill_keys(array(1, 0), array());
    foreach ($array as $element) {
        array_push(
            $results[(int) $predicate_callback($element)],
            $element);
    }
    return array($results[1], $results[0]);
}

function filter_directories($dirs) {
    return array_filter($dirs, function($dir) {
        return $dir != '.'  
            && (SHOW_PARENT_LINK || $dir != '..')
            && !is_hidden($dir);
    });
}

function filter_files($files) {
    return array_filter($files, function($file) {
        return !is_hidden($file)
            && substr($file, -4) != '.php'; 
    });
}

function is_hidden($entry) {
    return !SHOW_HIDDEN_ENTRIES
        && substr($entry, 0, 1) == '.'  
        && $entry != '.' 
        && $entry != '..';  
}

$path = __DIR__ . '/';
$entries = get_grouped_entries($path);
?>
<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="UTF-8"/>
    
    <title>php code</title>
  </head>
  <body>

    <article>
      <h1>
        <?php
foreach ($entries as $entry => $is_dir) {
    $class_name = $is_dir ? 'directory' : 'file';
    $escaped_entry = htmlspecialchars($entry);
    printf('        <li class="%s"><a href="%s" target="_new">%s</a></li>' . "\n",
        $class_name, $escaped_entry, $escaped_entry);
}
?>
      </h1>
</article>
  </body>
</html>
 
Laatst bewerkt:
Vervang dit eens:
PHP:
$path = __DIR__ . '/';
met:
PHP:
$path = '..';
 
ja dat werkt! nu krijg ik 2 mappen "terug" te zien...

Is het ook mogelijk om naar specifieke map te verwijzen??
 
Laatst bewerkt:
Verder verwijst de link die gecreëerd wordt nu naar een bestand in zelfde map als waar de code staat... en dat bestand staat daar uiteraard niet...
 
ja dat werkt! nu krijg ik 2 mappen "terug" te zien...

Is het ook mogelijk om naar specifieke map te verwijzen??
Tuurlijk dat is volgens mij de bedoeling van de code

Verder verwijst de link die gecreëerd wordt nu naar een bestand in zelfde map als waar de code staat... en dat bestand staat daar uiteraard niet...

klopt dan zul je de code moeten aanpassen
 
Laatst bewerkt:
Misschien gebruik ik dan de verkeerde code... Maar het doel van mij is om een pagina een overzicht te creëren wat verwijst naar (pdf) bestanden die op een andere map op de site staan...

Is dat met deze code te doen?
 
Het kan wel iets simpeler:

PHP:
<?php

if ($handle = opendir('HIER HET PAD NAAR DE PDFJES')) {

    while (false !== ($entry = readdir($handle))) {
		if ($entry != "." && $entry != ".."){
			echo "<a href='$entry'>$entry</a></br>";
		}
    }

    closedir($handle);
}
?>
 
De werkt prima!(en is een stuk eenvoudiger :-D) dank!
maar ook bij deze verwijst de gecreëerde link niet naar het juiste bestand... hoe kan dat gefixt worden??
 
Als je mij de juiste url(link) kan geven naar de pdf bestanden kan ik hem voor jou er wel tussen zetten
 
PHP:
<?php
 
if ($handle = opendir('HIER HET PAD NAAR DE PDFJES')) {
 
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != ".."){
            echo "<a href='http://www.emade.nl/site/pdf/$entry'>$entry</a></br>";
        }
    }
 
    closedir($handle);
}
?>
 
Is glob niet nog makkelijker?

PHP:
<ul>
<? foreach(glob('PAD/*.*') as $file): ?>
	<li><a href="http://www.emade.nl/site/pdf/<?=$file;?>"><?=$file;?></a></li>
<? endforeach; ?>
</ul>

Eventueel kan er ook gefilterd worden op enkel de pdf extensie door 'PAD/*.*' te vervangen door 'PAD/*.pdf'
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan