2012-04-07 7 views
1

これは、各アダプタのRxとTxの生の値を返します(出力はペアになっています)。PHP関数、各アダプタのRxとTxを返します(Windowsの場合)?

<?php 
//windows network usage testing 
function win_netinfo(){ 
    ob_start(); 
    $wmi = new COM("Winmgmts://"); 
    $nets = $wmi->execquery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE BytesSentPersec > 1"); 
     foreach ($nets as $net) 
     { 
      $net_txbytes = $net->BytesSentPersec; 
      $net_rxbytes = $net->BytesReceivedPersec; 
      if ($net_txbytes < 0) { 
      $net_txbytes = $net->BytesTotalPersec - $net->BytesReceivedPersec; 

      } 
      if ($net_rxbytes < 0) { 
      $net_rxbytes = $net->BytesTotalPersec - $net->BytesSentPersec; 
      } 
      return $net_txbytes . "</br>"; //When it RETURNS it only shows the FIRST value... :/ WHAT DO? 
      } 
} 
echo win_netinfo(); 

?> 

出力は次のようにする必要があります:

21936313136 
12345163517 
13647613 
87653467 
546254 
246247 
87653642 
24583462 

(他のすべての行は、各アダプタのために、受信または送信です)。

作品現在コード:

<?php 
    # Peport All Errors 
    error_reporting(E_ALL); 

    # Create Object 
    $wmi = new COM("Winmgmts://"); 

    # Get net info 
    $oss = $wmi->execquery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface"); 

    # Show net info 
    foreach($oss as $os) 
    { 
     echo "BytesReceivedPerSec: " . $os->BytesReceivedPerSec . "<br />"; 
     echo "BytesSentPerSec: " . $os->BytesSentPerSec . "<br />"; 
     echo "BytesTotalPerSec: " . $os->BytesTotalPerSec . "<br />"; 
     echo "Caption: " . $os->Caption . "<br />"; 
     echo "CurrentBandwidth: " . $os->CurrentBandwidth . "<br />"; 
     echo "Description: " . $os->Description . "<br />";  
     echo "Frequency_Object: " . $os->Frequency_Object . " kb<br />"; 
     echo "Frequency_PerfTime: " . $os->Frequency_PerfTime . "<br />"; 
     echo "Frequency_Sys100NS: " . $os->Frequency_Sys100NS . "<br />"; 
     echo "Name: " . $os->Name . "<br />"; 
     echo "OutputQueueLength: " . $os->OutputQueueLength . "<br />"; 
     echo "PacketsOutboundDiscarded: " . $os->PacketsOutboundDiscarded . "<br />"; 
     echo "PacketsOutboundErrors: " . $os->PacketsOutboundErrors . "<br />"; 
     echo "PacketsReceivedNonUnicastPerSec: " . $os->PacketsReceivedNonUnicastPerSec . "<br />"; 
     echo "PacketsReceivedPerSec: " . $os->PacketsReceivedPerSec . "<br />"; 
     echo "PacketsReceivedUnicastPerSec: " . $os->PacketsReceivedUnicastPerSec . "<br />"; 
     echo "PacketsReceivedUnknown: " . $os->PacketsReceivedUnknown . "<br />"; 
     echo "PacketsSentNonUnicastPerSec: " . $os->PacketsSentNonUnicastPerSec . "<br />"; 
     echo "PacketsSentPerSec: " . $os->PacketsSentPerSec . "<br />"; 
     echo "PacketsSentUnicastPerSec: " . $os->PacketsSentUnicastPerSec . "<br />"; 
     echo "Timestamp_Object: " . $os->Timestamp_Object . "<br />"; 
     echo "Timestamp_PerfTime: " . $os->Timestamp_PerfTime . "<br />"; 
     echo "Timestamp_Sys100NS: " . $os->Timestamp_Sys100NS . "<br />"; 
     echo "<br /><br /><br />";  
    } 

?> 
+0

あなたの 'foreach'ループに' return'ステートメントがあります。私はそれがあなたが望むものではないと思っています。 – Tomalak

答えて

1

下記ごので、最初の反復後に返すのみ1の結果は、私は配列を作成し、代わりにそれを返すことでそれを行うだろうかです:

<?php 
//windows network usage testing 
function win_netinfo(){ 
    $wmi = new COM("Winmgmts://"); 
    $nets = $wmi->execquery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface WHERE BytesSentPersec > 1"); 
    $return=array(); 
    $i=0; 
    foreach ($nets as $net){ 

     $return[$i]['name']=$net->Name; 

     if ($net->BytesSentPersec < 0) { 
      $return[$i]['net_txbytes'] = $net->BytesTotalPersec - $net->BytesReceivedPersec; 
     }else{ 
      $return[$i]['net_txbytes'] = $net->BytesSentPersec; 
     } 

     if ($net->BytesReceivedPersec < 0) { 
      $return[$i]['net_rxbytes'] = $net->BytesTotalPersec - $net->BytesSentPersec; 
     }else{ 
      $return[$i]['net_rxbytes'] = $net->BytesReceivedPersec; 
     } 
     $i++; 
    } 
    return $return; 
} 

$adapters=win_netinfo(); 
/*Array 
Array 
(
    [0] => Array 
     (
      [name] => VirtualBox Host-Only Ethernet Adapter 
      [net_txbytes] => 5095956 
      [net_rxbytes] => 0 
     ) 

    [1] => Array 
     (
      [name] => Belkin 54g Wireless USB Network Adapter 
      [net_txbytes] => 532337967 
      [net_rxbytes] => 5252455518 
     ) 

) 
*/ 
?> 

<?php 
foreach($adapters as $adapter){ 
    echo '<p>'.$adapter['name'].' - Sent: '.$adapter['net_txbytes'].' bytes - Received: '.$adapter['net_rxbytes'].' bytes</p>'; 
} 
?> 
+0

多くのありがとうございます。これは本質的に目標です。このデータを各アダプターの配列に入れて、それを機能させる方法はわかりませんでした。時間を無駄にする:3.5。 – ionFish

+0

np、私はあまりにもあなたがこれのようなものにアクセスできることを知らなかったことを学んだ。 –

+0

ええと、私たちが今作業しているものを見るべきです。私のサイトをチェックしてください。これは、Projectsページの "Server Status"と呼ばれています。私は後で説明と情報を入力します。 – ionFish

関連する問題