Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Value too large for defined data type in, fopen
bizoniks
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


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!

Ten post edytował bizoniks 19.11.2008, 20:33:58
Go to the top of the page
+Quote Post
Zyx
post
Post #2





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Proszę o dodanie bbcode, w innym wypadku temat zostanie zamknięte.
Go to the top of the page
+Quote Post
bizoniks
post
Post #4





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.11.2008

Ostrzeżenie: (0%)
-----


Zmienione. Przepraszam za kłopot.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:27