[PHP] Modification de variable

Vitarvea
Invité n'ayant pas de compte PHPfrance

12 oct. 2010, 10:50

Bonjour,

J'ai un petit soucis dans mon code php, il fonctionne bien mais je souhaite y apporter une petite amélioration.
Le code consiste à se connecter en telnet (en utilisant fsockopen()) et à récupérer une ligne de données. Dans cette ligne se trouve toutes mes données, je balance donc un petit substr pour y récupérer seulement le fragment qui m'intéresse.
Je passe ensuite ce fragment dans la moulinette du preg_replace en y ajoutant un pattern et un modèle de sortie.

Mon code récupère bien les données. En revanche les données sont en bytes, b/s (je récupère donc seulement des informations sur le traffic), et je souhaite les transformer en Ko / Mo, Ko/s / Mo/s, sauf que je n'arrive pas à modifier la variable ><

Voici mon code :
tel.php

Code : Tout sélectionner

<?php include ('func.php'); $switch = '127.0.0.1'; $port = 23; $fp = fsockopen($switch, $port); if(!$fp) { echo 'Connection perdue'; } else { fwrite($fp, "use sid=2\r\n"); fwrite($fp, "serverinfo\r\n"); stream_set_timeout($fp, 0, 25000); while ($i<5) //nb max de lignes à récupérer { $i++; $line = fgets($fp, 1024); if(preg_match('#connection_bytes_received_total=(\d+)#', $line)) { // je cherche mon fragment $data = substr($line, strpos($line, 'connection_bytes_received_total'), 42); // je l'extrait $pattern = '/(\w+)=(\d+)/i'; // je le mouline avec mon pattern $replacement = '${1} : $2'; // $2 est ma variable à modifier //$replacement = '${1} : conv_traffic($2)'; // ça aurait été trop beau pour fonctionner :D //$2 = conv_traffic($2); // j'y ai presque cru aussi >< echo preg_replace($pattern, $replacement, $data).'<br>'; // j'affiche le tout } } } ?>
J'ai déjà ma fonction de conversion :
func.php

Code : Tout sélectionner

<?php function conv_traffic($bytes) { if ($bytes<1024) { $ret=$bytes."o"; } elseif($bytes<1048576) { $ret=round(($bytes/1024), 2)."Ko"; } elseif($bytes<1073741824) { $ret=round(($bytes/1048576), 2)."Mo"; } elseif($bytes<1099511627776) { $ret=round(($bytes/1073741824), 2)."Go"; } return $ret; } ?>
Quelqu'un a une petit idée ? =) Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 oct. 2010, 21:45

As-tu regardé du côté de preg_replace_callback() ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...