IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Lire partie de fichier sans ouvrir le fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut Lire partie de fichier sans ouvrir le fichier
    Bonjour,

    A la base je dois lire un gros fichier (>4Go) en php, mais sous la redhat le fopen de mon fichier renvoi une erreur (File too large).
    Cela fonctionne sous une Debian Lenny (fopen puis fgets(4096))

    Du coup je voudrais savoir s'il y a une commande shell qui permet de lire de l'octet x à l'octet y sans ouvrir le fichier.
    Du genre
    oct_read -f path_to_mon_fichier -start 0 -end 4096
    Qui lirait les 4096 premiers octets de mon fichier.
    Comme ca je pourrais faire un shell_exec de cette commande qui me permettrai de ne pas utiliser fopen qui ne marche pas sous la redhat.

    Y a t'il un moyen de faire ca ?

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    head -c 4096 ton_fichier ?

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 104
    Points : 28 397
    Points
    28 397
    Par défaut
    Du coup je voudrais savoir s'il y a une commande shell qui permet de lire de l'octet x à l'octet y sans ouvrir le fichier.
    Il faut toujours ouvrir un fichier pour le lire, quelle que soit la commande qui fait la lecture

    Il y a peut-être une bibliothèque complémentaire ou une option de compilation pour pouvoir ouvrir de grands fichiers.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Oui al1_24 tu as raison mais je voulais juste faire comprendre que je ne voulais pas récupérer tout mon fichier ;-). Sinon il y a possibilité de recompiler php avec le flag 64bit mais je ne peux pas...
    Merci de ta réponse zipe31, mais cette commande à l'aire de ne recupérer que le début du fichier...

    Je viens de réussir en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dd if=mon_fichier bs=1 skip=0 count=4096
    dd if=mon_fichier bs=1 skip=4096 count=4096
    dd if=mon_fichier bs=1 skip=8192 count=4096
    ...
    Ca à l'air de bien marcher, mais je ne l'ai pas encore tester dans mon contexte.
    Y a t'il une meilleure méthode ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par calitom Voir le message
    Y a t'il une meilleure méthode ?
    il y a 'split' qui simplifie un peu la boucle, mais ça coûte cher en espace disque puisque le fichier est entièrement dupliqué.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    Du coup voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while ($taille_lue<$taille_totale)
    {
      shell_exec("dd if=".escapeshellarg($fsource)." bs=1 skip=".$taille_lue." count=4096 > /tmp/import_xml.txt");
      $ligneXML=file_get_contents('/tmp/import_xml.txt');
      $taille_lue += strlen($ligneXML);
    }
    Le problème est qu'il y a des caractères parasites : "^@" devant chaque lettre en éditant avec nano mon fichier '/tmp/import_xml.txt'...

    Une idée sur comment récupérer la redirection de cette commande sans ces caractères ?

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par calitom Voir le message
    Merci de ta réponse zipe31, mais cette commande à l'aire de ne recupérer que le début du fichier...
    Ben c'est pourtant ce que tu demandais dans ton 1er message si je ne m'abuse, non ?

    Citation Envoyé par calitom Voir le message
    Du coup je voudrais savoir s'il y a une commande shell qui permet de lire de l'octet x à l'octet y sans ouvrir le fichier.
    Du genre

    Qui lirait les 4096 premiers octets de mon fichier.
    Je sais bien qu'il y avait aussi de mentionner "de lire de l'octet x à l'octet y", mais j'ai quand même répondu à la demande.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    818
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2005
    Messages : 818
    Points : 288
    Points
    288
    Par défaut
    C'était la ligne qui traduisait ma ligne de commande inventée, mais je reconnais que ce n'était pas forcément très clair ! ;-)

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/10/2011, 10h48
  2. Ouvrir un fichier sans ouvrir de fenêtre
    Par RamyBoulet dans le forum GWT et Vaadin
    Réponses: 15
    Dernier message: 02/03/2010, 16h46
  3. Réponses: 3
    Dernier message: 22/06/2009, 13h57
  4. Comment ouvrir un fichier sans ouvrir le dialogue ?
    Par chacarre dans le forum Débuter
    Réponses: 2
    Dernier message: 24/04/2008, 18h34
  5. Automation excel - ouvrir un fichier sans classeur
    Par Celia1303 dans le forum Access
    Réponses: 3
    Dernier message: 23/11/2005, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo