[PHP] Fehlermeldung erscheint ohne grund

Patrickus

PHP-Freak
ID: 116260
L
20 Mai 2006
96
2
hallo zusammen. also ich bin grad eben auf etwas interessantes gestoßen:

ich habe auf einem server eine datei erstellt (zum testen halt erst mal in nen test-ordner und nicht gleich ins root). im testordner lief alles gut. nun wollt ich das kopieren und es spuckt mir diese fehlermeldungen aus:


Code:
Warning: flock(): supplied argument is not a valid stream resource in <file> on line 15

Warning: fwrite(): supplied argument is not a valid stream resource in  <file>on line 16

Warning: flock(): supplied argument is not a valid stream resource in  <file> on line 17

Warning: fclose(): supplied argument is not a valid stream resource in  <file> on line 18


nur warum? was haben dies fehlermeldungen zu bedeuten?
die hier drin vorgekommen zeilen sehen im skript wie folgt aus:

PHP:
function schreiben($datei,$mode) { 
   global $REMOTE_ADDR; 
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,$REMOTE_ADDR."|".time()."\n"); 
   flock($fp,3); 
   fclose($fp); 
}

was dieser code zu beudeten hat, wisst ihr hoffentlich selbst ;)
aber kann mir einer sagen, wo der fehler liegt?


danke schon mal im vorraus,

gruß, Patrickus
 
Mach mal das @ vor fopen() raus, dann sollte noch eine weitere, interessantere Fehlermeldung kommen.
 
Zuletzt bearbeitet:
PHP:
function schreiben($datei,$mode) { 
   global $REMOTE_ADDR; 
   $fp = @fopen($datei,$mode); 
   flock($fp,2); 
   fwrite($fp,$REMOTE_ADDR."|".time()."\n"); 
   flock($fp,3); 
   fclose($fp); 
}
was dieser code zu beudeten hat, wisst ihr hoffentlich selbst ;)
aber kann mir einer sagen, wo der fehler liegt?
Der Fehler kommt von unsauberer Programmierung - so sollts besser sein:
PHP:
function schreiben($datei,$mode) { 
   global $REMOTE_ADDR; 
   $fp = @fopen($datei,$mode) || return FALSE; 
   flock($fp,2) || return FALSE; 
   fwrite($fp,$REMOTE_ADDR."|".time()."\n") || return FALSE; 
   flock($fp,3) || return FALSE; 
   fclose($fp) || return FALSE; 
   return TRUE;
}
Das sollte die Möglichkeit einer nichtexistenten Datei berücksichtigen.
 
der Fehler tritt immer auf, wenn er die Datei nicht laden kann, ergo hast du einen falschen Pfad zur Datei ;) Sollte der Pfad aber defenitiv stimmen probier mal "./file.txt"
 
@tleilax: das hat mich nicht wirklcih weitergebracht..

@DocTrax: nun werden zwar die fehlermeldungen unterdrückt, aber deshalb läuft das skript doch weiterhin nicht, oder?

trozdem kommt wieder die fehlermeldung:

Code:
Parse error: syntax error, unexpected T_RETURN in /home/xl-lose_de/www/spiel.php on line 16

trozdem danke mal für skript aber leider funkts torzdem noch nicht..

@ice-breaker: die datei ist 100% am richtigen platz. das stimmt alles. doch der ratschlag hat auch nix gebracht.


bin immer noch am Anfang, trozdem danke an euch drei.
 
@tleilax: das hat mich nicht wirklcih weitergebracht..
Inwiefern hat's Dich denn nicht weitergebracht? Eigentlich müsste eine neue Fehlermeldung aufgetaucht sein, die auf das Problem schliessen lässt. Die 4 im ersten Post angezeigten Fehler sind ja nur Folgefehler des missglückten fopen(). Und da kann die Fehlerquelle von File not found bis Permission denied reichen.

Ausserdem würde ich Dir raten, nicht auf $REMOTE_ADDR zuzugreifen, sondern auf die Superglobale in $_SERVER['REMOTE_ADDR'], dann kannst Du Dir auch das global sparen.
 
@DocTrax: nun werden zwar die fehlermeldungen unterdrückt, aber deshalb läuft das skript doch weiterhin nicht, oder?

trozdem kommt wieder die fehlermeldung:

Code:
Parse error: syntax error, unexpected T_RETURN in /home/xl-lose_de/www/spiel.php on line 16
Das "or" funktioniert glaube nur mit die(), aber Du weisst doch sicher wie es gemeint ist. Musst Dir halt ordenliche if-Klauseln schreiben.

Es könnte noch sein, dass PHP keine Schreibrechte bei der Datei hat, also entweder chown zum Serverbenutzer oder chmod 0777.
 
Zuletzt bearbeitet:
Inwiefern hat's Dich denn nicht weitergebracht? Eigentlich müsste eine neue Fehlermeldung aufgetaucht sein, die auf das Problem schliessen lässt. Die 4 im ersten Post angezeigten Fehler sind ja nur Folgefehler des missglückten fopen(). Und da kann die Fehlerquelle von File not found bis Permission denied reichen.
*nicken*
 
das hat mich in sofern nicht weiter gebracht, dass ich das ganze auf einem privatem server hatte. die verlinkte funktion war nen deadlink.

aber ich habe das nun via mysql laufen lassen.

gruß, Patrickus