Hallo Du Einer,
<?PHP
$delid = $_GET['delid'];
$dir = opendir('../data');
$filename = '../data/kontakte.txt';
$filename2 = '../data/tempkontakte.txt';
$fp = fopen($filename, "r");
$fp2 = fopen($filename2, "a");
$contents = file($filename);
Warum deklarierst Du $filename, wenn Du es dann nicht benutzt?
file() ist so nicht geeignet für konkurrierende Operationen
Die Veränderung der Daten bedarf der exclusiven Sperre
von VOR dem Lesen bis NACH dem Schreiben!
$anzahl = count($contents);
$setid = 1;
## Warum for() und nicht foreach() ?
for ($a=0;$a<$anzahl;$a++)
{
list $id,$name,$vorname,$strasse,$plz,$ort,$telg,$telp,$mobg,$mobp,$mail1,$mail2,$nick,$burtzel) = explode("#", $contents[$a]);
if ($fp2) {
flock($fp2,2);
## Das Sperren ist hier schon zu spät.
## Die Quelldatei könnte zwischenzeitlich trotzdem nochmal
## gelesen werden
if ($id == $delid) {
$setid = $setid;
}
else {
fputs ($fp2, "$setid#$name#$vorname#$strasse#$plz#$ort#$telg#$telp#$mobg#$mobp#$mail1#$mail2#$nick#$burtzel ");
$setid = $setid+1;
}
flock($fp2,3);
}
else {
echo "Fehlaaaa!";
}
}
// close file
fclose($fp);
fclose($fp2);
unlink('../data/kontakte.txt');
if (rename("../data/tempkontakte.txt", "../data/kontakte.txt")) {
echo "ok";}closedir($dir);
?>
Es würde sich lohnen, sich mit fgetcsv() auseinanderzusetzen und außerdem die Datei auch als 'echte' CSV-Datei abzuspeichern.
Das erspart einem eine Menge Arbeit oder Kummer, wenn in den Feldern Sonderzeichen enthalten sind.
LG
Chris