[php] bij uitlezen van directory achter het fysieke pad kome

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb een heel mooi scriptje gemaakt die een bepaalde directory laat zien en het werkt allemaal perfect. Standaard wordt de directory gelezen waar het phpbestand in staat en anders kan je een directory opgeven dmv een querystring. Als je nu / als querystring meegeeft dan wordt de root gelezen en dat is wat ik niet wil. Ik wil kijken welke directory wordt gelezen. Ik wil het zo maken dar je allen onderliggende directories van de standaard map mag lezen. Weet iemand hoe je het fysieke pad opvraagt dat je wilt uitlezen? Heb alles al geprobeerd.


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
if($dir)
{
  $directory = $dir;
} else {
  $directory = "";
}

$dirhandle = opendir($directory);
$arrSor = array();

while (false !== ($filename = readdir($dirhandle))) { 
  if ($filename !== "." AND $filename !== "..")
  {
    if (is_file( $directory . $filename)){
        array_push ($arrSor, "$filename");
    } else {
        if ($directory !== "")
        {
            $path = $directory . "/". $filename;
        } else {
            $path = $filename;
        }
        array_push ($arrSor, "<a href='?dir=$path'>[ $filename ]</a>");
    }
  }
}

closedir($dirhandle);
asort( $arrSor );

$currentItem = current( $arrSor );
if( $currentItem)
    print("$currentItem<br>");
while($currentItem = next($arrSor))
    print("$currentItem<br>");
?>

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Jij zoekt het ASP equivalent van server.mappath, misschien kun je daar iets mee vinden?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
André schreef op vrijdag 26 november 2004 @ 17:26:
Jij zoekt het ASP equivalent van server.mappath, misschien kun je daar iets mee vinden?
Ja zoiets. Ik zou zoiets willen dat je aan de hand van de functie opendir het fysieke pad te weten komt.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

met dirname en realpath kan je de directory opvragen. Werkt ongeveer het zelfde als server.mappath in asp.

Verder kan je alle .. en alle / (aan het begin ) weghalen uit de variable $dir of $directory.

[ Voor 4% gewijzigd door LuCarD op 26-11-2004 17:32 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hier mag een slotje op .. heb het al:

code:
1
2
3
4
$path = "C:\apache\htdocs\forum";
$pathNow = substr( realpath( $directory ), 0, 22);

if( !strcmp( $path, $pathNow ) )


dus je kan alleen de directories bekijken die onder C:\apache\htdocs\forum liggen

thnx iedereen _/-\o_

Acties:
  • 0 Henk 'm!

Verwijderd

In principe heb je realpath() helemaal niet nodig om dit scriptje te maken.

Als je de subdirs bijvoorbeeld in een array zet (in een URL geef je dat op de volgende manier door: ?subdir[]=foo&subdir[]=bar&subdir[]=quux), dan kun je het script eenvoudig zo maken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
  // Beveiliging tegen aanvallen:
  // Controleer invoerarray $subdir op illegale invoer; dwz. entries als `..' mogen
  // niet en entries met een / erin ook niet.
  // ...

  $basepath = dirname(__FILE__);

  $listpath = $basepath . "/" . implode("/", $subdir);  

  // $listpath bevat nu het pad naar de directory, en kan door constructie alleen
  // maar lager in de directory tree zitten dan $basepath (wat in dit script
  // geïnitialiseerd wordt op de directory van de scriptfile)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
zou kunnen ja maar dan mist het het doel van het scriptje. Het is de bedoeling dat iemand bestanden op de server pleurt en directories aanmaakt en dat iemand anders via een systeempje op het domein de downloads aanmaakt. De files staan gewoon bij iemand thuis op de PC namelijk en de downloads moeten voor een websites beschikbaar worden gemaakt.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op vrijdag 26 november 2004 @ 17:53:
In principe heb je realpath() helemaal niet nodig om dit scriptje te maken.

Als je de subdirs bijvoorbeeld in een array zet (in een URL geef je dat op de volgende manier door: ?subdir[]=foo&subdir[]=bar&subdir[]=quux), dan kun je het script eenvoudig zo maken:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
  // Beveiliging tegen aanvallen:
  // Controleer invoerarray $subdir op illegale invoer; dwz. entries als `..' mogen
  // niet en entries met een / erin ook niet.
  // ...

  $basepath = dirname(__FILE__);

  $listpath = $basepath . "/" . implode("/", $subdir);  

  // $listpath bevat nu het pad naar de directory, en kan door constructie alleen
  // maar lager in de directory tree zitten dan $basepath (wat in dit script
  // geïnitialiseerd wordt op de directory van de scriptfile)
En wat doet jouw script met het volgende?

http://domein.nl/script.p...&subdir[]=..&subdir[]=etc

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

:'(

Zoals in het commentaar in het script staat moet de invoerarray gefilterd worden op `..'s en op slashes. Dat kan heel eenvoudig (array_filter), maar ik heb de code weggelaten om het voorbeeld niet te veel te vervuilen.
Pagina: 1