php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 02-02-2008, 19:03
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard Ordner löschen - sicher?

Hallo,

nen Freund von mir brauch nen Script, dass alle Ordner in einem Ordner löscht.

Ordnerstrktur:

root
- temp
- - Data 1
- - Data 2
- - Data 3
- - temp 1
- - - Data 1
- - - Data 2
- - - Data 3
- - temp 2
- - - Data 1
- - - Data 2
- - - Data 3

Ich möchte alle Ordner in temp/ löschen, jedoch nur die Ordner ... den Ordner temp samt inhalt, geschweige denn datein aus root, möchte ich nicht löschen ..

Mein Script dazu:
PHP-Code:
$dir "./temp/";
$dh  opendir($dir);
while (
false !== ($filename readdir($dh))) {
  if(
$filename != "." && $filename != ".."){
   if(
is_dir($dir.$filename)){
      
$tempdir opendir($dir.$filename);
      while (
false !== ($tempfiles readdir($tempdir))) {
         if(
$tempfiles != "." && $tempfiles != ".."){
            
unlink($dir.$filename."/".$tempfiles);
         }
      }
      
rmdir($dir.$filename);
   }
  }

Funktioniert soweit auch ... laut meinen lokalen Tests...
Allerdings hatte ich einmal das Problem:
Er hat nicht nur die Ordner in dem temp/ gelöscht sondern auch den Inhalt von temp/ ....
Danach hatte ich glück, dass er andere Ordner aus "root" durch permission denied nicht löschen konnte ... und durfte ein Backup meiner Datei aufspielen ...

Deshalb nun die Frage: Kann es mir passieren, dass ich mit diesem Script nochmals eine Ebene höher trete?
Weil ich möchte ungern schuld sein, dass sein Webspace auf einmal leer ist -g-

Anmerkung: In den ordner temp 1 etc. sind keine unter ordner mehr sondern nur Datein ..

mfg
danke
Mit Zitat antworten
  #2 (permalink)  
Alt 03-02-2008, 02:34
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

es gibt sichere codeschnipsel zum Thema recursives löschen, aber was spricht dagegen erst mit chdir in das verzeichnis zu wechseln und dann zu löschen, somit wäre wenigstens dein root sicher
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
  #3 (permalink)  
Alt 03-02-2008, 11:33
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wäre glaube nicht sicherer als der Codeschnipsel da, weil ich wohl bei dem löschen der anderen Datein die Sicherung mit "." und ".." nicht drin hatte..

Wenn ich mit chdir arbeite und diese "Sicherung" rausnehmen würde, wäre es das gleiche wie jetzt ...da
chdir("..")
auch nen verzeichnis höher geht..

mfg
ps: naja.. ich glaub mal, es ist sicher genug ^^
Mit Zitat antworten
  #4 (permalink)  
Alt 03-02-2008, 22:55
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

ich hab es trotzdem nochmal versucht rekursive zu lösen und auch mit chdir.

PHP-Code:
function deldir($handle,$bool "false"){
   global 
$otemp;
   
$files scandir($handle);
   
print_r($files);  // temporär
   
chdir($handle);
   
$temphandle str_replace('2 Backshlash','/',getcwd());

   if(
eregi($otemp,$temphandle)){
      foreach(
$files as $filename){
         if(
$filename != "." && $filename != ".."){
            if(
is_dir($filename)){
               
deldir($filename,"true");
            }else if(
is_file($filename) && $bool == "true"){
              
# unlink($filename);
              
echo "Gelöscht: ".getcwd().$filename."<br>";
            }
         }
      }
      
# rmdir($filename);
      
echo "Gelöscht Ordner: ".$filename."<br>";
   }
}

$otemp str_replace('2 Backshlash','/',getcwd());
$dir "temp/";
deldir($dir,"false");
echo 
"ende"
Verzeichnisbaum ist nachwievor
temp / Ordner 1 - 5 / jeweils Datei 1-5

D.h. 5 ordner mit je 5 Datein ...und im temp sind auch 5 Datein ..

Problem: Er geht nicht in die Tiefe und erkennt Ordner anscheinend nicht.

Ich hab dann mal $files ausgeben lassen:

Code:
Array
(
    [0] => .
    [1] => ..
    [2] => Ordner
    [3] => Ordner - Kopie
    [4] => Ordner - Kopie (2)
    [5] => Ordner - Kopie (3)
    [6] => Ordner - Kopie (4)
    [7] => blubb - Kopie (2).txt
    [8] => blubb - Kopie (3).txt
    [9] => blubb - Kopie (4).txt
    [10] => blubb - Kopie.txt
    [11] => blubb.txt
)
Array
(
    [0] => .
    [1] => ..
    [2] => blubb - Kopie (2).txt
    [3] => blubb - Kopie (3).txt
    [4] => blubb - Kopie (4).txt
    [5] => blubb - Kopie.txt
    [6] => blubb.txt
)
Man sieht: Er geht sogar noch in den 1. Ordner rein und da wird print_r natürlich nochmal ausgegeben.

Frage nun: Warum geht er nicht in die anderen Ordner?

mfg
ps: 2 Backshlash ... weil ich das mit den zeichen nicht ganz hinbekommen hab O.o

Geändert von Blackgreetz (03-02-2008 um 22:58 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 04-02-2008, 04:41
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

Ohne den Rest auf Sinn zu prüfen und ein bischen den rmdir verschoben funktioniert es so bei mir.

Ich denke der Sinn war, das der Temp Ordner am Ende leer sein sollte ?

EDIT: Sorry, die Files im temp selber sollte er ja nicht löschen, nun bin ich aber zu müde das noch zu ändern
solltest dir halt den basedir/temp ordner merken und dort das unlink aussetzen.
EDIT2: nuja, so gehts nun doch
PHP-Code:
error_reporting(E_ALL);
function 
deldir($handle,$bool "false"){
   global 
$otemp;
   
$files scandir($handle);
   
print_r($files);  // temporär
   
chdir($handle);
   
$temphandle str_replace('2 Backshlash','/',getcwd());

   if(
eregi($otemp,$temphandle)){
      foreach(
$files as $filename){
         if(
$filename != "." && $filename != ".."){
            if(
is_dir($filename)){
               
deldir($filename,"true");
               
chdir("../");  // nu aber wieder raus aus dem ordner
               
rmdir($filename); // 
            
}else if(is_file($filename) && $bool == "true"){
            
unlink($filename);
              echo 
"Gelöscht: ".getcwd().$filename."\n<br>";
            }
         }
      }
      
      echo 
"Gelöscht Ordner: ".$filename."\n<br>";
   }
}

$otemp str_replace('2 Backshlash','/',getcwd());
$dir "temp/";
deldir($dir,"false");
echo 
"ende"
__________________
Mibau Datendesign - Online Ferienwelt

Geändert von Peacie (04-02-2008 um 05:04 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 05-02-2008, 11:07
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das er die Files im temp/ nicht löscht, merkt er sich bereits durch $bool

..aber das ich in ein Verzeichnis reingehe, es vor dem Löschen lieber wieder verlassen sollte, ist recht logisch

Danke auf jeden Fall, funktioniert perfekt und sieht auch irgendwie besser aus, obwohl das Obere natürlich bedeutend kürzer ist.

mfg
Mit Zitat antworten
  #7 (permalink)  
Alt 05-02-2008, 12:03
Peacie
 Registrierter Benutzer
Links : Onlinestatus : Peacie ist offline
Registriert seit: Nov 2003
Beiträge: 341
Peacie ist zur Zeit noch ein unbeschriebenes Blatt
Peacie eine Nachricht über ICQ schicken Peacie eine Nachricht über AIM schicken Peacie eine Nachricht über Yahoo! schicken
Standard

gerne
Zitat:
Original geschrieben von Blackgreetz
[B]Das er die Files im temp/ nicht löscht, merkt er sich bereits durch $bool
ich hatte zeitweilig zum testen $bool uvernünftigerweise entfernt :P
__________________
Mibau Datendesign - Online Ferienwelt
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:32 Uhr.