Tom: Problem mit fwrite();

Beitrag lesen

Hello,

Wolltest Du nun eine Handle-basierte Funktion benutzen oder eine namensbasierte?
Wenn Du fwrite() benutzen wolltest, solltest Du auch ein Handle übergeben und keinen Namen!

Wo is der unterschied? Arbeite noch net lange mit PHP und hab mir mein script mehr oder weniger ausm Netz zusammen kopiert.

Ein Handle ist ein Index in eine Ressource-Tabelle. Das ist so eine frühe Art von Objektorientierung ;-) In der Ressource-Tabelle stehen alle momentanen Eigenschaften zu dem Objekt vermerkt, also wo gerade der Satzzeiger steht, wie groß die Satzgröße ist, wie die Daten übersetzt werden sollen, wem das Handle gehört, usw.

Alle Filesystemfunktionen arbeiten nun mit dieser Ressourcetabelle und müssen sich deshalb von dort erst ein gültiges Handle anfordern:

$fh = fopen($dateiname, $zugriffsart);

wobei jetzt $fh das Handle ist, $dateiname der qualifizierte Pfad zur Datei im Filessystem und $zugriffsart bestimmt, in welchem Modus Du die Datei öffnen willst. Je nach Betriebssystem und Mechanismus kann man das gleich inclusive Lockingstatus oder (hier bei PHP) nur ohne diese Information tun:

http://de3.php.net/manual/en/function.fopen.php  siehe "modes for fopen()"

die Funktionen fread() und fwrite() (und andere) können dann mit dem Handle arbeiten, solange es gültig ist. Du hast aber Deinem fwrite() einen Namen übergeben. Damit kann es nichts anfangen, deshalb die Fehlermeldung.

FALSCH:  fopen($new_file_dir.$site, "w+b");   ## hier wirfst Du das begehrte Handle ins Nirwana
             fwrite($new_file_dir.$site, ...

RICHTIG: $handle = fopen($new_file_dir.$site, "w+b");
             fwrite($handle, ...

Du solltest Dir Gedanken über Locking machen. Da gibt es einen guten Artikel von Christian Seiler.

http://aktuell.de.selfhtml.org/artikel/programmiertechnik/dateisperren/

Locking is doch nur fuer den IE wenn ich das jetzt richtig im Inet gelesen hab. Ich nutze Firefox und das script wird nur lokal ausgefuerht.

PHP läuft im Backend, der Browser im Frontend. Das von mir gemeinte Locking hat nichts mit dem Frontend zu tun, sondern nur mit dem Backend und dort mit dem Filesystem.

Lies dir mal in Ruhe den Artikel durch und dann melde Dich wieder.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de