zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP: Problem mit fwrite() und/oder readfile()

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 22.04.2008, 18:34
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard PHP: Problem mit fwrite() und/oder readfile()

Folgendes Problem:

Ich hab' mir 'ne Funktion "writeLog($text)" geschrieben, die den uebergebenen Text in eine Textdatei (eine fuer jeden Tag, z.B. "2008-04-22.txt") schreibt.

In meiner Seite hab' ich dann an geeigneten Stellen writeLog() verwendet, um Eintraege zu erstellen.

Weiterhin hab' ich ein kleines Skript erstellt, welches mir alle vorhandenen Logdateien auflistet und die gewuenschte in einem Textfeld (<textarea>) anzeigt.

Erst dachte ich, dass alles wunderbar ist, doch auf einmal erhalte ich beim Betrachten der juengsten Logdatei (ueber das Skript) eine eigenartige Ausgabe bei einigen Eintraegen. Das verwirrende daran: Die Eintraege waren teilweise erst _korrekt_ eingetragen und sind dann bei einem neuen Eintrag "nachtraeglich" kaputt gegangen. Ebenso ist es andersrum passiert, dass ich zwei "kaputte" Eintraege hintereinander drin hatte, nachdem noch einer hinzukam war einer davon ploetzlich wieder in Ordnung.

Hier die writeLog():
PHP-Code:
function writeLog($text) {
  
$datetime date("d.m.y | H:i:s",time());
  
$logfilepath "logs/";
  
$logfilename date("Y-m-d",time()).".txt";

  
$text "[".$datetime."] ".$text."\n";
  
$dateizeiger fopen($logfilepath.$logfilename,"a");
  if (
fwrite($dateizeiger$text)) { return true; }
  else { return 
false; }

Hier einer von diversen Aufrufen:
PHP-Code:
writeLog("[LOGGED IN] USER: <".addslashes($login_user).">, IP: <".$_SERVER['REMOTE_ADDR'].">"); 
Hier der relevante Teil des ausgebenden Skripts:
PHP-Code:
echo "<textarea cols=\"85\" rows=\"30\">";
htmlentities(readfile($file));
echo 
"</textarea>\n"
Hier einmal das, was mir die aktuelle Logdatei beim Betrachten ueber das Skript anzeigt:
Code:
[22.04.08 | 10:31:12] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 12:07:49] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
�����������������������������������������������������������������������������������[22.04.08 | 13:04:42] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 13:31:15] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 13:32:11] [LOGGED OUT] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 13:32:24] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 13:38:23] [LOGGED IN] USER: <domsson@test.com>, IP: <84.190.222.153>
[22.04.08 | 13:38:25] [LOGGED OUT] USER: <domsson@test.com>, IP: <84.190.222.153>
�����������������������������������������������������������������������������������[22.04.08 | 14:52:36] [LOGGED OUT] USER: <domsson@test.com>, IP: <84.190.222.153>
Welche Eintraege mir komisch vorkommen, sollte klar sein.

Interessant, aber noch verwirrender: Lade ich mir die Log runter und betrachte Sie im Codeeditor (Weaverslave), dann steht dort nur das hier drin:
Code:
[22.04.08 | 10:31:12] [LOGGED IN] USER: <otacon7000@aol.com>, IP: <84.190.222.153>
[22.04.08 | 12:07:49] [LOGGED IN] USER: <otacon7000@aol.com>, IP: <84.190.222.153>
Also alles, bis zum defekten Eintrag. Dass dort eigentlich mehr Inhalt ist, erkennt man aber auch deutlich an der Dateigroesse, die mit jedem Eintrag brav waechst.

Im Windows Notepad wird alles angezeigt, aber anstelle der ? stehen einfach Leerzeichen.

Mir scheint, hier koennte irgendeine Art von Kodierungsproblem vorliegen. Die gestrige (und erste) Log war voellig frei von solch kaputten Eintraegen, weshalb ich mich frage, ob es evtl. an "addslashes" bzw. "htmlspecialchars" liegen koennte, welche ich erst spaeter hinzugefuegt habe.

Btw: das gleiche Problem hatte ich schon einmal in einem aehnlichen Skript, welches allerdings nicht mehr existiert. Damals dachte ich aber, jemand haette mir das Skript zerkloppt, indem er eine ungute Eingabe getaetigt haette.

