• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SimpleXMLElement Object zum rechnen verwenden

hesostein

Neues Mitglied
Hey,

und zwar lese ich mit phpsysinfo (das is ein php-skript welches Systeminformationen ausliest) meine Systeminformationen aus ^^

Dieses Skript kann auch in XML ausgeben.

jetzt arbeite ich mit simplexml und lese eben die Daten aus und bekomme dann lauter 'SimpleXMLElement Object'-Objekte.
Nun habe ich eben ein Objekt, welches mir anzeigt, wieviel Festplattenspeicher ich noch frei habe, wieviel benutzt wird und wieviel ich insgesamt habe.

Jetzt habe ich aber 6 Festplatten, das wären dann 6 Objekte. da ich aber den insgesamten Wert anzeigen lassen möchte, wird das etwas schwer, da ich mit diesen Objekten nicht rechnen kann.

Beispiel:
SimpleXMLElement Object ( [0] => 104763793408 )
SimpleXMLElement Object ( [0] => 94355591168 )
SimpleXMLElement Object ( [0] => 91101859840 )
SimpleXMLElement Object ( [0] => 129390600192 )
SimpleXMLElement Object ( [0] => 67770834944 )
SimpleXMLElement Object ( [0] => 88508350464 )
Das sind die 6 Werte.
Ich möchte jetzt eben Wert1+Wert2+Wert3 usw machen, aber leider bekomme ich dann einen völlig sinnlosen Wert raus.

Weiss jemand, wie ich das am besten lösen kann?

Danke im Vorraus für die Hilfe.
 
Steck die Objekte in ein Array (wenn sie nicht schon in einem sind) und lauf mit einer Schleife drüber.
 
Ja das hab ich ja schon ...
PHP:
while($i < $max){
            if(!empty($xml->FileSystem->Mount[$i]['MountPointID'])){
                if($xml->FileSystem->Mount[$i]['Name'] == 'Local Disk'){
                    $return_str['HDD'][$i] = array(
                        'free'    => $xml->FileSystem->Mount[$i]['Free'],
                        'used'    => $xml->FileSystem->Mount[$i]['Used'],
                        'total'    => $xml->FileSystem->Mount[$i]['Total']
                    );
                }
            }
            $i++;
        }
damit wird ausgelesen (in einer funktion)

PHP:
$hdd = $svr_info['HDD'];
        $i = 0;
        $max = count($hdd);
        foreach($hdd as $value){
            foreach($value as $key =>$value){
                switch($key){
                    case 'free':
                        $free[] = $value;
                        break;
                    case 'used':
                        $used[] = $value;
                        break;
                    case 'total':
                        $total[] = $value;
                        break;
                }
            }
        }
damit wird dann alles in entsprechende Arrays geschrieben
PHP:
foreach($free as $value){
            print_r($value);
            echo '<br />';
        }
und das hier erzeugt das:
SimpleXMLElement Object ( [0] => 104763793408 )
SimpleXMLElement Object ( [0] => 94355591168 )
SimpleXMLElement Object ( [0] => 91101859840 )
SimpleXMLElement Object ( [0] => 129390600192 )
SimpleXMLElement Object ( [0] => 67770834944 )
SimpleXMLElement Object ( [0] => 88508350464 )
 
Na wenn du schon über jeden Eintrag drüberläufst, kannst du dir die Werte doch Speichern und addieren.
 
Inwiefern speichern?

also derzeit mache ich das so:
zuerst wird geprüft ob in einer definierten mysql-tabelle werte zu finden sind.
wenn ja, dann werden die werte ausgegeben, wenn nein, werden sie aus der xml ausgelesen und abgespeichert.

Wenn ich jetzt aber jeden Festplatten wert in die mysql-db speicher, dann komme ich auf insgesamt (mit den anderen werten) auf 10 INSERTS. Zwar wird dies nur alle 7 Tage geschehen, aber dennoch verursacht das eine Wartezet von mehr als 5 Sekunden, was für PHP echt "lange" ist.

Aber wenn es anders nicht geht, dann mach ich es eben so.
 
Moment. Mit
PHP:
$hdd = $svr_info['HDD'];
holst du dir doch die Informationen über alle Festplatten, oder?

Für jede Festplatte gibt es freien Platz, belegten Platz und gesamten Platz. Du willst diese Werte addiert haben.

Was steht hier in $value?
PHP:
switch($key){
   case 'free':
    $free[] = $value;
    break;
  case 'used':
    $used[] = $value;
    break;
  case 'total':
    $total[] = $value;
    break;
}
 
da steht jeweils das SimpleXMLElement Object drinne

also ich habe das soweit verstanden, wenn ich ein SimpleXMLElement Object in eine VARIABEL schreibe, dann kommt zbsp sowas raus: (mit print_r ausgegeben)
SimpleXMLElement Object ( [0] => 104763793408 )
wenn ich es aber mit ECHO ausgebe, dann kommt sowas bei raus:
104763793408

wenn ich dan versuche mit der definierten VARIABEL zu rechnen kommt Müll bei raus ... ein Wert der KLEINER als der gesamte Speicher meiner größten Festplatte ist ...
 
Das sollte es sein.
PHP:
$xml = new SimpleXMLElement('xyz.xml', null, true);
$free = 0;
$used = 0;
$total = 0;
foreach ($xml->FileSystem->Mount as $mount) {
	$free += $mount[0]['Free'];
	$used += $mount[0]['Used'];
	$total += $mount[0]['Total'];
}
echo $free . " " . $used  ." " . $total;
 
Zurück
Oben