File management system
Ik ben bezig een file management system aan het schrijven. Deze laat zoals een apache server zonder index file ook een lijst zien met dir's en files. Nu wil ik er verder mee gaan. Ik kan nu wel verschillende dir's openen in de root folder, maar zodra daar weer in dir instaat kan ik hier niet op klikken. Momenteel staan deze files op mijn webserver:
. <- Root dir
- PHPHulp <- Dir
-- Centreren Div Horizontaal <- Dir
--- css <- Dir
---- style.css
--- index.php
-- test <- Dir
- Voorbeeld <- Dir
-- ran.php
Mijn huidig script:
. <- Root dir
- PHPHulp <- Dir
-- Centreren Div Horizontaal <- Dir
--- css <- Dir
---- style.css
--- index.php
-- test <- Dir
- Voorbeeld <- Dir
-- ran.php
Mijn huidig script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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 = opendir('.');
} else {
$dir = opendir($_GET['dir']);
}
} else {
$dir = opendir('.');
}
while($file = readdir($dir)) {
if(is_dir($file) && ($file != '.' && $file != '..')) {
echo '<a href="./management.php?dir='.$_GET['dir'].'/'.$file.'">'.$file.'</a><br />';
} else if($file != '.' && $file != '..') {
echo $file.'<br />';
}
}
closedir($dir);
}
?>
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 = opendir('.');
} else {
$dir = opendir($_GET['dir']);
}
} else {
$dir = opendir('.');
}
while($file = readdir($dir)) {
if(is_dir($file) && ($file != '.' && $file != '..')) {
echo '<a href="./management.php?dir='.$_GET['dir'].'/'.$file.'">'.$file.'</a><br />';
} else if($file != '.' && $file != '..') {
echo $file.'<br />';
}
}
closedir($dir);
}
?>
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...
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.
RecursiveDirectoryIterator:
http://nl2.php.net/manual/en/class.recursivedirectoryiterator.php
Je PHP code wordt er een stuk kleiner en eenvoudiger van.
Martijn:
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?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 />';
}
}
}
}
?>
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.
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
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.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
$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.
Stefan:
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
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.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
?>
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.
Gewijzigd op 30/05/2010 12:03:46 door Stefan Candan
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
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.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
?>
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.
Stefan:
Sorry voor double postje.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
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.
Ik ben nu bezig met een "Go Back" functie aan het maken.
Dit is al wat ik heb geschreven:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if($dir != '.') {
$dirlist = explode('/', $dir);
$back = str_replace('/'.end($dirlist), '', $dir);
echo '<a href="./management.php?dir='.$back.'">..</a><br />';
}
?>
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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 />';
}
}
}
}
?>
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 />';
}
}
}
}
?>




