PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei PHP-Arrays


JasonX
2013-03-15, 02:05:46
Hi,

möchte gerne die Konfiguration der "iptables" von meinem Ubuntuserver übersichtlich in einer Tabelle anzeigen lassen via PHP.

Soweit habe ich meinen Server dazu bekommen das mein Apache nun die Befehle ausführen kann.

Das setzen von iptables, das löschen von selbigen usw klappt wunderbar.

Auch die Ausgabe von iptables -L --list-numbers funktioniert auch.

Ich möchte jedoch, das mir die Ausgabe von iptables -L --list-numbers in einer html Tabelle dargestellt wird.
Das Problem ist, das shell_exec mir einen String ausgibt.
Jetzt habe ich den String schon mittels str_replace/preg_replace/explode und unset soweit hinbekommen das mir nur noch die Werte in einem Array übrig bleiben.

Das Problem ist ich weiß nicht wie ich die Werte jetzt vernünftig in eine Schleife bekomme um sie korrekt in einer Tabelle darzustellen.

<?php
$tmp = shell_exec("iptables -L INPUT --line-numbers");
echo nl2br($tmp) .'<br /><br /><br /><br />';


$tmp = str_replace("Chain INPUT (policy ACCEPT)","",$tmp);
$tmp = str_replace("num","",$tmp);
$tmp = str_replace("target","",$tmp);
$tmp = str_replace("prot","",$tmp);
$tmp = str_replace("opt","",$tmp);
$tmp = str_replace("source","",$tmp);
$tmp = str_replace("destination","",$tmp);
$tmp = str_replace('*/','',$tmp);
$tmp = str_replace('/*','',$tmp);
$tmp = preg_replace('/(?:[ \t]*(?:\n|\r\n?)){2,}/'," ",$tmp);
$tmp = preg_replace('/\s\s+/', ' ', $tmp);
$rulearray = explode(" ",$tmp);
$max = count($rulearray);
for ($i = 0; $i <= count($rulearray); $i++){
if($rulearray[$i] == ""){
unset($rulearray[$i]);
}
$rulearray = array_merge($rulearray);
}
$rulearray = array_merge($rulearray);
print_r($rulearray);
echo '<br /><br /><br />';
?>
<table border="1" cellpadding="2" cellspacing="0" summary="" style="font-size: 10px;">
<tr>
<th style="text-center;">Regelnummer</th>
<th style="text-center;">Verhalten</th>
<th style="text-center;">Protokoll</th>
<th style="text-center;"></th>
<th style="text-center;">Quell-Adresse</th>
<th style="text-center;">Ziel-Adresse</th>
<th style="text-center;">Quellport</th>
<th style="text-center;">Zielport</th>
<th style="text-center;">Kommentar</th>
</tr>
<?php
for ($i=0;$i < count($rulearray);$i+=9){

?>


<tr>
<td style="text-center;"><?php echo $rulearray[$i] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+1] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+2] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+3] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+4] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+5] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+6] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+7] ?></td>
<td style="text-center;"><?php echo $rulearray[$i+8] ?></td>
</tr>


<?php

}
echo '</table>';
?>

Und hier das Problem

http://puu.sh/2hR7q

Ganz oben ist der String der mir zurückgegeben wird.
In der mitte das Array
Unten die Tabelle

Ich komme einfach nicht auf den Trichter wie ich den Fehler ausbügeln könnte.

Ich weiß, das ist nicht der tollste Code. Er grenzt schon an Bastardcode.
Vielleicht hab ich schon von grund auf den falschen ansatz gehabt, keine Ahnung,

MfG
Jason

Drexel
2013-03-15, 08:32:45
Dein Problem ist, dass Deine zeilen unterschiedlich viele Spalten haben. Wenn Die Zeile immer mit nem String aufhört, der mit /* anfängt und mit */ aufhört, könntest Du z.B. daran überprüfen, ob Du Dich am Ende der zeile befindest und dann eine neue Zeile anfangen.

Dafür musst Du Deine Schleife etwas umbauen, dass sie einfach jedes Element iteriert und innerhalb der Schleife Code einfügen, der abhängig vom Ende des Datensatzes Zeilen beendet und neu beginnt.

Allerdings hast Du durch das fehlen von Werten das Problem, dass Du nicht immer genau weisst in welche Spalte welcher Wert musst, kA ob Du das irgendwie unterscheiden kannst anhand des Strings, ich weiss nicht was beim Ausgabestring fehlen kann und was nicht.