AGB  ·  Datenschutz  ·  Impressum  







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

[PHP] DirectoryListings Part 2

Ein Thema von Luckie · begonnen am 23. Okt 2005 · letzter Beitrag vom 29. Okt 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Luckie
Luckie

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

[PHP] DirectoryListings Part 2

  Alt 23. Okt 2005, 23:08
Folgendes Problem: Ich habe vor ein kleines WebFTP Script u schreiben. Dabei habe ich mir gedacht, dass oben immer ein DirectoryListing erscheint, so wie hier: http://www.luckie-online.de/Ablage/. OK, soweit kein Problem. Jetzt dachte ich mir, wen ich in ein Verzeichnis wechseln will, dass sich die Datein selber aufruft mit dem Pfad als Parameter: index.php?path=css. Die index.php sieht jetzt so aus:
Code:
<html>
<head>
  <title>LittleWebFTP</title>
  <link rel="stylesheet" type="text/css" href="css/webftp.css">
</head>
<body>
  <h1>LittleWebFTP</h1>
 



  <?php
    $path = getcwd().'/'.$path;
    echo '[b]Contents of[/b] '.$path;
  ?>
  </p>
  [img]images/line.png[/img]
  <table class="dir">
  <colgroup>
    <col width="150" align="left">
    <col width="75" align="right">
    <col width="675" align="left">
    </colgroup>
  <?php
    include 'php/webftp.php';

    echo '<tr>';
    echo '<th class="dir">[url="index.php?SortOrder=time"]Last modified[/url]</th>
      <th class="dir"><a class="parent" href="index.php?SortOrder=size">Size</th>
      <th class="dir">[url="index.php?SortOrder=name"]Name[/url]</th>';
    echo '</tr>';
    echo $path;
    $dirs = ListDirs($path);
    foreach($dirs as $dir)
    {
      echo '<tr>';
      echo '<td class="dir">'.date("Y-m-d H:i", filemtime($dir)).'</td>
        <td class="dir">&lt;DIR&gt;</td>
      <td class="dir">[url="index.php?path='.$dir.'"]['.$dir.'][/url]</td>';
      echo '</tr>';
    }
    ?>
    </table>

    <table class="files">
    <colgroup>
      <col width="150" align="left">
      <col width="75" align="right">
      <col width="675" align="left">
    </colgroup>
    <?php
    if ($SortOrder == '')
    {
      $SortOrder = 'name';
    }
    echo $path;
    $files = ListFiles($path, $SortOrder);
    foreach($files as $file)
    {
      echo '<tr>';
      echo '<td class="files">'.date("Y-m-d H:i", filemtime($file)).'</td>
        <td class="files">'.format_filesize(filesize($file)).'</td>
        <td class="files">[url="'.$file.'"]'.$file.'[/url]</td>';
      echo '</tr>';
    }
  ?>
  </table>
  [img]images/line.png[/img]
  <table class="tblfooter">
    <tr>
    <?php
      echo '<td class="total">'.'Total: '.count($files).' file(s) - '.count($dirs).' directory(s) ~'.format_filesize(directory_size($path)).'</td>'.
        '<td></td>';
    ?>
    </tr>
  </table>
  </p>
