PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : useradd



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

robiotor
28-06-2004, 18:42
problemm gelöst

habe das hier if (trim($line) == $name2) gegen das hier ausgetauscht


$array3 = explode(":", $line);
if ($array3[0] == $row[pop3postfach])
continue; // Zeile auslassen