AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] Dir-Listing Problem

Ein Thema von fwsp · begonnen am 14. Feb 2006 · letzter Beitrag vom 17. Feb 2006
Antwort Antwort
fwsp
(Gast)

n/a Beiträge
 
#1

[PHP] Dir-Listing Problem

  Alt 14. Feb 2006, 17:48
hallo
ich hab die listing-skripte von luckie bekommen. und bin grad dabei die anzupassen, allerdings krieg ich es nicht hin, dass unterverzeichnisse angezeigt werden. ich bin nicht so fit in php, vielleicht kann mir jemand helfen

das problem könnt ihr euch angucken wenn ihr auf fwsp.net geht, und dann auf verzeichnisse, und es ist definitiv ein unterverzeichnis da.


die datei die aufgerufen wird, mit dem verzeichnis als parameter
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <?php
    echo "<title>fwsp.net/$folder</title>";
  ?>
  <link rel="stylesheet" type="text/css" href="css/format.css">
  <link rel="stylesheet" type="text/css" href="css/dir.css">

</head>
<body>
  <div>
  <?php
    include $_SERVER['DOCUMENT_ROOT'].'/php/dirhelpers.php';
    echo '<h2>Inhalt von '.$folder.'</h2>';
  ?>
 



    <?php
      if (!file_exists($folder))
      {
        echo "No such file or directory!";
        echo "<hr>\n";
        echo "<table>\n";
        echo "<tr>\n";
        echo "<td></td>";
        echo "<td>'$cr'</td>";
        echo "</tr>\n";
        echo "</table>\n";
        echo "</div>\n";
        exit;
      }
      echo "<hr>\n";
      echo "<div class='right'>Letzte Veränderung: ".date("Y-m-d H:i", filemtime($folder.newestfile($folder)))."</div>";
    ?>
  </p>

  <table>
  <colgroup>
    <col width="200" class="left">
    <col width="100" class="right">
    <col width="360" class="left">
  </colgroup>
  <?php
    $s = explode('/',$folder);
    array_pop($s);
    array_pop($s);

    $prefolder = implode('/', $s);
    if ($prefolder == '')
    {
      $prefolder = '';
    }
    else
    {
      $prefolder = 'dirindex.php?folder='.$prefolder;
    }

    echo '<tr>';
    echo '<th class="left">[url="dirindex.php?folder='.$folder.$dir.'&SortOrder=time"]Letzte Veränderung[/url]</th>
          <th class="left">[url="dirindex.php?folder='.$folder.$dir.'&SortOrder=size"]Größe[/url]</th>
          <th class="left">[url="dirindex.php?folder='.$folder.$dir.'&SortOrder=name"]Name[/url]</th>';
    echo '</tr>';

    echo '<tr>';
    echo '<td></td>
          <td>&lt;PDir&gt;</td>
          <td>[img]image/dir_default.png[/img]
          [url="'.$prefolder.'/"][.........][/url]</td>';
    echo '</tr>';

    /*if (!strpos($folder, '.'))*/

    $dirs = ListDirs($folder);
    foreach($dirs as $dir)
    {
      echo '<tr>';
      echo '<td>'.date("Y-m-d H:i", filemtime($folder.$dir)).'</td>
            <td>&lt;DIR&gt;</td>
            <td>[img]image/dir_folder.png[/img]
            [url="dirindex.php?folder='.$folder.$dir.'/"]['.$dir.'][/url]</td>';
      echo '</tr>';
    }


    if ($SortOrder == '')
    {
      $SortOrder = 'name';
    }

    $files = ListFiles($folder, $SortOrder);
    foreach($files as $file)
    {
      $title = GetTitleFromHTML($folder.$file);
      if ($title == '')
      {
        $title = $file;
      }
      echo '<tr>';
      echo '<td>'.date("Y-m-d H:i", filemtime($folder.$file)).'</td>
            <td>'.format_filesize(filesize($folder.$file)).'</td>
            <td>[img]'.PickImage($folder.$file).'[/img]
            [url="/'.$folder.$file.'"]'.$title.'[/url]</td>';
      echo '</tr>';
    }
  ?>

  </table>
  <hr>
  <table>
    <tr>
    <?php
      echo '<td">Ordner: '.count($dirs).' Dateien: '.count($files).'  ~ '.format_filesize(directory_size($folder)).'</td></tr>';
      echo '<tr><td class="small">PHP-Listing &copy; Michael Puff</td>';
    ?>
    </tr>
  </table>
  </div>

</body>
</html>
und die datei in der die funktionen drin sind
Code:
<?php
/*
  Copyright (c) 2005: Michael Puff
  Url: [url]http://www.luckie-online.de[/url]
  Mail: [email]mpuff@luckie-online.de[/email]

  Version: 2.0 - 2005-11-06
*/

