Dateiupload und größe der Festplatte

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Dateiupload und größe der Festplatte

    Hey,

    ich habe mich jetzt ein wenig mit APC eingearbeitet und rumgespielt. Ich habe es jetzt geschaft, einen Dateiupload mit Statusbalken und dem ganzem Schnickschnack zu realisieren.

    Jetzt stehe ich vor einer kleinen Frage: Was wenn der Speicherplatz auf dem Server ausgeht. Ich hab nur 15GB zur verfügung.

    Szenario:
    14.5 GB belegt.
    1GB soll hochgeladen werden

    Macht summa sumarum 15.5 GB - zu viel. Was gibt PHP in solche fällen zurück oder was macht es? Wie kann ich so etwas abfangen? Die Datei wird ja schließlich schon geschrieben (wenn auch nur als tmp), wenn ich sie hoch lade.

    Gruß,
    Nick
    My lovely mister singing club...
  • Hey,

    ich gehe mal davon aus das du das hier schon gelesen hast.

    Der Vergleich, zweier größen ist relativ einfach:

    Quellcode

    1. $maxfilesize = 123456789 // size in bytes
    2. $status = apc_fetch("upload_" . $_GET['uid']); //liefert bei erfolg ein array
    3. $leftspace = // und hier bitte die funktion, die den verbleibenden Speicherplatz prüft
    4. if($status['total'] <= $maxfilesize && $status['total'] <= $leftspace)
    5. {
    6. //die Dateigröße ist kleiner als unsere maximal erlaubte Dateigröße
    7. //und kleiner als unser aktueller plattenplatz - also past alles
    8. }
    9. else
    10. {
    11. //die dateigröße past nicht - gib einen fehler aus
    12. }
    Alles anzeigen


    So sieht das Prinzip in meinem Kopf aus. Nur wo es bei mir jetzt hapert: was wenn die Datei nichtmal temporär auf das System passt? Was macht PHP dann? Oder währe es von Haus aus geschickter, die /tmp Partition extra einzuhängen um so die maximale Dateigröße zu erlauben (1GB Upload erlaubt 2GB für /tmp -> nix kann schief gehen)


    Gruß,
    Nick
    My lovely mister singing club...
  • Hi,


    ich denke mal, da der Upload ein fortlaufender Prozess ist, dass dieser erst abbricht, wenn die Festplatte zu 100% gefüllt ist und wenn 0 Festplattenkapazität zu Verfügung steht, ist der Server nicht in der Lage ein weiteres Script auszuführen, ergo steht der Server dann ;)

    Du könntest wie du schon angefangen hast, einfach vorher auslesen ob die Festplattenkapazität > max file size ist. (! Immer genug Puffer für den Server einkalkulieren !)
    Wenn dies nicht der Fall ist, dann unterbindest du einfach den Upload so, dass dieser erst garnicht starten kann.
  • Hier mal ein Befehl für Linux. Kann man, dann bestimmt über PHP ausführen.

    df -m

    Bei meinem Mac kam folgendes raus.



    Filesystem 1M-blocks Used Available Capacity Mounted on
    /dev/disk0s2 304917 53147 251519 18% /
    devfs 0 0 0 100% /dev
    fdesc 0 0 0 100% /dev
    map -hosts 0 0 0 100% /net
    map auto_home 0 0 0 100% /home
    /dev/disk1s1 76319 41242 35076 55% /Volumes/Ohne Titel 1
    /dev/disk2s3 177 176 0 100% /Volumes/Java For Mac OS X 10.5 Update 5


    Danach bisschen filtern und du hast deinen Platz :P

    #gnah
  • Hey,

    der Befehl lautet disk_free_space().

    Quellcode

    1. $df = disk_free_space("/"); // Restliche größe in Bytes
    .

    Ich habe jetzt aber auch gerade eine Lösung gefunden: Die wird umgefähr so aussehen:

    Quellcode

    1. <?php
    2. $config['max_filesize'] = 123456789 //Max filesize in bytes
    3. $config['min_filesize'] = 123456 //Größe, die auf alle fälle frei bleiben muss
    4. $config['free_space'] = disk_free_space("/") - $config['min_filesize']; //minimale Dateigröße einfach abziehen. Der Rest ist noch zum speichern übrig
    5. //ich überspring jetzt mal ein bischen code
    6. if($filesize <= $config['max_filesize'] && $filesize <= $config['free_space'])
    7. {
    8. //Dateigröße ist kleiner oder gleich der Maximalgröße UND dateigröße ist kleiner order gleich dem restlichen verbleibendem speicher für php
    9. }
    10. else
    11. {
    12. //Die Datei ist zu groß
    13. }
    14. ?>
    Alles anzeigen

    Man kann das ganze mit "if elseif else" auch aufdrößeln um dem User dann noch eine Fehlermeldung zu geben oder dem Administrator eine Email zu schicken. Aber erstmal reicht mir das so.


    EDIT: Ich hab mich jetzt dazu entschlossen. Das TMP-Verzeichnis extra zu legen. Sprich auf zwei unterschiedlichen Partitionen - so ist immer genug Speicherplatz vorhanden und im TMP-Verzeichnis sind immer 2GB verfügbar.

    Gruß,
    Dominic
    My lovely mister singing club...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dominic ()