Rekursives Auslesen von Daten mit Ausschluss von x-Daten
Rekursives Auslesen von Daten mit Ausschluss von x-Daten
am 06.07.2006 13:00:36 von Peter Wittenberger
Hallo NG,
ich möchte eine Dateistruktur mit Ordner/Daten-Hierarchie ausgeben. Dies
funktioniert prima mit
++++++++++++++++++++++++++
$dir = "../pfad/daten/";
$shell_command = `find $dir -depth -type f -print`;
$files = explode ("\n", $shell_command);
foreach ($files as $value)
{
$cur_dir = str_replace($dir, "", dirname($value));
if ($cur_dir != $old_dir)
{
echo "$cur_dir
";
}
$old_dir = $cur_dir;
echo "+ " .basename($value) . "
";
}
?>
++++++++++++++++++++++++++
Allerdings möchte ich, aus der MySQL-Datenbank gespeicherte Leserechte
mit einfließen lassen. Sprich: User Huber darf Ordner "Test" nicht auf
dem Bildschirm haben. Diese Rechte lese ich wie gesagt aus einer DB ein.
Für meinen Codeversuch nehme ich einfach den Ordner "Test":
++++ Achtung Peter-Code ++++
$dir = "../pfad/daten/";
$shell_command = `find $dir -depth -type f -print`;
$files = explode ("\n", $shell_command);
foreach ($files as $value)
{
$cur_dir = str_replace($dir, "", dirname($value));
if ($cur_dir != $old_dir)
{
$check = mysql_fetch_array(mysql_query("SELECT COUNT(*) as anzahl from
rechtevergabe where kid = '" .$getkid['0']. "' and rechte like '%"
..$cur_dir. "%'"));
$anzahlt = $check[anzahl];
if($anzahlt == 0)
{
echo "$cur_dir
";
}
}
$old_dir = $cur_dir;
echo "+ " .basename($value) . "
";
}
?>
++++++++++++++++++++++++++
Das funktioniert auch - klar: Der Ordner Test wird nicht angezeigt -
aber die Dateien IM Ordner werden ausgegeben.
Wie kann ich rekursiv auslesen, ein Verhältnis zum Ordner->Datei
herstellen und Ordner ausschließen?
Danke Euch,
Peter
Re: Rekursives Auslesen von Daten mit Ausschluss von x-Daten
am 06.07.2006 13:25:24 von Frank Schenk
Peter Wittenberger wrote:
> Hallo NG,
>
> ich möchte eine Dateistruktur mit Ordner/Daten-Hierarchie ausgeben. Dies
> funktioniert prima mit
25.6. Wie kann ich den Inhalt eines Verzeichnisses samt dem Inhalt aller
Unterverzeichnisse ausgeben?
http://www.php-faq.de/q/q-code-verzeichnis.html
Verzeichnisse wie im Beispiel mit opendir() und readdir() durchlaufen
und an entsprechender Stelle (is_dir() ) prüfen, ob das Verzeichnis
sichtbar für den momentanen User ist und ggf. anzeigen.
gruß, Frank
Re: Rekursives Auslesen von Daten mit Ausschluss von x-Daten
am 06.07.2006 13:46:52 von Peter Wittenberger
Frank Schenk schrieb:
> ...
> Verzeichnisse wie im Beispiel mit opendir() und readdir() durchlaufen
> und an entsprechender Stelle (is_dir() ) prüfen, ob das Verzeichnis
> sichtbar für den momentanen User ist und ggf. anzeigen.
>
>
> gruß, Frank
Hallo Frank,
ich dachte ich kann über "$shell_command = `find $dir -depth -type f
-print`;" keine is_dir() Prüfung vornehmen. Habs notdürftig gelöst,
indem ich beim Output des Verzeichnisses eine neue $shell_command auslöse:
$dir = "../Ordner/Daten/";
$shell_command = `find $dir -depth -type f -print`;
$files = explode ("\n", $shell_command);
foreach ($files as $value)
{
$cur_dir = str_replace($dir, "", dirname($value));
if ($cur_dir != $old_dir) {
$getkid = mysql_fetch_array(mysql_query("SELECT id from user where email
= 'user@mail.de'"));
$check = mysql_fetch_array(mysql_query("SELECT COUNT(*) as anzahl from
user_freigaben where kid = '" .$getkid['0']. "' and rechte like '%"
..$cur_dir. "%'"));
$anzahlt = $check[anzahl];
if($anzahlt == 0) {
echo "$cur_dir
";
++++++++++++++++++++++++++++++++++
NEU NEU -> Zuordnung Daten->Ordner
++++++++++++++++++++++++++++++++++
$dirf = "../kundenordner/Allgemeines/$cur_dir";
$shell_command = `find $dirf -depth -type f -print`;
$filesf = explode ("\n", $shell_command);
foreach ($filesf as $valuef)
{
echo "" .basename($valuef) . "
";
}
++++++++++++++++++++++++++++++++++
ENDE
++++++++++++++++++++++++++++++++++
}
}
$old_dir = $cur_dir;
}
?>
Danke nochmals,
Peter
Re: Rekursives Auslesen von Daten mit Ausschluss von x-Daten
am 06.07.2006 13:53:24 von Frank Schenk
Peter Wittenberger wrote:
> Frank Schenk schrieb:
>
>> ...
>> Verzeichnisse wie im Beispiel mit opendir() und readdir() durchlaufen
>> und an entsprechender Stelle (is_dir() ) prüfen, ob das Verzeichnis
>> sichtbar für den momentanen User ist und ggf. anzeigen.
>>
>>
>> gruß, Frank
>
>
> Hallo Frank,
>
> ich dachte ich kann über "$shell_command = `find $dir -depth -type f
> -print`;" keine is_dir() Prüfung vornehmen.
[ ] Du hast den Link in meiner Antwort angeschaut
Abgesehen davon ist es gefährlich, solche Shell-Kommandos abzusetzen. Es
gibt einen PHP Befehl um solche Kommandos zu escapen (shell_escape
o.ä.), den Link darfst aber selber suchen).
Und ich hab immer noch nicht verstanden, wieso du find benutzt. Du weißt
doch, wo die Verzeichnisse liegen oder? ls ist das entsprechende
Kommando aber PHP bringt ja Boardmittel für sowas mit.
gruß, Frank