Problem mit rename : Permission denied

Hallo zusammen,

zur Übung habe ich mir ein Script geschrieben, welches eine Datei (test.txt) erstellt, diese Datei zeilenweise in ein Array liest und in einer for-Schleife ausgibt. Da laut Script die erste Zeile nur durch den Zeilenumbruch entsteht wird dies in der if-Anweisung abgefragt. Per array_shift wird diese erste Zeile entfernt.

Nun schreibe ich das übrige array zeilenweise in die buffer.txt Datei. Anschließend soll test.txt gelöscht werden und buffer.txt in test.txt umbenannt werden. Sicherheitshalber wird von test.txt noch eine Kopie angelegt. Abgesehen von rename() klappt der Rest. Aber ich kann nicht erkennen wo mein Fehler liegt. Im PHP-Manual ist auch nix beschrieben.

[php]
$zeit = date(„H:i:s“);
$datei_zeiger = fopen(„test.txt“,„a+ b“);
fwrite($datei_zeiger,„\n“.„bbb!!bbb!!bbb“.$zeit);
fclose($datei_zeiger);
$zeilen = file(„test.txt“);

for($idx=0; $idx<count($zeilen); $idx++){
echo $idx.„: „.$zeilen[$idx].“
“;
}

echo „*****************************
“;

if(ord($zeilen[0]) == 10){
array_shift($zeilen);
$datei_zeiger = fopen(„buffer.txt“,„w“);
for ($idx=0; $idx<count($zeilen); $idx++) {
$zeilen[$idx] = trim($zeilen[$idx]);
echo $idx.„: „.$zeilen[$idx].“
“;
fwrite($datei_zeiger,$zeilen[$idx]);
}

$c = copy(„test.txt“,„text_bkup.txt“);
var_dump($c);
$u = unlink(„test.txt“);
var_dump($u);
$r = rename(„buffer.txt“,„test.txt“);
var_dump($r);

fclose($datei_zeiger);
}
[/php]P.S. die Variable $zeit ist nur eine Spielerei und kann vernachlässigt werden.

Besten Dank für eure Hilfe

BG
elchivato {o.o}

kann es sein, dass du nicht die richtigen rechte hast ?

setz mal en ordner sowie die datei, die erstellt auf 777.

@freak131
das hatte ich auch schon gedacht. aber wenn ich keine schreibrechte hätte, zumal ich unter winxp als admin teste, dann dürfte copy doch auch keine neue Datei anlegen können. Geht aber … grübel

In einen anderen Projekt im gleichen Ordner habe ich auch unlink() und rename(). Dort gibt es keine Probleme.

funktioniert das löschen ?
was passiert wenn du einen anderen dateinahmen wählst ?

Problem gelöst

Hi,

unlink() hat immer funktioniert. Ich hab jetzt einige Stunden grübeln und testen hinter mir und kann sagen, dass es daran liegt, das fclose() nach rename() erst ausgeführt wurde. Wenn fclose() vor den Funktionen copy() ect. steht, funktioniert es bestens. Warum kann ich mir nicht genau erklären. Vielleicht ein Konflikt mit der Speicheradresse im Dateizeiger zum passenden Dateinamen. Die umbenannte test.txt steht ja an einer anderen Stelle im Speicher, $datei_zeiger zeigt aber noch auf die alte Adresse. Dort wurde aber test.txt gelöscht.

Hier der neue Code:

[php]
$zeit = date(„H:i:s“);
$datei_zeiger = fopen(„test.txt“,„a+ b“);
fwrite($datei_zeiger,„\n“.„bbb!!bbb!!bbb“.$zeit);
fclose($datei_zeiger);
$zeilen = file(„test.txt“);

for($idx=0; $idx<count($zeilen); $idx++){
echo $idx.„: „.$zeilen[$idx].“
“;
}

echo „*****************************
“;

if(ord($zeilen[0]) == 10){
array_shift($zeilen);
$datei_zeiger = fopen(„buffer.txt“,„w“);
for ($idx=0; $idx<count($zeilen); $idx++) {
$zeilen[$idx] = trim($zeilen[$idx]);
echo $idx.„: „.$zeilen[$idx].“
“;
fwrite($datei_zeiger,$zeilen[$idx]);
}
fclose($datei_zeiger);

$c = copy(„test.txt“,„text_bkup.txt“);
var_dump($c);
$u = unlink(„test.txt“);
var_dump($u);
$r = rename(„buffer.txt“,„test.txt“);
var_dump($r);
}
[/php]BG und Danke für die Hilfe
elchivato

weil der „dateistream“ noch offen ist :wink: