Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Dir-Listing Problem (https://www.delphipraxis.net/63156-%5Bphp%5D-dir-listing-problem.html)

fwsp 14. Feb 2006 17:48


[PHP] Dir-Listing Problem
 
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]

DGL-luke 14. Feb 2006 20:04

Re: [PHP] Dir-Listing Problem
 
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.

mh166 15. Feb 2006 10:47

Re: [PHP] Dir-Listing Problem
 
Nur mal so aus Neugier, Luckie:
Zitat:

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? :shock: Ich glaub nich mal Google verbraucht sooooo viel Speicherplatz... :gruebel:

mfg, mh166

fwsp 15. Feb 2006 17:44

Re: [PHP] Dir-Listing Problem
 
so, hab das frameset korrigiert. ich finde aber weiterhin keinen fehler in dem skript...

fwsp 15. Feb 2006 21:19

Re: [PHP] Dir-Listing Problem
 
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;
}

fwsp 15. Feb 2006 21:28

Re: [PHP] Dir-Listing Problem
 
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.

fwsp 15. Feb 2006 22:20

Re: [PHP] Dir-Listing Problem
 
was man nicht alles glaubt...
war es aber anscheinend nicht...

HILFE!!!

Luckie 15. Feb 2006 22:56

Re: [PHP] Dir-Listing Problem
 
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.

fwsp 17. Feb 2006 14:52

Re: [PHP] Dir-Listing Problem
 
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?

fwsp 17. Feb 2006 21:12

Re: [PHP] Dir-Listing Problem [/GELÖST]
 
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;
}


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:23 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