//
// Returns the lates file from a given directory
//
function newestfile($folder,$number=0)//$folder endet auf \ oder /
{
  $Docs=Array();
  $handle=opendir($folder);
  $Doccount=0;
  while (false !== ($file = readdir ($handle)))
  {
    if ($file[0] != "." && $file != 'index.php')
    {
      $Docs[$Doccount]=$file;
      $Time[$Doccount]=filemtime($folder.$Docs[$Doccount]);
      $Doccount++;
    }
  }
  closedir($handle);
  array_multisort($Time,SORT_DESC,$Docs);
  return $Docs[$number];
}

//
// Returns the title of a given HTML-file
//
function GetTitleFromHTML($htmlfile)
{
  $content = file_get_contents($htmlfile);
  $start = strpos(strtolower($content),"<title>");
  $end = strpos(strtolower($content),"</title>");
  if (($start !== false) and ($end !== false))
   return substr($content,$start+7,$end-$start-7);
  else
   return "";
}

//
// Returns the size in bytes of a given directory
//
function directory_size($nomrep){
   $dossier = @opendir($nomrep);
   $file_size_up = 0;
   while ($Fichier = @readdir($dossier)){
       if ($Fichier != "." && $Fichier != ".."){
           if ($Fichier){
               $file_size_up += filesize($nomrep."/".$Fichier);
           }
       }
   }
   @closedir($dossier);
   return $file_size_up;
}

