cesca
05.03.2007, 19:37:22
Hallo,
zur Übung dachte ich mir schreibst einen Dateibrowser. Da könnte man unterwegs ohne ftp mal an den Webspace ran.
Hier erst mal der Code:<?php
session_start();
$userpath = "./";
if($_GET['change'] == "y") { //ist verzeichniswechsel
foreach($_SESSION['folderid'] as $fnr => $nextpath) { //sessionfolderids auslesen
if($_GET['where'] == $fnr) { //mit get vergleichen und wenn vorhanden
$path = $nextpath; //für handle vorbereiten
}
}
}else{ //ist kein verzeichniswechsel
$path = $userpath; //stammverzeichnis vorbereiten
}
$pathhandle = dir($path); //handle öffnen
while(false !== ($unit = $pathhandle->read())) { //wenn handle existent dann inhalt lesen
if($unit != "." && $unit != "..") { //wenn nicht aktuelles und übergeordnetes verzeichnis
if(is_dir($path.$unit)) { //und wenn verzeichnis dann
$dirArray[] = $unit; //in verzeichnisarray einlesen
}elseif(is_file($path.$unit)) { //oder wenn datei dann
$fileArray[] = $unit; //in dateiarray einlesen
}
}
}
$nowpath = $pathhandle -> path; //aktuelle url feststellen
$pathhandle->close(); //handle schließen
echo "Ort: ".$nowpath."<br /><br />"; //standort
if($userpath !== $path) { //wenn nicht stammverzeichniss dann
$folder = dirname($path); //url des standorts
$_SESSION['folderid'][0] = ($folder."/"); //id der standorturl
echo "<a href=\"".$_SERVER['PHP_SELF']."?change=y&where=0\">ein Verzeichnis höher</a><br />";
} //zurückbrowsen anzeigen
if(@is_array($dirArray)) { //gibt es ein verzeichnisarray dann
natsort($dirArray); //sortieren
$id = 1;
foreach($dirArray as $wert) { //durchlaufen
$folder = $nowpath.$wert."/"; //verzeichnisurl
$_SESSION['folderid'][$id] = $folder; //id mit pfad
echo "<a href=\"".$_SERVER['PHP_SELF']."?change=y&where=$id\">$wert</a><br />"; //alles ausgeben
$id++;
}
}
if(@is_array($fileArray)) { //gibt es ein dateiarray
natsort($fileArray); //sortieren
foreach($fileArray as $wert) { //durchlaufen
echo "$wert<br />"; //alles ausgeben
}
}
?>Ist doch schon was komplexer. Wenn jemand zu der Funktionsweise eine Meinung hat würde mich das auch freuen.
Jetzt aber mein eigentliches Problem. Am Anfang hatte ich die Pfade direkt mit den GET Variablen übertragen was natürlich ungünstig hinsichtlich Manipulation (Adressleiste) ist.
Nun also mit Session und Ids. Wenn ich jetzt die GET Variable where=$id manipuliere ist meine $path Variable nicht definiert. Was ja auch richtig ist da durch:if($_GET['change'] == "y") { //ist verzeichniswechsel
foreach($_SESSION['folderid'] as $fnr => $nextpath) { //sessionfolderids auslesen
if($_GET['where'] == $fnr) { //mit get vergleichen und wenn vorhanden
$path = $nextpath; //für handle vorbereiten
}
}
}else{ //ist kein verzeichniswechsel
$path = $userpath; //stammverzeichnis vorbereiten
}keine passende Id zu den Sessioneinträgen vorhanden ist. Nur wie fange ich eine Fehleingabe von GET['where'] am einfachsten ab. In der foreach $_SESSION scheint mir das nicht zu gehen. Ich könnte vorher das Session Array dahingehend überprüfen ob die GET Variable enthalten ist. Nur wie könnte das Aussehen und könnte ich mir dann das Session foreach nicht direkt sparen. Irgendwie stehe ich hierbei auf dem Schlauch.
liebe Grüße cesca
zur Übung dachte ich mir schreibst einen Dateibrowser. Da könnte man unterwegs ohne ftp mal an den Webspace ran.
Hier erst mal der Code:<?php
session_start();
$userpath = "./";
if($_GET['change'] == "y") { //ist verzeichniswechsel
foreach($_SESSION['folderid'] as $fnr => $nextpath) { //sessionfolderids auslesen
if($_GET['where'] == $fnr) { //mit get vergleichen und wenn vorhanden
$path = $nextpath; //für handle vorbereiten
}
}
}else{ //ist kein verzeichniswechsel
$path = $userpath; //stammverzeichnis vorbereiten
}
$pathhandle = dir($path); //handle öffnen
while(false !== ($unit = $pathhandle->read())) { //wenn handle existent dann inhalt lesen
if($unit != "." && $unit != "..") { //wenn nicht aktuelles und übergeordnetes verzeichnis
if(is_dir($path.$unit)) { //und wenn verzeichnis dann
$dirArray[] = $unit; //in verzeichnisarray einlesen
}elseif(is_file($path.$unit)) { //oder wenn datei dann
$fileArray[] = $unit; //in dateiarray einlesen
}
}
}
$nowpath = $pathhandle -> path; //aktuelle url feststellen
$pathhandle->close(); //handle schließen
echo "Ort: ".$nowpath."<br /><br />"; //standort
if($userpath !== $path) { //wenn nicht stammverzeichniss dann
$folder = dirname($path); //url des standorts
$_SESSION['folderid'][0] = ($folder."/"); //id der standorturl
echo "<a href=\"".$_SERVER['PHP_SELF']."?change=y&where=0\">ein Verzeichnis höher</a><br />";
} //zurückbrowsen anzeigen
if(@is_array($dirArray)) { //gibt es ein verzeichnisarray dann
natsort($dirArray); //sortieren
$id = 1;
foreach($dirArray as $wert) { //durchlaufen
$folder = $nowpath.$wert."/"; //verzeichnisurl
$_SESSION['folderid'][$id] = $folder; //id mit pfad
echo "<a href=\"".$_SERVER['PHP_SELF']."?change=y&where=$id\">$wert</a><br />"; //alles ausgeben
$id++;
}
}
if(@is_array($fileArray)) { //gibt es ein dateiarray
natsort($fileArray); //sortieren
foreach($fileArray as $wert) { //durchlaufen
echo "$wert<br />"; //alles ausgeben
}
}
?>Ist doch schon was komplexer. Wenn jemand zu der Funktionsweise eine Meinung hat würde mich das auch freuen.
Jetzt aber mein eigentliches Problem. Am Anfang hatte ich die Pfade direkt mit den GET Variablen übertragen was natürlich ungünstig hinsichtlich Manipulation (Adressleiste) ist.
Nun also mit Session und Ids. Wenn ich jetzt die GET Variable where=$id manipuliere ist meine $path Variable nicht definiert. Was ja auch richtig ist da durch:if($_GET['change'] == "y") { //ist verzeichniswechsel
foreach($_SESSION['folderid'] as $fnr => $nextpath) { //sessionfolderids auslesen
if($_GET['where'] == $fnr) { //mit get vergleichen und wenn vorhanden
$path = $nextpath; //für handle vorbereiten
}
}
}else{ //ist kein verzeichniswechsel
$path = $userpath; //stammverzeichnis vorbereiten
}keine passende Id zu den Sessioneinträgen vorhanden ist. Nur wie fange ich eine Fehleingabe von GET['where'] am einfachsten ab. In der foreach $_SESSION scheint mir das nicht zu gehen. Ich könnte vorher das Session Array dahingehend überprüfen ob die GET Variable enthalten ist. Nur wie könnte das Aussehen und könnte ich mir dann das Session foreach nicht direkt sparen. Irgendwie stehe ich hierbei auf dem Schlauch.
liebe Grüße cesca