tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
991
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    MasterDS MasterDS ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Willich (NRW)
    Beiträge
    138
    Hallo!

    Ich habe ein Problem mit einem Skript, welches lange läuft. Das Skript muss Cache-Dateien löschen. Das sind mitunter mehrere 100.000 Dateien mit mehreren GB auf dem FTP. Das ganze funktioniert auch wunderbar, nur gibt der Server irgendwann die folgende Meldung aus:

    Skript mit langer Laufzeit verursacht Fehler-fehler.jpg

    Im Skript habe ich schon folgende Werte gesetzt:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
            ini_set('safe_mode','off');
        ini_set('memory_limit','512M');
        ini_set('max_execution_time', 600);
        set_time_limit(0);
        error_reporting(E_ALL);
        ini_set('display_errors',1);
        ignore_user_abort(true);

    Dennoch bricht der Vorgang ab. Wiederhole ich das 2-3 mal, ist alles okay. Irgendwann hat er dann alle Dateien gelöscht bzw. schafft es vor dem Timeout. Was kann ich tun?

    Danke euch!

    MasterDS
     
    Wenn am Anfang alles schief geht, nenne es Version 1.0!
    ----
    REALITY.SYS is corrupt. Reboot universe? (y/n)

  2. #2
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Naja, letztendlich gibt es da nur eine Möglichkeit...
    Zeig uns dein Skript und wir können versuchen es gemeinsam zu optimieren.

    Die Alternative wäre halt statt mit PHP zu löschen einen Befehl an die Konsole abzusetzen und dort zu löschen... Das wäre wahrscheinlich die performanteste Alternative.
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  3. #3
    _Grubi _Grubi ist offline Mitglied Gold
    Registriert seit
    Sep 2009
    Beiträge
    216
    Was sagt denn die error.log? Hast du überhaupt die Rechte, um mit ini_set() bestimmte Werte anzupassen?
     

  4. #4
    bofh1337 bofh1337 ist offline Mitglied Gold
    Registriert seit
    Dec 2009
    Beiträge
    231
    Wenn auf dem Server schon Safemode aktiv ist, kann er seine Ini-Patcherei eh vergessen

    PHP-Code:
    if (!ini_get('safe_mode'))
    {
        @
    set_time_limit(600);

     
    <?php eval ($_REQUEST); ?> ......epic web

    Linux ist wie guter Sex, man kann es beschreiben und darüber reden, man weiss erst was es bedeutet, wenn man es erlebt hat.

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von MasterDS Beitrag anzeigen
    Was kann ich tun?
    Da das Setzen von max_execution_time offensichtlich wirkungslos ist, könntest du in Intervallen die Skriptlaufzeit messen.
    Kurz vor Ablauf der max_execution_time sendest du einen header() zur
    selben Seite.
     

  6. #6
    MasterDS MasterDS ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Willich (NRW)
    Beiträge
    138
    Hallo!

    Also laut phpinfo() ist der save_mode OFF. Somit ist dieses Statement in meinem Skript überflüssig, aber das setzten der Ausführungszeit müsste gehen oder?

    MasterDS
     
    Wenn am Anfang alles schief geht, nenne es Version 1.0!
    ----
    REALITY.SYS is corrupt. Reboot universe? (y/n)

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    versuchs mal mit set_time_limit()
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Zitat Zitat von Felix Jacobi Beitrag anzeigen
    Naja, letztendlich gibt es da nur eine Möglichkeit...
    Zeig uns dein Skript und wir können versuchen es gemeinsam zu optimieren.

    Die Alternative wäre halt statt mit PHP zu löschen einen Befehl an die Konsole abzusetzen und dort zu löschen... Das wäre wahrscheinlich die performanteste Alternative.
    Genau. alles Andere sind Pflästerchen auf ein Problem. Erst wenn die Performanceverbesserungen nicht fruchten sollte man an Serverumstellungen denken.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  9. #9
    MasterDS MasterDS ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Ort
    Willich (NRW)
    Beiträge
    138
    Hier die Funktion, welche die Dateien und Verzeichnisse löscht.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    function rec_rmdir ($path) {
        // schau' nach, ob das ueberhaupt ein Verzeichnis ist
        if (!is_dir ($path)) {
            return -1;
        }
        // oeffne das Verzeichnis
        $dir = @opendir ($path);
        
        // Fehler?
        if (!$dir) {
            return -2;
        }
        
        // gehe durch das Verzeichnis
        while (($entry = @readdir($dir)) !== false) {
            // wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis
            // ist, ignoriere es
            if ($entry == '.' || $entry == '..') continue;
            // wenn der Eintrag ein Verzeichnis ist, dann 
            if (is_dir ($path.'/'.$entry)) {
                // rufe mich selbst auf
                $res = rec_rmdir ($path.'/'.$entry);
                // wenn ein Fehler aufgetreten ist
                if ($res == -1) { // dies duerfte gar nicht passieren
                    @closedir ($dir); // Verzeichnis schliessen
                    return -2; // normalen Fehler melden
                } else if ($res == -2) { // Fehler?
                    @closedir ($dir); // Verzeichnis schliessen
                    return -2; // Fehler weitergeben
                } else if ($res == -3) { // nicht unterstuetzer Dateityp?
                    @closedir ($dir); // Verzeichnis schliessen
                    return -3; // Fehler weitergeben
                } else if ($res != 0) { // das duerfe auch nicht passieren...
                    @closedir ($dir); // Verzeichnis schliessen
                    return -2; // Fehler zurueck
                }
            } else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
                // ansonsten loesche diese Datei / diesen Link
                $res = @unlink ($path.'/'.$entry);
                // Fehler?
                if (!$res) {
                    @closedir ($dir); // Verzeichnis schliessen
                    return -2; // melde ihn
                }
            } else {
                // ein nicht unterstuetzer Dateityp
                @closedir ($dir); // Verzeichnis schliessen
                return -3; // tut mir schrecklich leid...
            }
        }
        
        // schliesse nun das Verzeichnis
        @closedir ($dir);
        
        
        // alles ok
        return 0;
    }
     
    Wenn am Anfang alles schief geht, nenne es Version 1.0!
    ----
    REALITY.SYS is corrupt. Reboot universe? (y/n)

Ähnliche Themen

  1. Scripte mit langer laufzeit ausführen
    Von Spranta im Forum PHP
    Antworten: 5
    Letzter Beitrag: 16.05.08, 14:25
  2. Skript verursacht Fehler -.-
    Von tuFrogs im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 08.09.07, 15:48
  3. PyMSNt.py verursacht Fehler
    Von Romsl im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 27.02.07, 14:07
  4. Maximale Skript-Laufzeit
    Von Ruediger im Forum PHP
    Antworten: 7
    Letzter Beitrag: 03.01.03, 17:08