Dateien nach Ende einer Session löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateien nach Ende einer Session löschen

    Hallo,
    ich habe ein Formular erstellt bei dem der Anwender nacheinander beliebig
    viele Dateien hochladen kann.(Das Formular wird wiederholt angezeigt) Die
    Dateien werden nach dem Upload im Ordner tmp gespeichert. Wenn alle
    Dateien hochgeladen sind wird das Formular über einen "Bestätigen"
    Button abgeschickt und die Dateien werden vom Ordner tmp in den Ordner
    Work verschoben. So weit funktioniert auch alles.
    Wenn der Anwender aber den Browser schließt ohne das Formular
    mit "Bestätigen" abzuschicken liegen die Dateien im Ordner tmp unnötig
    um.

    Kann ich irgendwie festlegen das die Dateien im Ordner tmp nach der
    automatischen Beendigung der Session(Zeitablauf) gelöscht werden?

    Ich hab mir dazu ein Skript geschrieben das ich in PHP Skripte includen kann
    Code unten). Grob gesagt soll das Skript bei jedem Seitenaufruf prüfen
    welche Sessions noch laufen und dementsprechend die nicht mehr
    benötigetn Ordner löschen.
    Ist das OK so oder bin ich total auf dem Holzweg und PHP kann das
    automatisch erledigen?



    PHP-Code:
    <?php
        ini_set
    ("session.gc_divisor","1"); //Wahrscheinlichkeit der GarbageCollection auf 1 setzen
        
    ini_set("session.gc_maxlifetime""3600"); //Maximale Lebensdauer einer Session 3600 Sekunden
        
        
    session_start();
        require 
    'recrmdir.inc.php';  //Fertiges Skript aus einem Forum
        
        //Verzeichniss unter dem die Session Ordner temporär  angelegt
                    //werden sollen
        
    $tmpFileDirectoryPath "./uploads/tmp/";
        
    $fileDirectoryPath "./uploads/";
        
    $maxUploadSize 10485760// = 10 MB
          
    $maxDiskSpace 104857600// = 100MB     
          
    $fillFactor 0.8;    

        
        
    //Verzeichniss für die aktuelle Session anlegen
        
    $myDirectory $tmpFileDirectoryPath ."sess_".session_id();
        if(!
    is_Dir($myDirectory))
            
    mkdir($myDirectory); 
            
        
        
    /*
        * Diese Funktion berechnet die Größe eines Verzeichnisses
                    *  inklusive seiner Unterverzeichnisse (Auch aus einem Forum)
        */
        
    function dir_size($dir)
        {...}
        
                    
    /*
                     *Liefert den Ordern der aktuellen Session
                     */
        
    function getMyFolder()
        {
            global 
    $tmpFileDirectoryPath ;
            return 
    $tmpFileDirectoryPath ."sess_".session_id()."/";
        }
        
                    
    /*
                     *Liefert den Ordern alle hochgeladenen Dateien beinhaltet
                     */
        
    function getMainFolder()
        {
            global 
    $tmpFileDirectoryPath;
            return 
    $tmpFileDirectoryPath;
        }

        
        function 
    enoughStorageFor($fileSize)
        {
            global    
    $maxDiskSpace;
            global    
    $maxUploadSize;

            
    $uploadedSize dir_size(getMyFolder());
            
    $uploadedSize += $fileSize;
            
            return (
    $uploadedSize<$maxUploadSize &&
                                                
    getFreeStorageTotal()>$fileSize);    
        }
        
        function 
    getFreeStorageForSession()
        {
            global    
    $maxUploadSize;    
            
    $uploadedSize dir_size(getMyFolder());
            
            return (
    $maxUploadSize $uploadedSize);
        }
        
        function 
    getFreeStorageTotal()
        {
            global    
    $fileDirectoryPath;
            global    
    $maxDiskSpace;

            
    $uploadedSize dir_size($fileDirectoryPath);
            
            return (
    $maxDiskSpace $uploadedSize);
        }

        /
        * 
    Diese Funktion prüft die Größe des Verzeichnisse für temporäre
                       Dateien gegen seine maximale Größe
    Ist ein bestimmter Anteil
                       erreicht wird eine WarnungsEmail verschickt
        
    */
        function 
    checkAndSend()
        {
            global 
    $fileDirectoryPath;
            global 
    $maxDiskSpace;     
              global 
    $fillFactor;    

            if( 
    dir_size($fileDirectoryPath ) > 
                                        (
    $maxDiskSpace $fillFactor ))
            {
            
                
    $percent ceil(dir_size($fileDirectoryPath ) /
                                        
    $maxDiskSpace 100);

            ...    
            }
        }
        
        
        
    /**************************************************

                                                      Skriptstart

                    **************************************************/


        
        //Alle laufenden Sessions auslesen
        
    $sessionDirectoryPath ini_get('session.save_path');
        
    $sessionDirectory=opendir ($sessionDirectoryPath );
        
    $sessionFiles = array();
        
        while (
    $file readdir ($sessionDirectory)) 
        {
            
    //echo "$file <br>";
            
    array_push($sessionFiles$file);
        }
            
        
    closedir($sessionDirectory);
        
        
        
    //Alle angelegten Verzeichnisse auslesen
        
    $fileDirectory opendir ($tmpFileDirectoryPath);
        
    $fileFiles = array();

        while (
    $file readdir ($fileDirectory)) 
        {
            
    //echo "$file <br>";
            
    array_push($fileFiles$file);
        }

        
    closedir($fileDirectory );
        

        
    $needlessFiles array_diff($fileFiles$sessionFiles);

        for(
    $x=0$x<sizeOf($needlessFiles); $x++)
        {
            
    rec_rmdir($tmpFileDirectoryPath.pos($needlessFiles));
            
    next($needlessFiles);
        }
        
        
    ?>
    Zuletzt geändert von yxcvbnm; 30.11.2005, 13:31.

  • #2
    http://www.php-resource.de/forum/sho...threadid=50454
    Lesen und umsetzen bitte.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar

    Lädt...
    X