vorab eine kurze Antwort - Ein Zeilenumbruch in einer
Textdatei wird meistens mit \n erreicht. es gibt dann noch \r
und noch ne Kombination ich glaub \r\n war das… wenn ich
mich recht erinnere braucht unix das für nen richtigen
Umbruch, aber da bin ich mir seeehr unsicher…
\n reicht
Generell ist es aber pfui ein GB in einer Textdatei abzulegen.
Pfui ist es ein kleines GB in einer Datenbank zu speichern, es gibt eine gewisse Anzahl von Datensätzen bis zu der eine Textdatei besser geeignet ist als eine Datenbank - zumal das verarbeiten mit fgetcsv viel simpler ist als SQL zu verwenden. Die genau anzahl muss man durch testen rausfinden.
Man denke nur daran, wenn bei jedem Aufruf eine 50 MB Datei
geöffnet und komplett ausgelesen werden müsste um vllt 50
Beiträge auf einer Seite anzuzeigen. Gut, da lässt sich
streiten, ob es besser wäre 50 kleine Dateien zu öffnen, in
denen nur ein Beitrag steht…
Am besten wäre aber sicher eine Datenbank…
Ich lese immer nur die 10 Einträge die ich gerade brauche aus der Text Datei - mach ich was falsch? Ab 10 Einträge pro Tag würde ich auch eine Datenbank nehmen.
Alternativ könntest Du für jeden Monat/jede Woche etc eine
neue Datei anlegen und die im bedarfsfall auslesen, aber der
Programmieraufwand wäre ungleich höher…
Falls Du noch garnicht weisst wie man überhaupt in eine
Textdatei schreibt bietet php.net unter den Stichwörtern
fopen
fwrite
fclose
ein paar Beispiele…
Geheimtipp
fgetcsv
Meine Lösung, nicht schön aber funktioniert:
include ("inc/template.inc"); // phplib-template einbinden
$i0 = $\_GET['l'];
if(!$i0){
$i0 = 1;
}
$func = $\_GET['f'];
$v = $\_GET['v'];
$p = $\_GET['p'];
$m = $\_GET['m'];
$name = $\_GET['name'];
$name = htmlentities($name, ENT\_QUOTES);
$email = $\_GET['email'];
$hp = $\_GET['hp'];
if(!$hp){
$hp = "http://";
}
$eintrag = $\_GET['eintrag'];
$eintrag = htmlentities($eintrag, ENT\_QUOTES);
$sz = $\_GET['sz'];
switch ($func)
{
case 1:
gb($i0, $v, $p, $m, $name, $email, $hp, $eintrag);
break;
default: //zum Navigationsframe
detail($i0, $v, $p, $m, $sz, $name, $email, $hp, $eintrag, $fehler);
break;
}
function gb($i0, $v, $p, $m, $name, $email, $hp, $eintrag)
{
$dateiname = "csv/gb.csv";
if(!$name){
$fehler = "
Bitte tragen Sie Ihren Namen ein!";
detail($i0, $v, $p, 8, 0, $name, $email, $hp, $eintrag, $fehler);
break;
}
if(!$eintrag){
$fehler = "
Das Feld \"Eintrag\" ist leer";
detail($i0, $v, $p, 8, 0, $name, $email, $hp, $eintrag, $fehler);
break;
}
if(file\_exists($dateiname))
{
$datei = fopen($dateiname, "r");
$hptest = strlen($hp);
if($hptest ",$dummy[$i]);
$i++;
while($zeile = fgetcsv($datei,5000,"|")){
/\* die Datei auslesen und im Array zeile zwischenspeichern und in dummy implodieren - mit | Trennern für csv \*/
$zeile[0]++;
$dummy[$i] = implode("|", $zeile);
$i++;
}
fclose($datei);
}
}
else{
echo "keine Datei";
}
$text = implode("\n", $dummy); /\* dummy implodieren und als trenner ein \n(zeilenumbruch) benutzen 1|2 \n 2|3 \*/
$text = ereg\_replace("{","", $text);
$text = ereg\_replace("}","", $text);
$text = ereg\_replace("
","
", $text);
$text = ereg\_replace("","", $text); /\* Leerzeichen weil sonst w-w-w die Tags ausführt \*/
$text = ereg\_replace(" u\>","", $text);
$text = ereg\_replace("","", $text);
$text = ereg\_replace(" b\>","", $text);
$text = ereg\_replace("","", $text);
$text = ereg\_replace(" i\>","", $text);
$datei2 = fopen($dateiname, "w");
if($datei2)
{
fputs($datei2, $text);
fclose($datei2); /\* den Plunder in die Datei schreiben, der alte Inhalt wird dabei übeschrieben \*/
}
//mail("[email protected]", "Gaestebucheintrag", "Heute wurde von $name folgendes in das Gaestebuch eingtragen: \n $eintrag \n") or die ("kann Mail nicht verschicken");
detail($i0, $v, $p, 8, 0, "", "", "http://", "", "");
}
Dann kommt noch die Funktion detail aber die ist hier nicht wichtig.
Kritik, Fehler gefunden? Her damit.
Gruss Jan