robiotor
28-06-2004, 16:47
ich habe folgendes problem.
ich möchte aus der datei shadow nach dem ersten : den string ersetzten, der string geht dann bis zum 2ten :
und so mache ich das
$test2 = system("grep $row[pop3postfach]: shadow >huhu3");
$lines2 = file ('huhu3');
foreach ($lines2 as $line_num2 => $line2) {
$line2 = htmlspecialchars($line2);
$array2 = explode(":",$line2);
$name2 = $array2[0].":".$array2[1].":".$array2[2].":".$array2[3].":".$array2[4].":".$array2[5].":".$array2[6].":".$array2[7].":".$array2[8];
# echo $name2;
echo "\n";
#zeile löschen in datei
// Shared lock auf die Quelldatei
$oldfile = "shadow";
$zielzeile = $name2;
$old = fopen($oldfile, "r");
flock($old, 1) or die("Kann die Quelldatei $oldfile nicht locken.");
// Exclusive lock auf die Zieldatei
$new = fopen($oldfile.".new", "w");
flock($new, 2) or die("Kann die Zieldatei $newfile nicht locken.");
$lineno = 0;
while($line = fgets($old, 1024)) {
#if ($lineno++ == $zielzeile)
if (trim($line) == $name2)
# echo $zielzeile;
# echo $line;
continue; // Zeile auslassen
fputs($new, $line);
}
fclose($old); // Gibt das Lock automatisch auf
// Alte Datei wegwerfen.
unlink($oldfile);
// Neue Datei umbenennen.
// (In Windows müssen das rename() und das fclose($new)
// vertauscht werden, da es nicht möglich ist, in Windows
// eine offene Datei umzubenennen.
rename($oldfile.".new", $oldfile);
// Neue Datei schließen und dabei Lock aufgeben.
fclose($new);
}
#zeile wieder reinschreiben
$fp = @fopen("shadow", "r+") or die ("Kann Datei nicht lesen.");
while ($line = fgets($fp, 1024)) {
echo ($line);
}
fwrite($fp, "$array2[0]:$row[passwort]:$array2[2]:$array2[3]:$array2[4]:$array2[5]:$array2[6]:$array2[7]:$array2[8]\n");
fclose($fp);
das problem ist nun er schreibt mir das richtige rein in der datei aber den alten inhalt löscht er mir nicht.
kann mir mal bitte jemand helfen
ich möchte aus der datei shadow nach dem ersten : den string ersetzten, der string geht dann bis zum 2ten :
und so mache ich das
$test2 = system("grep $row[pop3postfach]: shadow >huhu3");
$lines2 = file ('huhu3');
foreach ($lines2 as $line_num2 => $line2) {
$line2 = htmlspecialchars($line2);
$array2 = explode(":",$line2);
$name2 = $array2[0].":".$array2[1].":".$array2[2].":".$array2[3].":".$array2[4].":".$array2[5].":".$array2[6].":".$array2[7].":".$array2[8];
# echo $name2;
echo "\n";
#zeile löschen in datei
// Shared lock auf die Quelldatei
$oldfile = "shadow";
$zielzeile = $name2;
$old = fopen($oldfile, "r");
flock($old, 1) or die("Kann die Quelldatei $oldfile nicht locken.");
// Exclusive lock auf die Zieldatei
$new = fopen($oldfile.".new", "w");
flock($new, 2) or die("Kann die Zieldatei $newfile nicht locken.");
$lineno = 0;
while($line = fgets($old, 1024)) {
#if ($lineno++ == $zielzeile)
if (trim($line) == $name2)
# echo $zielzeile;
# echo $line;
continue; // Zeile auslassen
fputs($new, $line);
}
fclose($old); // Gibt das Lock automatisch auf
// Alte Datei wegwerfen.
unlink($oldfile);
// Neue Datei umbenennen.
// (In Windows müssen das rename() und das fclose($new)
// vertauscht werden, da es nicht möglich ist, in Windows
// eine offene Datei umzubenennen.
rename($oldfile.".new", $oldfile);
// Neue Datei schließen und dabei Lock aufgeben.
fclose($new);
}
#zeile wieder reinschreiben
$fp = @fopen("shadow", "r+") or die ("Kann Datei nicht lesen.");
while ($line = fgets($fp, 1024)) {
echo ($line);
}
fwrite($fp, "$array2[0]:$row[passwort]:$array2[2]:$array2[3]:$array2[4]:$array2[5]:$array2[6]:$array2[7]:$array2[8]\n");
fclose($fp);
das problem ist nun er schreibt mir das richtige rein in der datei aber den alten inhalt löscht er mir nicht.
kann mir mal bitte jemand helfen