Moin!
Ich habe die Anweisungen zum Öffnen bzw. Schliessen von Dateien in eigene Funktionen ausgelagert:
Warum das denn? Ok, es bringt dir einen absolut _WINZIGEN_ Vorteil: Statt fopen() und flock() nacheinander aufzurufen, muß du jetzt nur noch dauei_oeffnen_r() aufrufen, aber tatsächlich gesehen verkomplizierst du die Dinge damit eigentlich nur unnötig.
Abgesehen davon hast du massive Fehler in deine Auslagerung eingebaut:
function datei_oeffnen_r()
{
if(file_exists($datei_name))
{
$datei_zeiger = fopen($datei_name, "r") or die ("Datei $datei_name kann nicht geöffnet werden.");
flock($datei_zeiger, LOCK_EX);
return ($datei_zeiger);
}
else? Was passiert dann? Kein definierter Rückgabewert!
}
function datei_schliessen($datei_zeiger)
{
flock($zeiger,LOCK_UN);
$zeiger ist nicht definiert.
fclose ($datei_zeiger);
Keine Fehlerabfrage.
}
function statistik_anzeigen($datei_name)
{
[ ... ]
datei_oeffnen_r($datei_name);
Rückgabewert (der Dateizeiger) wird nicht gespeichert.
$datei_zeiger = func_get_arg(1);
Damit kriegst du das zweite der Funktion statistik_anzeigen() übergebene Argument - das ist mit Sicherheit nicht der Dateizeiger.
$anzahl_eintraege = count(file($datei_name)) - 1;
Hier liest du die komplette Datei in ein temporäres Array, zählst dann deren Einträge und wirfst das Array dann wieder weg. Sehr uneffektiv!
$datei_schliessen($datei_zeiger);
Und hier schließt du die Datei dann wieder (mit einem falschen Dateizeiger wird das allerdings nichts), ohne irgendwas aus ihr gelesen zu haben. Warum das? file() funktioniert auch ohne Dateiöffnen/-schließen.
[ ... ]
}Nun erhalte ich aber folgende Warnung:
Von mir erhälst du auch eine Warnung: Junge, so wird das nichts! :)
Mein Tipp: file() ist eine tolle Funktion. Man übergibt ihr einen Dateinamen und erhält als Ergebnis ein Array mit allen Zeilen der Datei darin. Das könnte für dein Vorhaben bestens geeignet sein: Gästebuch komplett in das Array einlesen, und fertig. Alle weiteren Dinge werden dann nicht mit der Datei, sondern mit dem Array geregelt. Am Skriptende bei Veränderungen wieder speichern. Und ansonsten: Mach dein Skript nicht unnötig komplizierter, als es sein muß. Dinge in Funktionen auszulagern mag toll sein, aber man kann es auch übertreiben!
- Sven Rautenberg