24. september 2008 - 22:38
Der er
9 kommentarer og 1 løsning
Slet linje fra fil
Jeg har lavet en fil der gemmer fejlbeskeder fra min mysql database for at holde styr på hvad folk laver, og for evt. at opdage evt. forsøg på at omgå sikkerheden. Hver fejl bliver smidt i en linje i en .txt fil Jeg kunne godt tænke mig at finde ud af hvordan jeg sletter en linje fra denne fil. hvis jeg nu skulle få lyst til at slette en logbesked og så gemme resten. Det er vel noget med at søge efter linjeskift nr. X og så slette det derefter til og med linjeskift X+1 eller er der en lettere måde?
Annonceindlæg fra SuperOffice
24. september 2008 - 23:14
#1
24. september 2008 - 23:15
#2
(indlæs = indlæs som array)
25. september 2008 - 08:10
#3
Du kunne jo også evt. overveje at gemme i DB nu du har gang i den alligevel :O) ALtså lave en "fejltabel"
25. september 2008 - 21:31
#4
Overvejede også at lave en tabel i DBen når der kom forbindelse igen. Aah ja, selvfølgelig. unset! så hvad? Jeg loader hele filen og så unset'ter de variabler som jeg ikke skal bruge mere og så gemmer filen igen? Er det sådan?
25. september 2008 - 21:52
#5
Yeps, i f.eks. $var = file( "fil.txt" ); // Læs fil til array unset( $var[15] ); // Slet linje 16 $txt = implode( "\n", $var ); // Saml alle linjer i én tekst file_put_contents( "fil.txt" ); // Skriv fil
25. september 2008 - 23:00
#6
Problem! mine fejllogs ligger nu således i logs_Databasefejl.txt $fejl[] '"query" => "noget", "tidspunkt" => "blah", "ID_BRUGER" => "hest"'; $fejl[] '"query" => "noget andet", "tidspunkt" => "blih", "ID_BRUGER" => "ged"'; $fejl[] '"query" => "noget helt tredje", "tidspunkt" => "bluh", "ID_BRUGER" => "ko"'; Når jeg henter det via file() så tæller den alle linjerne i filen som en del af logsene så f.eks. tomme linjer også kommer med i min visning af beskederne. og når jeg endelig kalder f.eks. $indhold = file('logs_Databasefejl.txt'); echo $indhold[0] så skriver den hele den linje ud. som éen lang string. Jeg kan ikke kalde "query" eller "tidspunkt" eller noget så først: Hvordan får jeg den til kun at vælge fejlbeskederne? er det bare ved at filen KUN indeholder fejlmeddelelserne og ikke andet? og: Hvordan laver jeg så det valgte om til noget brugbart jeg kan kalde? er det via settype($variabel, "object")?
26. september 2008 - 00:23
#7
Det lyder som om at det ville være MEGET smartere at bruge databasen ;)
28. september 2008 - 00:31
#8
Enig! :-P men synes nu det ville være lidt god øvelse i flatfile men fik det til alligevelled. gik væk fra at gemme dataerne som $fejl[] ting og skrev hellere det hele og delte det op med seperatorer. min kode til at hente og slette data ser således ud: // Slet de(n) valgte logs. if(isset($_POST[sletValgteOK])){ // Skal vi slette alle, jamen så slet hele filen. if($_POST[sletAlle]) unlink('logs_Databasefejl.txt'); // Ellers så slet de enkelte linjer. else{ // Hent hele loggen. $fil = file('logs_Databasefejl.txt'); // Slet de markerede. for($i = 0; count($_POST[slet]) > $i; $i++) unset($fil[$_POST[slet][$i]]); // Gem resterne. file_put_contents('logs_Databasefejl.txt', $fil); } } if(!file_exists('logs_Databasefejl.txt')) echo '<h3>Ingen databasefejl indtil videre.</h3>'; else{ $indhold = file('logs_Databasefejl.txt'); for($i = 0; count($indhold) > $i; $i++){ $fejl[$i] = explode('||', $indhold[$i]); og så hentes hver del frem vha. $fejl[$i][0...1...2 osv.] Smid lige et svar som tak for hjælpen :-)
28. september 2008 - 00:33
#9
hov... lille kommentar beskederne i loggen ligger således: query her||tidspunkt her|| brugerid her||osv. query2 her||et andet tidspunkt|| et andet bruger id||osv.
28. september 2008 - 12:29
#10
:)
Vi tilbyder markedets bedste kurser inden for webudvikling