Php läuft - aber fwrite schreibt nichts rein

Hallo liebe Experten!

Ich habe für die Homepage einer Freundin eine ganz simple Kommentar-Funktion in php geschrieben (ist nicht sonderlich elegant, aber es funktioniert - ich bin ja noch totaler Anfänger ^^).

  1. Formular in html (start.html), das die Variablen per GET an comments.php schickt.
  2. Dieses Script trägt die übernommenen Daten dann in die html-Datei direkt unterhalb des Formulars ein. (Zusätzlich wird es auch in eine Art Kommentar-Archiv kommentare.html eingetragen.)

Auf meinem eigenen Apache läuft es einwandfrei. Aber auf dem Server, auf dem die Homepage dann laufen soll, gibt es Probleme: Das Script läuft (die Variablen funktionieren, mit echo werden sie angezeigt). Aber es wird nichts mehr in die html-Dateien geschrieben!
Außerdem braucht der Server unheimlich lange, bevor das echo aus dem Script überhaupt angezeigt wird.

Bin ratlos. Würde mich freuen, wenn mir jemand weiterhelfen kann!

Danke im Voraus!

Yraja

html-Datei mit Formular (eines von mehreren):
http://www.total-gestoert.de/content/start.html

„Kommentar-Archiv“:
http://www.total-gestoert.de/content/kommentare.html

