gelöst ! Pfad komplett löschen per php

Alles, was PHP betrifft, kann hier besprochen werden.

gelöst ! Pfad komplett löschen per php

Postby Oepfel » 08. January 2008 12:07

Hallo Leuz,

sitze hier gerade und steh mal wieder auf dem Schlauch.

Habe nen Rechner mit Windoof Sever und Xampp laufen. Wollte nun per php-Script einen kompletten Pfad löschen. Leider mault er immer, dass er nicht leer ist.

Weiss einer von euch einen Befehl um einen Ordner mitsamt seinen Inhalt zu löschen ?

Danke

mfg
Last edited by Oepfel on 09. January 2008 00:44, edited 1 time in total.
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 12:10

Leider mault er immer, dass er nicht leer ist.

Dann musst du halt erst die Dateien in dem Ordner löschen und dann am Schluss den Ordner selbst.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Oepfel » 08. January 2008 15:31

nur sind evtl in dem Ordner wieder Ordner und darin wieder Ordner usw. so das das löschen etwas dauern könnte. Meine mal eine Befehl (evtl. exec ?) gesehen zu haben der auch nicht leere Ordner löschen kann.
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 15:41

nur sind evtl in dem Ordner wieder Ordner und darin wieder Ordner usw. so das das löschen etwas dauern könnte.

Dann muss man rekursiv erst alle Dateien löschen und dann alle Verzeichnisse.

Meine mal eine Befehl (evtl. exec ?) gesehen zu haben der auch nicht leere Ordner löschen kann.

Über exec() kannst du natürlich ein entprechendes Programm/Kommando deines Betriebsystemes aufrufen, dass dieses dann kann. (Bie Windows wäre das rmdir/rd).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Scory » 08. January 2008 15:43

Oepfel wrote:nur sind evtl in dem Ordner wieder Ordner und darin wieder Ordner usw. so das das löschen etwas dauern könnte. Meine mal eine Befehl (evtl. exec ?) gesehen zu haben der auch nicht leere Ordner löschen kann.


Ne, exec() löscht gar nichts, sondern führt einen Befehl aus. Du könntest natürlich damit einen rekursiven Löschbefehl veranlassen (wenn Du es nicht selbst programmieren willst - ist nicht sonderlich schwer). Das "deltree"-Kommando aus MSDOS gibt es nicht mehr unter Windows - unter Linux ginge "rm -rf Ordername" - also installierst Du entweder Cygwin, da ist rm.exe dabei, oder programmierst es in PHP rekursiv aus.

MfG
Scory
Scory
 

Postby Oepfel » 08. January 2008 15:49

Wiedmann wrote:Über exec() kannst du natürlich ein entprechendes Programm/Kommando deines Betriebsystemes aufrufen, dass dieses dann kann. (Bie Windows wäre das rmdir/rd).


also dann so: exec('rmdir /rd '.$path);

Jedoch funzt das nicht.

Scory wrote:Ne, exec() löscht gar nichts, sondern führt einen Befehl aus. Du könntest natürlich damit einen rekursiven Löschbefehl veranlassen (wenn Du es nicht selbst programmieren willst - ist nicht sonderlich schwer). Das "deltree"-Kommando aus MSDOS gibt es nicht mehr unter Windows - unter Linux ginge "rm -rf Ordername" - also installierst Du entweder Cygwin, da ist rm.exe dabei, oder programmierst es in PHP rekursiv aus.


Was bedeutet oder meinst Du mit rekursiver Löschbefehl ? Das übersteigt dann wohl mein php-Wissen ?!

mfg
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Scory » 08. January 2008 15:57

Wenn Du PHP programmieren willst, ist www.php.net die absolute Pflichtlektüre, die PHP-Bibel für Dich.

Schau dort mal die Doku für unlink() an, dort steht direkt ganz oben in den Anwenderbeiträgen eine vollständige rekursive Löschfunktion:

http://de2.php.net/manual/de/function.unlink.php

"Rekursiv" heißt, dass eine Funktion sich selbst aufrufen kann. Dieses Problem ist rekursive, denn um einen Ordner zu löschen, der Ordner enthält, bedeutet, dass man erst den Ordner darunter löschen muss - und damit erneut das gleiche Problem hat. Das ist ein rekursives Problem.

