Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Value too large for defined data type in
Forum PHP.pl > Forum > PHP
bizoniks
Witam!

korzystam z skryptu który czyści pliki ze zbędnych śmieci i wygląda tak:
  1. <?php
  2. $plik="TRAJECTORY";
  3. $wynik="nowa_traj";
  4. $fp_wyn = fopen($wynik, "w");
  5. ini_set("memory_limit", "1000000");
  6. set_time_limit(3600000);
  7. $fp = fopen($plik, "r");
  8. $ile_atomow=12;
  9. if ($fp){
  10.        $i=0;
  11.        $suma=0;
  12.        while (!feof($fp)){
  13.                for ($k=0; $k<$ile_atomow; $k++)
  14.                {
  15.                        $zm[$k]=fgets($fp);
  16.                        //$zm1[$k]=trim($zm[$k]);
  17.                        $linia=split(' {1,}',trim($zm[$k]));
  18.                        $nr[$k]=$linia[0];
  19.                        //echo("$nr[$k]");
  20.                        while (sizeof($linia)!=7) //opuszczamy linie nie pasujace do schematu
  21.                        {
  22.                                $zm[$k]=fgets($fp);
  23.                                //$zm1[$k]=trim($zm[$k]);
  24.                                $linia=split(' {1,}', trim($zm[$k]));
  25.                                $nr[$k]=$linia[0];
  26.                                if (feof($fp)) break 3; //nie ma co wczytywac, wiec wychodzimy z while, for i while
  27.                        }
  28.                        if ($nr[$k]!=$nr[0])
  29.                        {
  30.                                for ($i=1; $i<=$k; $i++)
  31.                                {
  32.                                        $zm[$i-1]=$zm[$i];
  33.                                        $nr[$i-1]=$nr[$i];
  34.                                }
  35.                                $k--;
  36.                        }
  37.                }
  38.                for ($k=0;$k<$ile_atomow; $k++)
  39.                        #if (sizeof(split(' {1,}',trim($zm[$k]))==7))
  40.                                fprintf($fp_wyn, "%s", $zm[$k]);
  41.        }
  42.  
  43. }
  44. else
  45. {
  46. echo("nie ma takiego pliku");
  47. }
  48. ?>

plik do czyszczenia nazywa się TAJECTORY, jest plikiem tekstowym i ma około 11GB. Po uruchomieniu skrypty php5 traj.php dostaje niezmiennie komunikat:
PHP Warning: fopen(TRAJECTORY): failed to open stream: Value too large for defined data type in /home/bizon/TMP-obl/CHOCH2O/traj.php on line 7
nie ma takiego pliku

Bardzo proszę o pomoc!
Zyx
Niestety, jeśli chcesz ten plik przetwarzać w PHP, musisz go rozbić na kawałki. PHP (i nie tylko - ograniczenie to dotyczy niemałej liczby programów) nie obsługuje plików o rozmiarach większych, niż 2 GB, a główny powód to zbyt mała długość typu integer, który tutaj jest tylko i wyłącznie 32-bitowy ze znakiem. W związku z tym nie masz nawet fizycznej możliwości, by przesunąć się na pozycję powyżej tego drugiego gigabajta, bo da rady się jej wpisać. Sprawa ta jest znana od bardzo dawna; pierwotnie miała być rozwiązana w PHP 5.1, ale najprawdopodobniej nie ujrzymy wsparcia dla wielkich plików aż do wersji 6.0, co w sumie nie jest takie dziwne, ponieważ przetwarzanie 11-gigabajtowych plików to nie jest raczej rzecz, do której PHP został stworzony smile.gif. Do wersji 5.3 istnieje patch, który w tle zapisuje pozycje i rozmiary plików jako 64-bitowy integer przepisany bit po bicie do typu double. Jednak zmienia on działanie tylko podstawowych funkcji - jeżeli jakieś rozszerzenia realizowały obsługę plików we własnym zakresie, dalej nie będą one działać. Po zaaplikowaniu patcha musisz ponownie skompilować PHP, zatem jest to sposób w zasadzie tylko na komputer domowy. Żaden hosting raczej czegoś takiego nie będzie wrzucać tym bardziej, że wersja 5.3 nie jest jeszcze gotowa. Link jednak podaję: http://news.php.net/php.internals/32767
webdice
Proszę o dodanie bbcode, w innym wypadku temat zostanie zamknięte.
bizoniks
Zmienione. Przepraszam za kłopot.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.