</body>
</html>
Und die beiden relevaten Funktionen ListDirs und ListFiles

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

  while(false !== ($file = readdir($handle)))
  {
    if (is_dir($file) /*&& ($file != '.')*/)
    {
      $dirs[$count] = $file;
      $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($file))
    {
      $files[$count] = $file;
      $Time[$count]=filemtime($files[$count]);
      $Size[$count]=filesize($files[$count]);
      $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;
}
Das haut aber irgendwie nicht so ganz hin. Wenn ich auf einen Ordner klicke dann gibt mir das
Code:
$path = getcwd().'/'.$path;
    echo '[b]Contents of[/b] '.$path;
folgenden Pfad aus (zum Beispiel): /var/www/l3s11195/html/Ablage/Privat/LittleWebFTP/css aber alles was passiert ist, dass aus dem Listing alle Verzeichnisse bis auf [.] und [..] und Dateien verschwinden. Seit acht Uhr doktere ich da nun schon dran rum und bin kein Stückchen weitergekommen. Wo ist mein Denkfehler? Was mache ich falsch? Oder packe ich es prinzipiell falsch an?

Zum Ausprobieren alles noch mal im Anhang.
Angehängte Dateien
Dateityp: zip littlewebftp_160.zip (2,8 KB, 3x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 00:23
Hallo!

Passe die Schleife in der Funktion "ListFiles" folgendermaßen an:
Code:
  while(false !== ($file = readdir($handle)))
  {

    if (is_file($dir.'/'.$file))
    {
      $files[$count] = $file;
      $Time[$count]=filemtime($dir.'/'.$file);
      $Size[$count]=filesize($dir.'/'.$file);
      $count++;
    }
  }
Du hattest das Verzeichnis vergessen, womit die Datei natürlich gefunden wurde. Eine entsprechende Anpassung muss auch noch in der index.php gemacht werden (Zeilen 58 und 59):
Code:
      echo '<td class="files">'.date("Y-m-d H:i", filemtime($path.'/'.$file)).'</td>
        <td class="files">'.format_filesize(filesize($path.'/'.$file)).'</td>
Grüße
Christian
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#3

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 00:33
Gefiel dir meins nicht
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 01:00
Hallo Christina, das war's. Irgendwann wird man glaube ich blind, wenn man da zu lange draufguckt. jetzt reagiert6 er nur etwas merkwürdig, wenn man auf die Punkte [.] und [..] klickt, die das aktuelle und das übergeordnete Verzeichnis repräsentieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 02:51
Zitat von Pr0g:
Gefiel dir meins nicht
Nun ja, es funktioniert nicht. Ich kann zwar Dateien ansehen und in den Bearbeitungs Modus gehen, aber ich kann keine Datei speichern, hoch laden, löschen oder ein Verzeichnis anlegen oder löschen. Weder mit $use_ftp = true oder false.

Code:
<?php

  // Rootverzeichnis ausgehend von dieser Datei. Es ist nicht möglich aus dem
  // Script später in eine höhere Ebene zu wechseln.
  //
  // HINWEIS: Den Pfad ohne abschließendes / angeben
  $root_dir = '../../../';

  // Wenn Sie beim Verschieben von Dateien den Zielordner aus einer Baum-
  // struktur auswählen wollen, so setzen Sie diese Einstellung auf "true".
  // Soll stattdessen nur ein Eingabfeld zur dirketen Angabe eines Pfads
  // angezeigt werden, so setzen Sie die Einstellung auf "false".
  $move_tree = true;
 
  // Wenn beim Öffnen einer Datei (Klick auf Dateiname) oder Anzeigen der
  // Codeansicht statt eines normalen, neuen Fensters ein kleines Popup
  // angezeigt werden soll, dan setzen Sie die Einstellung auf "true", sonst
  // auf "false". Für das Popup muss JavaScript in Ihrem Browser aktiviert
  // sein.
  $open_popup = true;
 
  // Haben Sie die Popup-Einstellung auf "true" gesetzt, also aktiviert, so
  // können Sie hier die Breite (width) und Höhe (height) des Popups setzen.
  $popup_width = '550';
  $popup_height = '600';
 
  // Falls nach dem Anlegen eines Ordners Fehler auftreten, liegt dies meist an
  // einem falsch konfigurierten safe_mode des Servers. Wenn Sie Zugriff auf
  // die php.ini haben, so deaktivieren sie den safe_mode, oder setzen Sie die
  // folgende Zeile auf true: $use_ftp = true;
  $use_ftp = false;

  // Die folgenden FTP Daten müssen nur angegeben werden, wenn Sie den FTP
  // Modus aktiviert haben
  $ftp_hostserver = '';
  $ftp_username = '';
  $ftp_password = '';
  // FTP Pfad zum Rootverzeichnis, welches Sie oben in $root_dir angegeben
  // haben. Bitte mit einem / beginnen und enden. Bspw. /www/upload/
  $ftp_rootdir = '';
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 04:23
Ich glaube, ich kann das alles begraben. Ich habe gerade ein Uploadscript ausprobiert und diese Fehlermeldung bekommen:
Zitat:
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 3922 is not allowed to access / owned by uid 0 in /var/www/l3s11195/html/Ablage/test/upload.php on line 314
Allerdings ist der PHP Upload eigentlich in diesem Paket gestattet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 06:00
Versuche einmal den Server-Pfad $_SERVER['DOCUMENT_ROOT'] zu verwenden. Das war ein Tipp, den ich über Google auf die Schnelle gefunden habe.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 11:31
Danke für den Tipp. Aber das habe ich auch schon probiert. Ich habe gestern noch eine Mail an UD Media geschickt, worauf sie geantwortet haben, dass ich die Groß- und Kleinschreibung überprüfen solle. Ich habe drauf geantwortet:

Zitat:
Hallo,
ich weiß, dass das Dateisystem von Linux Systemen Case-Sensitiv ist. Aber
das spielt doch hier keine Rolle:

$filename = getcwd().'/'.'cpath.txt';
$handle = fopen($filename, "w");
fwrite($handle, 'abc');

Sollte so eigentlich stimmen. Nur leider bekomme ich die Fehlermeldung:
"Warning: fopen(/var/www/l3s11195/html/Ablage/Privat/Test/cpath.txt): failed
to open stream: Permission denied"

getcwd() liefert den Pfad so wie er ist und er stimmt auch mit dem Pfad über
ein: http://www.luckie-online.de/Ablage/Privat/Test/

Gebe ich den Pfad so an: /html/Ablage/Privat/Test/cpath.txt oder so
/Ablage/Privat/Test/cpath.txt/cpath.txt bekomme ich die Meldung:
"Warning: fopen(): open_basedir restriction in effect.
File(/html/Ablage/Privat/Test/cpath.txt) is not within the allowed path(s):
(/var/www/l3s11195:/usr/lib/php) in
/var/www/l3s11195/html/Ablage/Privat/Test/index.php on line 24"


Desweiteren habe ich festgestellt, dass ich auch mit touch keine Datei
anlegen kann:
"Warning: touch(): Utime failed: Permission denied in
/var/www/l3s11195/html/Ablage/Privat/Test/index.php on line 23"

Außerdem lautet die fehlermeldung ja "Permission denied", also dass mir die
nötigen Rechte feheln und nicht "Pfad oder Datei nicht gefunden" was der
Fall wäre, wenn der Pfad nicht stimmen würde.

Ich habe damals von Start XL auf Start XXL upgegradet. Kann es eventuell
sein, dass dort vergessen wurde die entsprechenden Features frei zu
schalten?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 13:52
Bei dir ist wohl der Safemode akriv, Luckie.
Versuch zum Vergleich mal, eine Datei mit relativem Pfad zu lesen (./this/path) und nicht mit dem absoluten.
Glaub zwar nicht, dass das hilft, aber ein Versuch ists wert.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: [PHP] DirectoryListings Part 2

  Alt 24. Okt 2005, 15:05
Habe ich auch schon probiert. Aber sie schreiben ja eindeutig, dass der PHP Upload möglich wäre, deswegen mü+sste ich auch das Recht haben eine Datei anzulegen. Ich warte mal ab, was die jetzt antworten. Aber ich fände es eine Frechheit mir Webspace zu diesen Konditionen zu verkaufen und dann kann ich ihn doch nicht so nutzen, wie ich will und wie sie es anpreisen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:05 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