par
Vitarvea » 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
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]<?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
}
}
}
?>[/code]
J'ai déjà ma fonction de conversion :
func.php
[code]<?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;
}
?>[/code]
Quelqu'un a une petit idée ? =) Merci