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

  • 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?


  • #2
    lünk
    evtl. hilfts was
    schlimmer gehts nimmer.... dümmer immer!

    Kommentar


    • #3
      Nee, war leider nix zum Thema dabei ...

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          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);
                  }
              }
          }

          ?>

          Kommentar


          • #6
            Filme einlesen und bearbeiten ?
            Neugier ...

            Kommentar


            • #7
              > 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 ...

              Kommentar


              • #8
                Achso

                Kommentar

                Lädt...
                X