//
// Formats the filesize in a more readable format
//
function format_filesize( $filesize )
{
   $filesize = (int)$filesize;
   $units = array('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
   $tot_units = (count($units) - 1);

   $pass = 0; // set zero, for Bytes
   while( $filesize >= 1024 && $pass < $tot_units )
   {
       $filesize /= 1024;
       $pass++;
   }

   return round($filesize, 2) .''. $units[$pass];
}

//
// Returns the sub-directories of a given directory
//
function ListDirs($dir)
{
  $dirs=Array();
  $handle=opendir($dir);
  $count=0;

  while(false !== ($s = readdir($handle)))
  {
    if (is_dir($s) && ($s[0] != '.'))
    {
      $dirs[$count] = $s;
      $count++;
    }
  }
  closedir($handle);
  array_multisort($dirs, SORT_ASC, $dirs);
  return $dirs;
}

//
//  Returns the files in a given directory
//  Valid values for $SortOrder: name, time, size
//
function ListFiles($dir, $SortOrder)
{
  $files=Array();
  $handle=opendir($dir);
  $count=0;

  while(false !== ($file = readdir($handle)))
  {
    if (is_file($dir.'/'.$file) && ($file != 'index.php'))
    {
      $files[$count] = $file;
      $Time[$count]=filemtime($dir.'/'.$file);
      $Size[$count]=filesize($dir.'/'.$file);
      $count++;
    }
  }
  closedir($handle);
  if ($SortOrder == 'name')
  {
    array_multisort($files, SORT_ASC, $files);
  }
  elseif ($SortOrder == 'time')
  {
    array_multisort($Time, SORT_DESC, $files);
  }
  elseif ($SortOrder == 'size')
  {
    array_multisort($Size, SORT_ASC, $files);
  }

  return $files;
}


function PickImage($Filename)
{
  $s = pathinfo($Filename);
  $ext = $s["extension"];
  switch ($ext)
  {

    case "pdf": return "image/dir_pdf.png"; break;
    case "zip": return "image/dir_zip.png"; break;
    case "exe": return "image/dir_exe.png"; break;
    default:   return "image/dir_default.png"; break;
  }
    }
?>
mfg
fwsp

[edit=alcaeus]delphi- durch code-Tags ersetzt. Mfg, alcaeus[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: [PHP] Dir-Listing Problem

  Alt 14. Feb 2006, 20:04
also irgendwas ist da n bisschen kaputt bei dir....

der (apache?!) sagt "multiple choice" und bietet mir irgendwas kaputtes an. wenn man das kaputte dann wegmacht, bleibt frame.html übrige und das geht dann auch.(Siehe auch ganz unten)

Aber zu deinem Problem:

Du nimmst wohl die Funktion ListDirs()....
übergibst du da den richtigen Pfad? das einfach mal per echo testen.

Ansonsten sieht es nicht so aus, als ob ich dir auf anhieb helfen könnte. dazu müsste ich es erstmal selbst testen, ich nehme aber an, dass Luckies Script sehr wohl funktioniert. Also kann ich es ohne konkreten Anhaltspunkt wohl erst mal auf den oben genannten Fehler schieben.
Also überprüfe mal, ob deine framepage (?) in ordnung ist.

Hier der Quelltext, den fwsp.net zurückliefert:

Code:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>300 Multiple Choices</TITLE>
</HEAD><BODY>
<H1>Multiple Choices</H1>
The document name you requested (<code>/frame.html&gt; &lt;title&gt;[fwsp.net]&lt;/title&gt; &lt;link rel=</code>) could not be found on this server.
However, we found documents with names similar to the one you requested.

Available documents:

<ul>[*][url="/frame.html/title%3e%20%20%3clink%20rel="]/frame.html/title&gt; &lt;link rel=[/url] (common basename)[/list]</BODY></HTML>

EDIT: hab mir deinen code mal kurz angesehen.... sieht soweit ganz gut aus, teste das ganze einfach mal lokal und/oder hau viele echos rein zum debuggen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von mh166
mh166

Registriert seit: 14. Nov 2004
Ort: Chemnitz
443 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 10:47
Nur mal so aus Neugier, Luckie:
Zitat von fwsp:
Code:
   $units = array('Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
Wieviele Yotabyte großedateien hastn du auf deinem Rechner/Webspace? Ich glaub nich mal Google verbraucht sooooo viel Speicherplatz...

mfg, mh166
Tiefgründige Sätze unserer Zeit:
Zitat von Luckie:
Und diesen Token zur Laufzeit zu modifizieren würde bedeuten, dass du zur laufzeit das Token ändern musst.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#4

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 17:44
so, hab das frameset korrigiert. ich finde aber weiterhin keinen fehler in dem skript...
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#5

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 21:19
ich hab das jetzt mal auf den kern runtergekürzt, und ich habe immer noch keinen erfolg.

Code:
<html>

 <body>
  <?php
    include $_SERVER['DOCUMENT_ROOT'].'/php/dirhelpers.php';

    echo '

'.$folder.'</p>';

    $dirs = ListDirs($folder);
    foreach($dirs as $dir)
    {
      echo '

'.$dir.'</p>';
    }
  ?>
 </body>

</html>
das erste echo macht er ohne probleme. möchte die funktion ListDirs anders angesprochen werden?
hier ist die funktion mal aus der datei:

Code:
function ListDirs($dir)
{
  $dirs=Array();
  $handle=opendir($dir);
  $count=0;

  while(false !== ($s = readdir($handle)))
  {
    if (is_dir($s) && ($s[0] != '.'))
    {
      $dirs[$count] = $s;
      $count++;
    }
  }
  closedir($handle);
  array_multisort($dirs, SORT_ASC, $dirs);
  return $dirs;
}
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#6

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 21:28
ich glaub ich hab 'ne lösung:

Code:
<html>

 <body>
  <?php
    include $_SERVER['DOCUMENT_ROOT'].'/php/dirhelpers.php';

    echo '

'.$folder.'</p>';

    $ordner = getcwd();

    $dirs = ListDirs($ordner);
    foreach($dirs as $dir)
    {
      echo '

'.$dir.'</p>';
    }
  ?>
 </body>

</html>
$ordner = getcwd(); ist dabei das entscheidende.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#7

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 22:20
was man nicht alles glaubt...
war es aber anscheinend nicht...

HILFE!!!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: [PHP] Dir-Listing Problem

  Alt 15. Feb 2006, 22:56
Was geht denn jetzt nicht? Mit getwd() bekommst du ja nur das aktuelle Verzeichnis und das ist das in dem dein Script liegt, wenn es ausgeführt wird. hast du den Pfad auch mit einem / abgeschlossen? das müsste eigentlich die Vorraussetzung sein, damit mein Script funktioniert. Und dass es funktiniert, sieht man ja auf meiner Seite.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#9

Re: [PHP] Dir-Listing Problem

  Alt 17. Feb 2006, 14:52
so, hab mich jetzt ein bisschen mit php beschäftigt und die funktion, die die unterverzeichnisse anzeigen soll, verändert:

Code:
function ListDirs($dir)
{
  $dirs = Array();
  $handle = opendir($dir);
  $count = 0;

  while ($s = readdir($handle))
  {
    if ( (!(is_file($s))) AND ($s[0] !== '.') )
    {
      $dirs[$count] = $s;
      $count++;
    }
  }

  closedir($handle);
  array_multisort($dirs, SORT_ASC, $dirs);
  return $dirs;
}
was interessant ist, ist das er nicht nur ordner als ordner anzeigt sondern auch dateien als ordner, obwohl das eigentlich mit !(is_file()) nicht möglich sein sollte.
weiß jemand 'ne lösung?
  Mit Zitat antworten Zitat
fwsp
(Gast)

n/a Beiträge
 
#10

Re: [PHP] Dir-Listing Problem [/GELÖST]

  Alt 17. Feb 2006, 21:12
gelöst:

Code:
function ListDirs($dir)
{
  $dirs = Array();
  $handle = opendir($dir);
  $count = 0;

  while ($s = readdir($handle))
  {
    if ( (!(is_file($s))) AND (($s[0] != '.')) AND (is_dir($dir.$s)) )
    {
      $dirs[$count] = $s;
      $count++;
    }
  }

  closedir($handle);
  array_multisort($dirs, SORT_ASC, $dirs);
  return $dirs;
}
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz