Filesize über4gb auslesen?

Uradar

Grünschnabel
Hallo auch,
ich hab mal folgende Frage... wie kann man die filesize über 4 gb auslesen ? So das sie korrekt angezeigt wird? Also z.b. 7302 MB statt 4093.96875 MB so sieht es derzeit mit der hier gezeigten funktion aus.
Ich hoffe auch schneller hilfe udn bedanke mich im vorraus bei allen Usern die helfen wollen.


PHP:
function filesize64($file)
{
    // First, try the filesize() function
    $size = (sprintf("%u", filesize($file))* .0009765625) * .0009765625-2;

    // If the result is negative...
    if ($size < 0)
    {
        // If the platform is Windows...
        if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
        {
            // Try using the NT substition modifier %~z
            $size = trim(exec("for %F in (\"".$file."\") do @echo %~zF"));

            // If the return is blank, zero, or not a number
            if (!$size || !ctype_digit($size))
            {
                // Use the Windows COM interface
                $fsobj = new COM('Scripting.FileSystemObject');
                if (dirname($file) == '.')
                    $file = ((substr(getcwd(), -1) == DIRECTORY_SEPARATOR) ? getcwd().basename($file) : getcwd().DIRECTORY_SEPARATOR.basename($file));
                $f = $fsobj->GetFile($file);
                return $f->Size;
            }

            // Otherwise, return the result of the 'for' command
            return $size;
        }

        // If the platform is not Windows, use the stat command (should work for *nix and MacOS)
        return trim(`stat -c%s $file`);
    }

    // Otherwise, return the result of the filesize() call
    return $size;
}
 
Hallo nein es geht leider nicht er gibt zwar nun ganze zahlen aus (4096 MB) aber nicht mehr als 4,096 gb :(
 
Unterstützt der Webserver überhaupt Large-Files? Welches Dateisystem ist auf dem Webserver? Hat die PHP-Version LFS (Large File Support)?

Edit: Natürlich unterstützt der Webserver LFS, sonst hätte so eine große Datei gar nicht angelegt werden können. Sorry, zu kurz gedacht :-)

Die Frage ist aber immer noch, ob dein PHP das überhaupt kann.
 
es geht bei der ganzen geschichte einfach nur drum das ich aufn heimrechner dateien habe die ich zugesendet bekommen habe .. und in der db habe ich die datei grösse drinne.
habe das nun quick & dirty mittels xampp aufgesetzt... PHP Version 5.3.5...
 
Kurze Frage am Rand : um was für geklaute ISO-Files geht es hier das du solche riesen Files am Stück bekommst ?
Es gibt nur zwei Dinge die ich kenne die solche großen Files erzeugen : Linux-Distributionen und illegal Warez ... und um Linux wird es hier sicherlich nicht gehen.
 
es geht nicht im geringsten um iso files ... und auch keine videos .. oder anderen warez sachen ... es handelt sich lediglich um projekt files und deren abhängigkeiten ...

und bevor die frage kommt welche endungen sie haben ... *.pak und *.map ....
 
Zuletzt bearbeitet:
Auf auf dem Heim-Rechner hast du Windows NT, 98, ME, XP, Vista, 7? 32Bit/64Bit? Möglicherweise unterstützt dein PHP das schlicht und einfach nicht.

Btw. mir ist die Endung ziemlich wurscht, es geht darum, ein recht interessantes Problem zu lösen, das mir meine Wissenslücken aufzeigt :-)
 
Gehts damit?

PHP:
    function GetRealSize($file) {
        // Return size in Mb
        clearstatcache();
        $INT = 4294967295;//2147483647+2147483647+1;
        $size = filesize($file);
        $fp = fopen($file, 'r');
        fseek($fp, 0, SEEK_END);
        if (ftell($fp)==0) $size += $INT;
        fclose($file);
        if ($size<0) $size += $INT;
        return ceil($size/1024/1024);
    }

Gefunden bei http://www.php.net/manual/de/function.filesize.php#88516

Bei mir funktioniert sie mit Vista 32-bit und XAMPP 1.7.3 (update gerade).

In dieser Funktion ist übrigens ein Fehler drin:
fclose() wird der Dateiname übergeben, anstatt das Dateihandle.
Also einfach fclose($file); durch fclose($fp); ersetzen.

Edit:
Bei 6 GB funktioniert sie nicht mehr, allerdings bei 5 GB schon.
 
Zuletzt bearbeitet:
Zurück