Lire gros fichier >3GB

Résolu/Fermé
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - Modifié par totodunet le 25/01/2015 à 19:09
totodunet Messages postés 1377 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 5 mars 2020 - 17 mars 2015 à 19:37
Bonjour,

Je voudrais lire un très gros fichier texte de plusieurs Go. Le problème est que le compilateur PHP de mon hébergeur est un 32 bits et donc la taille maximale du integer est inférieure à la taille de mon fichier en bytes.

J'utilise la fonction fseek pour me déplacer dans le fichier. Et j'ai essayé de contourner le problème de différente façons (récursivité, boucle) mais rien n'y fait... quand le curseur est arrivé à une position égale à la taille max du int dans le fichier, il ne peut pas avancer plus loin.

Mon code qui ne fonctionne pas :

function fseek_bigfile($file,$pos,$first=0){

  if($first) fseek($fp,0,SEEK_SET);

  $pos=floatval($pos);

  if($pos<=PHP_INT_MAX){

   fseek($file,intval($pos),SEEK_CUR);

  }else{

   while($pos>PHP_INT_MAX){
    fseek($file,PHP_INT_MAX,SEEK_CUR);
    $pos-=floatval(PHP_INT_MAX);
    echo " ".$pos;
   }

   fseek($file,intval($pos),SEEK_CUR);
  }
 }


Si vous avez une solution, merci de me répondre! ^^

si il y en a pas, je pense que je serai contraint de scinder mon fichier en plusieurs petits fichiers

Merci pour vos remarques!!

Qui ne tente rien n'a rien

8 réponses

NHenry Messages postés 15032 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 janvier 2023 333
25 janv. 2015 à 22:09
Si ton hébergeur ne peut pas faire plus de 2Go, tu devra découper ton fichier, il n'y a pas de méthode pour contourner une restriction système (à ma connaissance).
1