Schrijf een recursieve functie die alle mappen en bestanden in een array zet en deze vervolgens retourneert. Het principe achter een recursieve functie is dat deze zichzelf aanroept op het moment dat hij, in dit geval, een submap tegenkomt...
Link gekopieerd
Link gekopieerd
Martijn B op 30/05/2010 11:20:24
Hier heb je tegenwoordig iterators voor.
RecursiveDirectoryIterator:
http://nl2.php.net/manual/en/class.recursivedirectoryiterator.php
Je PHP code wordt er een stuk kleiner en eenvoudiger van.
Oke, ik heb een beetje op php net rond geneusd, en toen zelf dit geschreven:
<?php
if($_SERVER['REMOTE_ADDR'] != '82.72.30.213') {
die("Only the webmaster can access this page's content. Please go back and open another file.");
} else {
if(isset($_GET['dir'])) {
if($_GET['dir'] == "www") {
$dir = '.';
} else {
$dir = $_GET['dir'];
}
} else {
$dir = '.';
}
foreach(new DirectoryIterator($dir) as $file) {
if((!$file->isDot()) && ($file->getFilename() != basename($_SERVER['PHP_SELF']))) {
if($file->isDir()) {
echo '<a href="./management.php?dir='.$dir.'/'.$file->getFilename().'">'.$file->getFilename().'</a><br />';
} else {
echo $file->getFilename().'<br />';
}
}
}
}
?>
Het werkt. Dankje voor de tip in de goede richting.
Link gekopieerd
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
Het werkt redelijk naar behoren. Alleen als je 2 dir's met de zelfde naam nest en dan terug wil gaat ie helemaal terug, en niet 1 dir.
Hoe kan ik er voor zorgen dat str_replace alleen het laatst voorkomende woord weg haalt.
Link gekopieerd
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
<?php
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
?>
Het werkt redelijk naar behoren. Alleen als je 2 dir's met de zelfde naam nest en dan terug wil gaat ie helemaal terug, en niet 1 dir.
Hoe kan ik er voor zorgen dat str_replace alleen het laatst voorkomende woord weg haalt.
Link gekopieerd
Stefan Candan op 30/05/2010 12:16:04
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
<?php
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
?>
Het werkt redelijk naar behoren. Alleen als je 2 dir's met de zelfde naam nest en dan terug wil gaat ie helemaal terug, en niet 1 dir.
Hoe kan ik er voor zorgen dat str_replace alleen het laatst voorkomende woord weg haalt.
Editje:
Zelf opgelost. substr_replace & strpos gebruikt.
Volledige script:
<?php
if($_SERVER['REMOTE_ADDR'] != '82.72.30.213') {
die("Only the webmaster can access this page's content. Please go back and open another file.");
} else {
if(isset($_GET['dir'])) {
if($_GET['dir'] == "www") {
$dir = '.';
} else {
$dir = $_GET['dir'];
}
} else {
$dir = '.';
}
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = substr_replace($dir, '', strpos($dir, '/'.end($dirlist)), strlen('/'.end($dirlist)));
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
foreach(new DirectoryIterator($dir) as $file) {
if((!$file->isDot()) && ($file->getFilename() != basename($_SERVER['PHP_SELF']))) {
if($file->isDir()) {
echo '<a href="./management.php?dir='.$dir.'/'.$file->getFilename().'">'.$file->getFilename().'</a><br />';
} else {
echo $file->getFilename().'<br />';
}
}
}
}
?>
Link gekopieerd