Quelltext des Scripts:
(http://www.total-gestoert.de/content/comments.php)

<?php //Auffangen der Variablen aus dem Formular
$name = $\_GET[name]; $message = $\_GET[message]; $marker = $\_GET[marker]; $zieldatei = $\_GET[zieldatei]; //Datei oeffnen $datei = fopen($zieldatei, "r+"); //Anzeige direkt nach dem Eintragen //[...] //Erstellen des Beitrags $heute = date("d.m.y"); $jetzt = date("H:i:s"); $insert = " **".$name."** schrieb am ".$heute." um ".$jetzt.": ".$message." \n\n"; //Laenge der gesamten Datei $dateilength = filesize($zieldatei); //Schleife zum Insert-Punkt finden while (!feof($datei)) { $buffer = fgets($datei); if (strncmp($buffer,$marker,15) == 0) { $rest = fread($datei,$dateilength); $restlaenge = strlen($rest); fseek($datei,-$restlaenge,SEEK\_END); fwrite($datei,$insert); fwrite($datei,$rest); } } fclose ($datei); //Eintragen ins Kommentar-Archiv $dateiarchiv = fopen("kommentare.html", "r+"); //Erstellen des Beitrags $heute = date("d.m.y"); $jetzt = date("H:i:s"); $insert = " **".$name."** schrieb am ".$heute." um ".$jetzt." auf ".$zieldatei.": ".$message." \n\n"; //Laenge der gesamten Datei $dateilength = filesize("kommentare.html"); //Schleife zum Insert-Punkt finden $punkt = ""; while (!feof($dateiarchiv)) { $buffer = fgets($dateiarchiv); if (strncmp($buffer,$punkt,20) == 0) { $rest = fread($dateiarchiv,$dateilength); $restlaenge = strlen($rest); fseek($dateiarchiv,-$restlaenge,SEEK\_END); fwrite($dateiarchiv,$insert); fwrite($dateiarchiv,$rest); } } fclose ($dateiarchiv); ?\>

Probleme: Das Script läuft (die Variablen funktionieren, mit
echo werden sie angezeigt). Aber es wird nichts mehr in die
html-Dateien geschrieben!
Außerdem braucht der Server unheimlich lange, bevor das echo
aus dem Script überhaupt angezeigt wird.

was sagen den die schreib rechte, unter welchen user läuft der server, mit welchem user wurde geuploaded.

was passiert, wenn das php selber die datei auch erstmal erzeugt, wenn das geht haste keine schreibrechte bei gruppe, denn der www user kann keine ftp user dateien überschreiben ohne gruppen rechte.

Hallo RakonDark!

Danke für die schnell Antwort!

Ich habe versucht, mit fopen("***.html", „a+“) eine neue Datei anzulegen und darein zu schreiben. Das tat mein Server zwar wieder (wie erwartet), aber der online-Server auch nicht. Er legt einfach keine neue Datei an. :-/

Da muss ich noch mehr blöde Fragen stellen:
Wie frage ich die Schreibrechte oder den Server-User ab?
Mit iis_get_server_rights()? Aber welche Argumente brauche ich da?
(Wie) Kann ich die Rechte ändern? *wirr*

Danke! :smile:

Yraja

Da muss ich noch mehr blöde Fragen stellen:
Wie frage ich die Schreibrechte oder den Server-User ab?
Mit iis_get_server_rights()? Aber welche Argumente brauche ich
da?

öhm , was ist das den ? linux windows ?

ich schau mir das mit meinem FTP an, da du irgentwie aber nix dazu sagst … wie soll ich das wissen.

(Wie) Kann ich die Rechte ändern? *wirr*

Danke! :smile:

Yraja

Da muss ich noch mehr blöde Fragen stellen:
Wie frage ich die Schreibrechte oder den Server-User ab?
Mit iis_get_server_rights()? Aber welche Argumente brauche ich
da?

öhm , was ist das den ? linux windows ?

ok, kannt ich noch nicht , aber ich würd wie gesagt einfach mal im FTP programm gugen , damit kann man auch rechte vergeben .

Btw die funktion ist wohl für ein IIS der ist dann von micrsoft ?

Hallo RakonDark!

Ja, über die IIS-Funktion finde ich aber nicht viel. Z.B.: http://de2.php.net/manual/de/function.iis-get-server…
Scheint nicht sehr verbreitet zu sein…

Ich habe im ftp-Programm an den Rechten rumgestellt und versuchsweise mal alles erlaubt, auch direkt an den einzelnen Dateien. Es ändert aber nix am Problem…

Der Server läuft auf Scientific Linux.
Hatte da mal ein Script mit einigen $_SERVER hochgeladen, um was abzufragen: http://total-gestoert.de/content/test.php
Sagt dir das was?

Hast du sonst noch einen Tipp, wenn es wirklich nicht an den Rechten liegen sollte?

Danke!

Yraja

frag dein provider ob es am safemode liegt oder an irgentwas anderem .
wichtig auch dem ordner die rechte geben, sonst kann er ja auch nix tun :smile: Wie gesagt , phpinfo() bring vielleicht mehr .

Hallo RakonDark!

Sorry, ich war einen Tag zwangsoffline… :wink:

Ich habe nochmal nachgesehen und testweise allen beteiligten Dateien und auch allen Ordnern (soweit ich auf sie zugreifen darf) alles erlaubt. - Keine Änderung. Hmpf.

Und ich habe phpinfo() entdeckt! :wink: *staun* Ich bin begeistert von den vielen kryptischen Wörtern… Demnach ist der Safemode nicht aktiv. Also sollte er auch keine php-Funktionen einschränken können, richtig?

[MOD] Thomas: Link entfernt (Hallo Yraja, ich bin mir nicht sicher, ob dieser Link, bzw. das Listing, unbedingt aller Welt mitgeteilt werden sollte. Schicke ihn doch einfach direkt an den dunklen Rakon.

Sieht dein geschultes Auge da etwas, woran es liegen könnte?
(Ich kapituliere vor soviel Input… oO)

Der Server gehört ja zum Rechenzentrum meiner Uni. Trotzdem ist es da irgendwie verdammt schwer, jemanden zu kriegen, der sich auskennt… Vielleicht liegt’s ja gerade an den Akademikern. :wink: Bei der Gelegenheit umso mehr: Vielen Dank für deine Hilfe!

Liebe Grüße!

also ich tippe villeicht auch noch auf fxxxx nicht erlaubt sein könnte, auch schalten einige seek ab etc.
Kannst du ins php log gugen ? , dort sollte ja stehen was bei den Zeilen passiert.

Hallo RakonDark!

Ich habe nochmal einiges durchprobiert… Du scheinst damit recht zu haben, dass der Server einfach einige Funktionen nicht erlaubt. Alle fxxxx() gehen nicht, dafür aber ein paar „einfache“ Sachen mit Variablen umbauen und ausgeben.
Verschiedene Fehlerausgaben setzt der Server auch nicht um. Da schweigt er einfach. Hmpf.

Okay, des Rätsels Lösung ist dann wohl ein anderer Server. :wink:
Vielen Dank für deine Mühe, Rakon! Auch wenn ich das Problem nicht gelöst habe, bin ich jetzt aber doch um einiges schlauer! (Was meinen kümmerlichen php-Kenntnissen auch gut tut. :wink:)

Viele Grüße!

Alternative Datenbank?
Hallo Yraja,

wenn ich das richtig verstanden habe versuchtest du bisher, die Kommentare an eine HTML-Datei anzuhängen.
Wäre es da nicht einfacher die Kommentare in einer Datenbank zu speichern und diese dann bei Seitenaufruf auszulesen?

Das würde dir vermutlich einige Probleme mit Dateien und (Zugriffs-)Rechten ersparen und das ganze vermutlich sogar übersichtlicher und strukturierter realisieren.

Normalerweise ist auf jedem Webserver der PHP beherrscht auch eine Datenbank (meist MySQL) installiert.

Ich weiß nicht, ob du dich bereits mit PHP/MySQL auskennst - falls nicht:
http://www.schattenbaum.net/php/mstart.php

Vielleicht wäre dies ja ein alternativer Ansatz.

hth
Thomas