PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : löschen aus datei



robiotor
29-07-2004, 15:05
ich habe eine datei die schaut so aus

default {
default {
deny spoof
deny spoof_all
deny spoof_privport
allow random
allow random_numeric
allow numeric
allow hide
}
}

User hans {
default {
force reply "user1"
}
}

User meier {
default {
force reply "user2"
}
}


ich habe mit einer select anweisung aus der datenbank dann $row[identd] mit dem inhalt user1 oder user2. Nun möchte ich angenommen wenn user1 alles das hier löschen:

User hans {
default {
force reply "user1"
}
}


kann mir jemand da helfen. eine datei öffnen weis ich wie das geht, in der datei schreiben weis ich auch wie das geht und einen satz könnte ich auch noch hinbekommen, aber das da beschäftigt mich schon seit ein paar tage.

danke euch im vorraus

Alexander
29-07-2004, 15:16
Hallo,


Kompliziert:
ich gehe davon aus, dass komplette Zeilen gelöscht werden sollen. Wenn ja, kannst Du die Datei in ein Array laden (eine Zeile ein Eintrag im Array)



<?php
$file_in_array = file("../datei_zum_laden.txt");
?>


Jetzt ist im $file_in_array[0] z.B. die erste Zeile der Datei 'abgelegt'. DAnn kannst Du z.B. eine Schleife machen, die Dir das komplette Array Zeile für Zeile ausgibt. Wenn Du vor jede Zeile eine entsprechende Checkbox machst, kannst Du eine Funktion bauen, die Dir alle Zielen, die nicht angeklickt wurden in ein neues schreiben und dieses neue Array dann in die Datei schreiben. Soweit mir bekannt, wird die Datei komplett geleert, wenn Du diese nur zum schreiben öffnest. Müsstest dazu aber nochmal im PHP Manual nachsehen. (Bin mir eben nicht sicher)

Einfach:
Du liest die Datei aus und schreibst den inhalt in eine Variable die Du in einem Textarea ausgibst. Das kannst Du dann bearbeiten wie Du willst und hinterher dann die veränderte Variable wieder in die Datei schreiben.

Gruß Alexander

robiotor
29-07-2004, 20:01
nein ich kann keine checkboxen machen, das script rennt auf der console per crontab.

was ich bis jetzt gemacht habe



$lines = file ('oidentd.conf');
$fp2 = fopen("oidentd.conff", "w+") or die ("Kann Config Datei nicht lesen.");
foreach ($lines as $line_num => $line) {
$inhalt = ereg_replace("User b001_3 {","",$line); //Text löschen
fwrite($fp2, $inhalt);
}
fclose($fp2);


also ich lese die datei mit file ein
nun schreibe ich den inhalt line für line wieder in der datei oidentd.conff später kann ich diese umbenehnen. den text User b001_3 { wird dabei in der neue datei nicht geschrieben, ich habe es probiert hier den ganzen part einzugeben aber es geht nicht.
vieleicht hat der eine oder andere doch ne idee wie ich mehrere zeilen löschen kann also zb.

User b001_1 {
default {
force reply "dingdong"
}
}

undefined
30-07-2004, 07:13
<?php
$suche = "b002_1";
$datei = file_get_contents("test.conf");//PHP 4.3 => PHP5
$reg = "

(User\s+$suche\s+\{[\s+]?[\n][\s+]?default\s+\{\s+[\n][\s+]?force[\s+]reply[\s+]?\"[\w|\d]+\"[\s+]?[\n][\s+]?\}[\s+]?[\n][\s+]?\}[\s+]?)

";
echo "<pre style=\"color:green;\">";
print_r ($new);
echo "</pre>";
?>
Den String wie gehabt schreiben, bei PHP 5 Würde ich file_put_contents verwenden ;)
PS: Normalerweise würde ich so etwas wenn schon auf Console mit einem Diff oder Batch Befehl erledigen ;)

robiotor
01-08-2004, 14:37
ok also fast geht es nun, wie habe ich es gemacht ?



$str = implode("", file("oidentd.conf"));
$inhalt = ereg_replace("User ".$row['login']." {
default {
force reply \"".$row2['identd']."\"
}
}
",'', $str); //Text löschen

$fp2 = fopen("oidentd.conff", "w+") or die ("Kann Config Datei nicht lesen.");
fwrite($fp2, $inhalt);
fclose($fp2);


nun stört mich das ich an dieser stelle dann eine leerzeile geschrieben bekomme. mit der zeit wird die datei ganz schön verunstaltet. jemand eine idee ?