So.. jemand eine Idee? :)
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.

Geändert von domsson (22.04.2008 um 18:39 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 22.04.2008, 18:47
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 23.07.2007
Beiträge: 286
Chrunchy wird schon bald berühmt werden
Standard

Ähh, nur mal für den Anfang, warum übergibst du $text an die Funktion, wenn du die Variable ohne jede Nutzung direkt wieder überschreibst?
__________________
Gruß Chrunchy

"Eine Theorie ist eine Vermutung mit Hochschulbildung" (James Earl Carter)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 22.04.2008, 18:53
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard

Zitat:
Zitat von Chrunchy Beitrag anzeigen
Ähh, nur mal für den Anfang, warum übergibst du $text an die Funktion, wenn du die Variable ohne jede Nutzung direkt wieder überschreibst?
Jetzt verwirrst Du mich :\

Wieso ueberschreibe ich sie ohne Nutzung? Ich "erweitere" sie doch sozusagen, indem ich die Variable mit ihrem eigenen Inhalt, um ein paar Strings ergaenzt, ueberschreibe. Oder.. sehe ich da jetzt was grundlegend falsch? *schluck*

Code:
$text = "[".$datetime."] ".$text."\n";
.. sollte, angenommen $text = "blah", aus dem Inhalt von $text "[22.04.2008 | 17:54] blah\n" machen.
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
  #4 (permalink)  
Alt 22.04.2008, 19:14
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 23.07.2007
Beiträge: 286
Chrunchy wird schon bald berühmt werden
Standard

Ok, da hast du natürlich recht.
Habe mir angewöhnt modifizierte Strings in einer neuen Variable zu speichern... *flöt*
__________________
Gruß Chrunchy

"Eine Theorie ist eine Vermutung mit Hochschulbildung" (James Earl Carter)
Mit Zitat antworten
  #5 (permalink)  
Alt 22.04.2008, 19:19
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.808
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

also bei mir funzt es wunderbar!!
Sieht dann so aus:
PHP-Code:
<?php
function writeLog($text) {
  
$datetime date("d.m.y | H:i:s",time());
  
$logfilepath "";
  
$logfilename date("Y-m-d",time()).".txt";

  
$text "[".$datetime."] ".$text."\n";
  
$dateizeiger fopen($logfilepath.$logfilename,"a");
  if (
fwrite($dateizeiger$text)) { return true; }
  else { return 
false; }
}  

 
writeLog("[LOGGED IN] USER: <".addslashes($login_user).">, IP: <".$_SERVER['REMOTE_ADDR'].">");  
$file date("Y-m-d",time()).".txt";
echo 
"<textarea cols=\"85\" rows=\"30\">";
htmlentities(readfile($file));
echo 
"</textarea>\n";  

?>
Code:
[22.04.08 | 18:17:24] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:17:26] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:17:26] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:17:27] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:17:27] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:11] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:12] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:13] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:13] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:14] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:14] [LOGGED IN] USER: <>, IP: <127.0.0.1>
[22.04.08 | 18:18:14] [LOGGED IN] USER: <>, IP: <127.0.0.1>
Ich denke es hat was mit der Kodierung zutun, als was wird das denn ausgeliefert?
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
  #6 (permalink)  
