Ankündigung

Einklappen
Keine Ankündigung bisher.

fopen('file/wo/größer/als/2/GB/st', 'r')

Einklappen

Neue Werbung 2019

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

  • tapferesschneiderlein
    hat ein Thema erstellt fopen('file/wo/größer/als/2/GB/st', 'r').

    fopen('file/wo/größer/als/2/GB/st', 'r')

    Hallo,

    ich versuche, eine 20 GB große Datei mittels fopen(), fseek() und fread() zu bearbeiten, komme aber nicht über 2^31 - 1 hinaus.

    Gibt es da einen Trick?

  • Gast-Avatar
    Ein Gast antwortete
    Achso

    Einen Kommentar schreiben:


  • tapferesschneiderlein
    antwortet
    > Filme einlesen und bearbeiten ?

    Die Filme sind meistens mit VirtualDub digitalisiert und dann auf CD-Größe geDivXt. Das ganze aber -- tataa -- unter Windows
    Unter Linux wollte ich ihn nur umbenennen und dann brennen, zu schnell rm statt mv getippt und fertig war der Salat.
    Weil mir keine UnDelete-Tools unter Linux bekannt sind, habe ich die Datei mit obiger Prozedur, der ein dd if=/dev/hdb4 | split -d -b 2048m - hdb4.img vorausging tatsächlich retten können ...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Filme einlesen und bearbeiten ?
    Neugier ...

    Einen Kommentar schreiben:


  • tapferesschneiderlein
    antwortet
    Sowohl
    Code:
    2.6.8-2-686 #1 Thu May 19 17:53:30 JST 2005 i686 GNU/Linux
    
    PHP 4.3.10-16 (cli) (built: Aug 24 2005 20:25:01)
    Copyright (c) 1997-2004 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
    als auch
    Code:
    Microsoft Windows XP [Version 5.1.2600]
    
    PHP 4.3.4 (cgi-fcgi) (built: Nov  2 2003 23:47:22)
    Copyright (c) 1997-2003 The PHP Group
    Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies

    Ich hab' mein Problem inzwischen durch splitten der Datei in 2-GB-Häppchen gelöst ...


    Und falls auch mal jemand rm statt mv tippt und der Film weg ist:

    PHP-Code:
    <?php
    ini_set
    ('max_execution_time'3600);

    $filesize 733153280;

    $files glob('hdb4.img*');

    foreach (
    $files as $file) {
        
    $fp fopen($file'r');

        while (!
    feof($fp)) {
            
    $old ftell($fp);
            
    $block fread($fp$bs 16 1024 1024);
            
    $pos strpos($block'RIFF');
            if (
    $pos === FALSE) {
                if (!
    feof($fp)) {
                    
    fseek($fp, -3SEEK_CUR);
                }
            }
            else {
                
    fseek($fp$old $pos);

                
    $fp2 fopen('pos_' ftell($fp) . '.avi''w');

                while (!
    feof($fp)){
                    
    fwrite($fp2fread($fp$bs));
                    if (
    ftell($fp2) > $filesize) {
                        break;
                    }

                }
                
                
    ftruncate($fp2$filesize);
                
                
    fseek($fp$old $pos 4);
            }
        }
    }

    ?>

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Unter welchem Betriebsystem?

    http://de2.php.net/manual/en/ref.filesystem.php
    but if you want PHP to support LFS (large files) on Linux, then you need to have a recent glibc and you need compile PHP with the following compiler flags: -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.
    http://de3.php.net/manual/en/function.filesize.php
    Note: Because PHP's integer type is signed and many platforms use 32bit integers, filesize() may return unexpected results for files which are larger than 2GB.
    Das gilt natürlich auch für den Integer, der bei fseek übergeben wird.

    Einen Kommentar schreiben:


  • tapferesschneiderlein
    antwortet
    Nee, war leider nix zum Thema dabei ...

    Einen Kommentar schreiben:


  • search
    antwortet
    lünk
    evtl. hilfts was

    Einen Kommentar schreiben:

Lädt...
X