Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/05/2011, 13h15   #1
Invité régulier
 
Inscription : mai 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 23
Points : 6
Points : 6
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 :
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
hhm2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 23h17   #2
Membre habitué
 
Avatar de cfillion
 
Homme Christian Fillion
Étudiant en musique
Inscription : avril 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Christian Fillion
Localisation : Canada

Informations professionnelles :
Activité : Étudiant en musique
Secteur : Arts - Culture

Informations forums :
Inscription : avril 2010
Messages : 47
Points : 120
Points : 120
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 :
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 />';	
}
// ...
cfillion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2011, 23h20   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par cfillion Voir le message
Stocke chaque lignes du fichier dans un array
histoire de bouffer plein de mémoire pour rien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 03
Vieux 22/05/2011, 11h16   #4
Invité régulier
 
Inscription : mai 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 23
Points : 6
Points : 6
@cfilion merci pour l'aide

par contre j'ai un message qui dit que la variable array n'est pas défini.
Code :
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
hhm2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2011, 14h42   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/05/2011, 19h24   #6
Membre habitué
 
Avatar de cfillion
 
Homme Christian Fillion
Étudiant en musique
Inscription : avril 2010
Messages : 47
Détails du profil
Informations personnelles :
Nom : Homme Christian Fillion
Localisation : Canada

Informations professionnelles :
Activité : Étudiant en musique
Secteur : Arts - Culture

Informations forums :
Inscription : avril 2010
Messages : 47
Points : 120
Points : 120
Voici un nouveau code sans erreur :

Code :
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.
cfillion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 09h38   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
à 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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h01   #8
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
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 :
ping -n 1 ton.ip
Code linux :
1
2
3
4
ping -c1 ton.ip
tu peux meme faire:
ping -c1 ton.ip | tail
(juste pour etre sur xD)
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h24   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
voila pour le lire a l'envers
Code :
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);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 10h29   #10
Invité régulier
 
Inscription : mai 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 23
Points : 6
Points : 6
Super merci pour la réponse.
J'ai du réadapter un peu le code et utilise le bout de code suivant:

Code :
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
hhm2007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h32.


 
 
 
 
Partenaires

Hébergement Web