Alt 22.04.2008, 19:24
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Du solltest den Dateizugriff sperren und die Datei auch korrekt schließen.
PHP-Code:
function writeLog($text)
{
    
$retVal false;
    
$datetime date("d.m.y | H:i:s",time());
    
$logfilepath "logs/";
    
$logfilename date("Y-m-d",time()).".txt";
    
$text "[".$datetime."] ".$text."\n";
    if( 
$dateizeiger fopen($logfilepath.$logfilename,"a") ) {
        
flock($dateizeiger,LOCK_EX);
        
$retVal = (bool) fwrite($dateizeiger$text);
        
flock($dateizeiger,LOCK_UN);
        
fclose($dateizeiger);
    }
    return 
$retVal;

__________________
Markus Wulftange
Mit Zitat antworten
  #7 (permalink)  
Alt 22.04.2008, 20:26
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard

@ kampfgnom:
Ja, es scheint bei mir ja auch nur ab und zu diesem Fehler zu kommen. Wie gesagt, die gestrige Log ist Fehlerfrei, bei der aktuellen sind es bislang nur zwei Zeilen, die derart entstellt sind. Und da die Eintragung immer wieder auf die gleiche Art und Weise vor sich geht, frage ich mich, wie das sein kann, dass es manchmal klappt und manchmal nicht. Es entbehrt fuer mich - mal wieder - jeglicher Logik.

@Gumbo:
Hab eben schnell mal flock auf php.net nachgeschlagen, mich dementsprechend noch nicht naeher damit beschaeftigt und muss deshalb mal ganz doof fragen: Kann das denn etwas mit meinem Problem zu tun haben? Wenn ja, wuerde ich mir das jetzt naemlich mal genauer ansehen, ansonsten (wenn es sich nur um eine "Polierung" des Skripts handelt) wuerde ich mir jetzt nicht noch mehr moegliche Fehlerquellen einbauen wollen, da es jetzt schon Probleme gibt
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
  #8 (permalink)  
Alt 22.04.2008, 20:30
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Zitat:
[22.04.08 | 18:17:24] [LOGGED IN] USER: <>, IP: <127.0.0.1>
da hatt mich einer gehäckt

In C gibt es noch andere Tücken bei fwrite (ich gehe mal davon aus, daß die
Funktion mal wieder 1:1 kopiert ist): fwrite() arbeitet als stream, also wird zB
die Zeilenterminierung systemspezifisch behandelt (*x: LF, DOS: CRLF). Beim
Schreiben von Binärdaten gibt das recht interessante Effekte.

Nach so etwas habe ich gestern einen halben Tag gesucht
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #9 (permalink)  
Alt 22.04.2008, 20:34
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von domsson Beitrag anzeigen
Kann das denn etwas mit meinem Problem zu tun haben? Wenn ja, wuerde ich mir das jetzt naemlich mal genauer ansehen, ansonsten (wenn es sich nur um eine "Polierung" des Skripts handelt) wuerde ich mir jetzt nicht noch mehr moegliche Fehlerquellen einbauen wollen, da es jetzt schon Probleme gibt
Dadurch wird eher eine Fehlerquelle ausgeschlossen, nämlich dass die Datei mehrfach gleichzeitig verwendet wird.
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 22.04.2008, 20:56
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard

@Gumbo / inta:
Okay, dann muss ich jetzt parallel noch bezueglich flock() etwas nachfragen, weil sich mir das nicht so ganz erschliesst, wenn ich ehrlich bin.
Also: Wie ich das auffasse, benutzt man flock() dazu, die Datei, die durch fopen bearbeitet wird, ersteinmal zu verriegeln und dann - im Falle von LOCK_EX - eine Schreibberechtigung fuer die aufrufende Instanz des Skriptes zu erteilen und, nachdem geschrieben wurde, mit LOCK_UN die Verriegelung wieder aufzuheben, damit anschliessend auch wieder andere Instanzen Zugriff auf die Datei erhalten.
Habe ich das richtig erfasst? Und wenn ja: was passiert dann, wenn zwei Instanzen des Skripts gleichzeitig auf die Datei zugreifen wollen, z.B. weil sich zwei User nahezu gleichzeitg einloggen? Sitzt das eine Skript dann in "Warteschleife" oder gibt's dann ein Problem?

Ich werd' das mal, wenn ich zuhause angekommen bin, einbauen. Aber vermutlich wird das nicht die Ursache fuer das Problem sein, da ich der einzige sein sollte (und laut Log auch bin), der writeLog() ueberhaupt ausloest.
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem: IE versteckt Text & Feedback Herbi CSS 2 11.08.2006 15:39
problem mit auslesen der radiobuttons per php nevermind Serveradministration und serverseitige Scripte 16 17.06.2006 18:36
Validierungs Problem mit PHP Code débutant (X)HTML 3 01.06.2006 16:08
Problem mit Sessions unter PHP 4.4.0 betrazivis Serveradministration und serverseitige Scripte 7 14.10.2005 12:53
CSS & PHP - daraus entstand Problem im FF tunc (X)HTML 9 14.02.2005 17:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:52 Uhr.