php-Script zum Löschen von Dateien

  • Hallo allerseits,

    ich möchte für meinen Webspace einen Cronjob einrichten, der täglich alle Files eines bestimmten Ordners löscht. Da ich ein absoluter Script-Neuling bin, habe ich nun zwei Tage im Netz nach einem passenden Script gesucht und habe aber nichts gefunden, was 100%ig passt. Das, was am ehesten funktionieren könnte, ist dieses php-Script, welches alle Dateien des Ordners löscht, in dem es selbst liegt:

    Das funktioniert auch, hat aber natürlich den Nachteil, dass es sich selbst auch löscht. Wenn ich es in einen anderen, übergeordneten Ordner lege und den Pfad so anpasse..:

    ...funktioniert es nicht mehr. Ich nehme an, dass ich den Pfad irgendwie falsch angegeben ist?


    Kann jemand bitte helfen???

  • Hi, ich kenne mich nicht gut aus mit PHP, es liegt aber evtl. an der Pfadangabe, teste doch mal mit


    Code
    dirname( __FILE__ ) . 'ordner001/ordner01/ordner1';

    Hallo Johann22, das hat leider nicht funktioniert. :(

    Trotzdem danke!

  • Hi, ich kenne mich nicht gut aus mit PHP, es liegt aber evtl. an der Pfadangabe, teste doch mal mit


    Code
    dirname( __FILE__ ) . 'ordner001/ordner01/ordner1';

    Bei der Variante fehlt zwischen dem erzeugten absoluten Verzeichnis und dem angehängten ein '/'.

    So müsste es funktionieren:


    Code
    path = dirname(__FILE__).'/ordner001/ordner01/ordner1';
    //bzw. das hier
    path = __DIR__.'/ordner001/ordner01/ordner1';


    Du könntest auch ein Bash-Script basteln mit dem Inhalt rm -rf ordner1/  und das als Cronjob einstellen - das müsste auf den NC Servern laufen.

  • Du kannst auch direkt im Cronjob schon mit rm -rf arbeiten.


    Aber vorsichtig damit!

    rm = remove also löschen

    -r = recursiv also alles was in dem angegebenen Ordner ist, inklusive Unterordner

    -f = force also ohne jegliches nachfragen


    Du musst im Cronjob dann aber den Pfad vom Wurzelverzeichnis aus angeben, also z.B. : /var/www/hosting4711.netcup.net/httpdocs/ordner001/ordner01/


    Fertiges Beispiel


    Code
    * 0 * * * rm -rf /var/www/hosting4711.netcup.net/httpdocs/ordner001/ordner01/* >/dev/null 2>&1


    Das würde dann jeden Tag um 00:00 Uhr alles unterhalb von ordner01/ löschen.

  • Vielen Dank für die Tipps! Probiert habe ich jetzt, in Parallels Confixx unter Crontabs folgendes einzurichten:

    Bildschirmfoto 2018-03-05 um 10.01.34.pngDas hat so leider nicht geklappt. Wenn mein Hosting "web123" heißt, muss ich dann als Pfad /var/www/hosting123.netcup.net/httpdocs/ordner001/ordner01/ oder /var/www/hostingweb123.netcup.net/httpdocs/ordner001/ordner01/ eintragen? Der "höchste" Ordner, den ich in meinem Webspace sehe, heißt auch nicht "httpdocs" sondern "html". Muss ich das auch entsprechend ändern?

    Sorry, dass ich so auf dem Schlauch stehe. Aber es ist wie gesagt das erste Mal, dass ich mich damit beschäftige. Danke für Eure Geduld!

  • Der "höchste" Ordner, den ich in meinem Webspace sehe, heißt auch nicht "httpdocs" sondern "html". Muss ich das auch entsprechend ändern?

    Sorry, dass ich so auf dem Schlauch stehe. Aber es ist wie gesagt das erste Mal, dass ich mich damit beschäftige. Danke für Eure Geduld!

    Log dich einfach mal per SSH ein, wechsele in den Ordner (z.B. mit cd ordner001/ordner01 ) - die TAB Taste hilft dir dabei.

    Da angelangt einmal den Befehl pwdund das was dann angezeigt wird, muss als kompletter Pfad hinter rm -rf eingtragen werden.

  • Dieser Pfad kann sich von Server zu Server unterscheiden. Am einfachsten ist es, du erstellst dir in dem Verzeichnis, dessen kompletten Pfad du ermitteln möchtest, folgende PHP-Datei und rufst sie anschließend im Browser auf:


    PHP: pfad.php
    <?= $_SERVER['DOCUMENT_ROOT'] ?>

    Gruß

    René


    Edit: Oder so wie H6G es beschreibt ^^:thumbup:

  • Log dich einfach mal per SSH ein, wechsele in den Ordner (z.B. mit cd ordner001/ordner01 ) - die TAB Taste hilft dir dabei.

    Da angelangt einmal den Befehl pwdund das was dann angezeigt wird, muss als kompletter Pfad hinter rm -rf eingtragen werden.

    Denke SSH wird nicht möglich sein bei den ganz alten Tarifen mit Confixx

  • Ob SSH möglich ist, weiß ich nicht. Ich habe zumindest in Par. Confixx nichts dazu gefunden. Aber Renés Tipp zur Ermittlung des Serverpfades hat prima funktioniert. Jetzt läuft alles so, wie es soll. Nochmals vielen Dank für die Hilfe und eure Geduld!

  • Jetzt hab ich doch noch eine Frage: Kann man den Löschbefehl auch so einrichten, dass er zum festgelegten Zeitpunkt alles löscht, das älter als X Tage ist?

  • find /path/to/directory/ -mtime +12 -type f -delete


    "find" -> Suche

    -mtime +12 -> Alles was älter als 12 Tage ist

    -type f -> Suche nur nach Dateien (Ordner bleiben so bestehen)

    -delete -> Lösche, was du gefunden hast


    Der Befehl arbeitet rekursiv, also auch Unterordner werden durchsucht

    Meine (Netcup) Produkte: S 1000 G7, VPS 200 G8 Ostern 2019, IPs, Failover..

  • Das werde ich gleich ausprobieren. Vielen Dank für die schnelle Antwort!

  • Offenbar hat es so nicht geklappt. Mein Befehl zum Löschen aller Dateien, die älter als 2 Tage sind, sieht jetzt so aus:

    Code
    find /var/www/web123/html/ordner001/ordner01/* -mtime +2 -type f -delete

    Sollte doch korrekt so sein. Oder habe ich da einen Fehler drin?

  • Zum finden von Fehlern kannst du das "-delete" mal weglassen, dann bekommst du in der Konsole einfach ausgegeben, welche Dateien der "find" findet.

    Meine (Netcup) Produkte: S 1000 G7, VPS 200 G8 Ostern 2019, IPs, Failover..

  • Zum finden von Fehlern kannst du das "-delete" mal weglassen, dann bekommst du in der Konsole einfach ausgegeben, welche Dateien der "find" findet.

    Ist mir schon fast peinlich zu fragen: Wo um alles in der Welt finde ich die Konsole?

  • Melde dich per Putty über SSH an. Du solltest dafür ein Kennwort haben oder vergeben können.

    Er hat augenscheinlich einen Confixx-Tarif. Da gibts kein SSH.


    Edit: Hm... das Cronjob Panel sieht nach Confixx aus... der Pfad "hostingxyz" sieht nach aktuellem Hosting aus. Weird...

  • Offenbar hat es so nicht geklappt. Mein Befehl zum Löschen aller Dateien, die älter als 2 Tage sind, sieht jetzt so aus:

    Code
    find /var/www/web123/html/ordner001/ordner01/* -mtime +2 -type f -delete

    Sollte doch korrekt so sein. Oder habe ich da einen Fehler drin?


    Das * ist zu viel.

    Code
    user@machine:~$ find git/mongo-c-driver-1.9.3/ -type f | wc -l
    4005
    user@machine:~$ find git/mongo-c-driver-1.9.3/* -type f | wc -l
    3972

    Damit sagst du ihm er soll alle Unterordner unterhalb von ordner01 durchsuchen - ordner01 bleibt daher unangetastet.


    Code
    find /var/www/web123/html/ordner001/ordner01/ -mtime +2 -type f -delete


    wc -l (word count, Parameter lines) zählt wie viele Dateien von find zurückgeliefert werden. Du siehst oben beim Sternchen einen Unterschied von ca. 100 Dateien gegenüber ohne Sternchen.


    Edit: wenn web123 der Ordner ist, den du über Renés oder meiner Maßnahme ermittelt hast. Ich glaube aber nicht, dass du ausgerechnet auf der 123 liegst.