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

Langage PHP Discussion :

afficher 10 dernières lignes avec fgets


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut afficher 10 dernières lignes avec fgets
    Hello,

    J'aurai besoin d'une petite aide pour récuperer des données depuis une connexion ssh2 en php.
    Le code ci-dessous fonctionne parfaitement et m'affiche toutes les lignes présentes lors de l’exécution de mes commandes.

    Question comment pourrais-je n'afficher que les 10 dernières lignes par exemple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Execution of any command
    // Be careful to add an '\n' at the  end of the command
    $command = "7\n";
    fwrite($stdio,$command);
    $command2 = "3\n";
    fwrite($stdio,$command2);
    $iprouter = "192.168.0.1";
    $command3 = "ping ".$iprouter."\n";
    fwrite($stdio,$command3);
    sleep(5);
    fwrite($stdio, chr(3));
     
    // IMPORTANT
    // For some obscur reasons, just after ur command, u need to make a sleep to be sure, that the command has reached the server and is running
    sleep(1);
     
    // Then u can fetch the stream to see what happens on stdio
    while($line = fgets($stdio)) {
    		flush();
    		echo $line."<br />";
    }
    Toute serait la bienvenue.

    Thx

  2. #2
    Membre habitué Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Points : 168
    Points
    168
    Par défaut
    Stocke chaque lignes du fichier dans un array (avec array_push($lineArray, $line)).
    Ensuite tu fait une boucle pour afficher que les 10 dernières lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // ...
    $nbrShow = 10; // nombre d'affichages
    $lineArray = array();
     
    while($line = fgets($stdio))
    {
        flush();
        array_push($lineArray, $line);
    }
     
    $showCount = 0;
    while($showCount < $nbrShow)
    {
        $showCount++;
        echo $array[(count($array)-$showCount)].'<br />';	
    }
    // ...

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par cfillion Voir le message
    Stocke chaque lignes du fichier dans un array
    histoire de bouffer plein de mémoire pour rien

  4. #4
    Invité
    Invité(e)
    Par défaut
    @cfilion merci pour l'aide

    par contre j'ai un message qui dit que la variable array n'est pas défini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined variable: array in C:\wamp\www\ISDTOOLS\putty.php on line 56
    @stealth35
    Peut-être mais au moins il m'a donné une piste déja.
    Si tu as une meilleure proposition, on s'en sortira tous grandi

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    soit tu lis le fichier a partie de la fin et tu fait le fgets manuellement, soit tu le parcours mais a partir de 10 entré de tableau tu surprimes la première entré a chaque tour de boucle, comme ça ton tableau ne dépassera jamais 10 entrés

  6. #6
    Membre habitué Avatar de cfillion
    Homme Profil pro
    Arrangeur musical
    Inscrit en
    Avril 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Arrangeur musical
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2010
    Messages : 49
    Points : 168
    Points
    168
    Par défaut
    Voici un nouveau code sans erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // ...
    $nbrShow = 10; // nombre d'affichages
    $lineArray = array();
     
    while($line = fgets($stdio))
    {
        flush();
        array_push($lineArray, $line);
    }
     
    $showCount = 0;
    while($showCount < $nbrShow)
    {
        $showCount++;
        echo $lineArray[(count($lineArray)-$showCount)].'<br />';	
    }
    // ...
    Mais l'idée de stealth35 de lire le fichier à partir de la fin est très bonne.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    à quoi sert le flush ?, pour ajouter un seul élément a un array utilise direct array[], pour le count tu peux direct faire un array_slice, surtout que le début correspond a la fonction file

  8. #8
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    salut,

    pourquoi ne pas modifier ta requete plutot que ton code php ?
    tu ping qu'une seule fois (ca evite d'attendre 4sec ou plus), et comme ca t'auras pas plus de 10 lignes.
    Code windows : Sélectionner tout - Visualiser dans une fenêtre à part
    ping -n 1 ton.ip
    Code linux : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ping -c1 ton.ip
    tu peux meme faire:
    ping -c1 ton.ip | tail
    (juste pour etre sur xD)

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    voila pour le lire a l'envers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $filename = 'test.txt';
    $num      = 10;
     
    $size    = filesize($filename);
    $handle  = fopen($filename, 'rb');
    $current = &$lines[];
     
    while(fseek($handle, $size--) === 0)
    {
        $char = fgetc($handle);
     
        if($char === "\n")
        {
            if(count($lines) === $num)
            {
                break;
            }
     
            $current = &$lines[];
        }
     
        $current .= $char;
    }
     
    $lines = array_map('strrev', $lines);
    fclose($handle);
     
    print_r($lines);

  10. #10
    Invité
    Invité(e)
    Par défaut
    Super merci pour la réponse.
    J'ai du réadapter un peu le code et utilise le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        while (!feof($fd)) {
     
            // Il est temps de lire une ligne du fichier et en tout cas au maximum 1024 caractères
            $ligne = fgets($fd, 1024);
            // Si la fin du fichier n'est pas atteinte On peut maintenant afficher la ligne
            if (!feof($fd) AND $i>"149") {
    			echo "<div class=\"tre\">" .htmlEntities($ligne)."</div>";
            }
    		$i++;
     
        }
    Problème résolu

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/11/2009, 17h18
  2. Réponses: 6
    Dernier message: 22/09/2008, 15h52
  3. [MySQL] sélection des dernières lignes avec affichage aléatoire
    Par nabmoah dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/08/2008, 00h57
  4. Réponses: 6
    Dernier message: 03/12/2007, 15h13
  5. afficher la dernière ligne d'un TLisBox
    Par richard038 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/10/2005, 10h31

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