[PHP] directory browsen geeft fouten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Info:
Ik ben de laatste dagen bezig met een directory browser in PHP. Na een aantal zoekacties op hotscripts.com en gathering.tweakers.net heb ik zelf een php-script samengesteld.

Echter deze geeft bij het browsen van de mappen wat fouten.

Er moet voor het te openen bestand altijd een script worden geplaatst te weten: run:
Het php-script staat in de apache map op de windows nt server. De directory waarin gebrowsed mag worden staat op de gedeelde schijf p:.
Dit browsen lukt maar de bestanden die aanklikbaar zijn hebben niet het volledige pad als link.

Voorbeeld:
- script staat in http://localhost/php/browser.php
- directory p:/documenten/
- bestand wordt nu weergegeven als: run:p:bestand.pdf maar moet worden run:p:/documenten/bestand.pdf
- dit geldt ook voor bestanden die dieper in de mappen geplaatst zijn

Probleem:
- Links werken dus niet
- Bovenaan de lijst moet ook nog een soort navigatie komen zodat men direct kan linken naar een bovenstaande map of de home map ( home / documenten / test ) moeten dus apart aanklikbaar zijn. Dit heb ik geprobeerd met de $updir maar deze geeft dan het gehele pad weer en dit wil ik graag in aparte stukken zoals hierboven

Script:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?

function Check_For_Slash($path) {
   if (substr($path, (strlen($path) - 1), 1) != "/") {
      $path = $path . "/";
   }
   return($path);
}

function updir( $path )
{
    $last = strrchr( $path, "/" );
    $n1   = strlen( $last );
    $n2   = strlen( $path );
    return substr( $path, 0, $n2-$n1 );
}


echo "<TABLE WIDTH='90%' BORDER='0' CELLPADDING='0' CELLSPACING='0'>\n";
echo "<TR>\n";
echo "<TD CLASS='titel' WIDTH='80%'>Omschrijving</TD>\n";
echo "<TD CLASS='titel' WIDTH='20%'>Datum</TD>\n";
echo "</TR>\n";

function Get_Directory_Listing($path) {
   $base_dir = $_SERVER["DOCUMENT_ROOT"]; 
   $base_dir = Check_For_Slash($base_dir);
   if ($dir_handle = opendir($base_dir . $path)) {
      while ($file = readdir($dir_handle)) {
         $path = Check_For_Slash($path);
         if (($file != ".") && ($file != "..")) {
            chdir($base_dir . $path);
            if (is_dir($file)) {

$upload = filemtime($file); 
$uploaddatum = date("j - n - Y ", $upload);

           print("<TR>\n");
               print("<TD CLASS='bestand' WIDTH='80%' ALIGN='left'>
[img]'http://nt-klaveren/beta2/martijn/images/folder.bmp'></IMG[/img] 
<A HREF='" . $_SERVER["PHP_SELF"] . "?PATH=" . $path . $file . "'> " . $file . "</A>
</TD>\n"); 
print("<TD CLASS='datum' WIDTH='20%' ALIGN='right'></TD>\n"); 
print("</TR>\n"); 
            }
         }
      }
      closedir($dir_handle);

$d = dir($path);
print ("\n");
print ("<br><a href=$ref >Home</a>\n");
$updir = updir($d->path);
if( $updir != "." )
    print ("<br>Up dir; <a href=$ref?Folder=$updir>$updir</a>\n");
print ("<br>cd: <a href=$ref?cd=".$d->path."/..>..</a>\n");
print ("<br>Chemin: <b>".$d->path."</b>\n");

   }
   if ($dir_handle = opendir($base_dir . $path)) {
      while ($file = readdir($dir_handle)) {
         $path = Check_For_Slash($path);
         chdir($base_dir. $path);
         if (($file != ".") && ($file != "..")) {
            if (is_file($file)) {

$upload = filemtime($file); 
$uploaddatum = date("j - n - Y ", $upload);

$link = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']; 
    $link = explode("/", $link); 

    array_pop($link); 
array_pop($link);
    $link = @implode($link, "/"); 

             print("<TR>\n");
               print("<TD CLASS='bestand' WIDTH='80%' ALIGN='left'>
<A HREF='run:p:".$d->path."" . $file . "'>  ");


                            if (substr($file, strlen($file) - 3, 3) == "xls") {
print("[img]'http://nt-klaveren/beta2/martijn/images/excel.bmp'[/img]");
               }
               elseif(substr($file, strlen($file) - 3, 3) == "doc") {
print("[img]'http://nt-klaveren/beta2/martijn/images/word.bmp'[/img]");
               }
               elseif(substr($file, strlen($file) - 3, 3) == "pdf") {
print("[img]'http://nt-klaveren/beta2/martijn/images/pdf.bmp'[/img]");
               }
               else {
print("[img]'http://nt-klaveren/beta2/martijn/images/website.bmp'[/img]");
               }
               print(" " . $file . "</IMG></A></TD>\n");
print("<TD CLASS='datum' WIDTH='20%' ALIGN='right'> " . $uploaddatum . " </TD>\n");
print("</TR>\n");

            }
         }
      }
      closedir($dir_handle);
   }
}

if (!IsSet($_GET["PATH"])) {
   $_GET["PATH"] = "../../../Portaldocu/";  
                        
   }
   Get_Directory_Listing($_GET["PATH"]);
?>


Andere scripts op het internet werken wel maar missen weer bepaalde dingen die ik wil zoals het plaatsen van run: voor de link, mappen structuur bovenaan weergeven als menu. Vandaar dat ik zelf ben gaan schrijven maar ik kom er niet meer uit :'(

Acties:
  • 0 Henk 'm!

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 12-09 14:21

koli-man

Bartender!!!!

<A HREF='run:p:".$d->path."" . $file . "'>

volgens mij wordt hier je string zo gemaakt met die dubbele punt die je zegt.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


Acties:
  • 0 Henk 'm!

  • Bubbaman
  • Registratie: Juli 2003
  • Laatst online: 20-03-2022
Ik heb hem geprobeerd... Werkt zoals je zegt.
Verander regel:
PHP:
4
<A HREF='run:"..$d->path."" . $file . "'>  ");

in:
PHP:
4
<A HREF='run:".$base_dir . $path.$d->path."" . $file . "'>  "); 

Dan komt het volledige pad achter de run: te staan.

Suc6!

[ Voor 21% gewijzigd door Bubbaman op 10-12-2003 11:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bubbaman bedankt voor de info dit is hem uiteindelijk geworden.

PHP:
1
2
3
<?
<A HREF='run:p:".$_SERVER["SERVER_NAME"] . $path.$d->path."" . $file . "'>   ");
?>


Met base_dir gaf hij de locatie op de server aan maar op de werkstations hebben ze een andere schijfletter toegewezen gekregen (p:)

Nu doet hij het :P alleen de gebrowsde mappen weergeven als link bovenaan wil nog niet echt lukken.