MfG
Scory
Scory
 

Postby Oepfel » 08. January 2008 16:32

Ah ok wieder etwas dazugelernt.

Habe dort auch das von Dir angesprochene Script gefunden:
Code: Select all
<?php
// ggarciaa at gmail dot com (04-July-2007 01:57)
// I needed to empty a directory, but keeping it
// so I slightly modified the contribution from
// stefano at takys dot it (28-Dec-2005 11:57)
// A short but powerfull recursive function
// that works also if the dirs contain hidden files
//
// $dir = the target directory
// $DeleteMe = if true delete also $dir, if false leave it alone

function SureRemoveDir($dir, $DeleteMe) {
    if(!$dh = @opendir($dir)) return;
    while (false !== ($obj = readdir($dh))) {
        if($obj=='.' || $obj=='..') continue;
        if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$obj, true);
    }

    closedir($dh);
    if ($DeleteMe){
        @rmdir($dir);
    }
}

//SureRemoveDir('EmptyMe', false);
//SureRemoveDir('RemoveMe', true);

?>


Jedoch bleibt es ohne erfolreiche Löschung. Kann das evtl damit zusammenhängen, dass ich einen Windows Server nutze ?

mfg
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 17:49

also dann so: exec('rmdir /rd '.$path);
Jedoch funzt das nicht.

Richtig, dass kann nicht tun.

So zur Fehlersuche:
Man sollte sich die Ausgabe des Befehls anschauen den man Ausführt (was dieser, hier rmdir, für einen Fehler meldet,
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Oepfel » 08. January 2008 18:56

Wiedmann wrote:So zur Fehlersuche:
Man sollte sich die Ausgabe des Befehls anschauen den man Ausführt (was dieser, hier rmdir, für einen Fehler meldet,


Directory not empty in ...

Oder was meintest Du ?
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 19:27

Oder was meintest Du ?

Das was "exec('rmdir /rd '.$path);" ausgibt. Man muss natürlich dafür sorgen, dass man die Ausgabe von "'rmdir /rd '.$path" auch sieht. (siehe PHP-Manual zu exec())
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Oepfel » 08. January 2008 20:10

Ok das Manual zu exec habe ich rauf und runter gelesen, leider bringe ich mir php so nebenbei etwas bei, wenn ich Zeit dazu habe, was dazu führt, dass mir evtl. manche Grundlegende Dinge fehlen und ich nicht verstanden habe, wie ich bei exec eine Ausgabe zustande kommt.

Rufe ich :

rmdir ($path);

direkt im php Script auf, bekomme ich die Fehlermeldung, dass der Ordner nicht leer ist.
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 20:40

Ok das Manual zu exec habe ich rauf und runter gelesen,

Und was steht da, wie man zu der Ausgabe des aufgerufenen Programes/Befehles kommt?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Oepfel » 08. January 2008 21:05

Wiedmann wrote:Und was steht da, wie man zu der Ausgabe des aufgerufenen Programes/Befehles kommt?


Ist der Parameter array angegeben, wird dieses mit jeder Zeile des Befehlsausgabe gefüllt.

Da ich mit Arrays keine Erfahrungen habe, tue ich mich dementsprechend schwer.

Aber dann werde ich das Problem mal weiter hinten anstellen. Vielleicht nehme ich das wieder auf, wenn ich mehr Erfahrung habe oder irgendwo auf einen Hinweis stoße, der mich auf die richtige Fährte bringt.
Oepfel
User avatar
Oepfel
 
Posts: 78
Joined: 10. October 2006 23:16
Location: Wendelstein

Postby Wiedmann » 08. January 2008 21:29

Vielleicht nehme ich das wieder auf, wenn ich mehr Erfahrung habe

Gute Idee ;-)

In diesen Kapiteln findest du die Grundlagen von PHP, ohne die zu kennen, Beispiele nachgemacht oder mindestens mal gelesen zu haben, ein Arbeiten mit PHP eigentlich kaum möglich ist:
http://de.php.net/manual/de/langref.php
(midestens die ersten 8 Links durcharbeiten für den Anfang)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 47 guests