• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit rename : Permission denied

Status
Für weitere Antworten geschlossen.

elchivato

Neues Mitglied
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]."<br>";
}

echo "*****************************<br>";

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]."<br>";
       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);
}
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.
 
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]."<br>";
}

echo "*****************************<br>";

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]."<br>";
       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);
}
BG und Danke für die Hilfe
elchivato
 
Status
Für weitere Antworten geschlossen.

Neueste Beiträge

Zurück
Oben