/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Skriv i slutning af fil uden at gentage
Fra : Ace


Dato : 29-05-08 10:06

Hejsa

Jeg sidder og prøver på at lave en herre simpel og rimelig
armatør-agtig chat-funktion, bare for at øve mig lidt i php (er
total newb til det).
Anyways, jeg kunne godt tænke mig at teksten i chatten kommer til
at stå som den gør det i f.eks. Messenger, altså at den nye
beskede der skrives, fremkommer under den sidst skrevne.

Har Googlet lidt på det og tror vidst at det er fopen der styrer
hvordan der skrives til en fil, ikk'?
Fandt det her på
http://www.phpartikler.dk/artikler/filsystem.php:
r = Åben kun for læsning, start i begyndelsen af filen.
r+ = Åben for både læsning og skrivning, start i begyndelsen af
filen.
w = Åben kun for skrivning, start i begyndelsen af filen, slet
alt indhold i filen først og opret filen hvis den ikke eksisterer
w+ = Åben for læsning og skrivning, start i begyndelsen af filen,
slet alt andet indhold i filen og opret filen hvis den ikke
eksisterer
a = Åben kun for skrivning, start i slutningen af filen og opret
filen hvis den ikke eksisterer
a+ = Åben for læsning og skrivning, start i slutningen af filen
og opret filen hvis den ikke eksisterer

Umiddelbart lader det jo til at jeg bare skal gøre brug af "a",
men selvom denne metode ganske vidst skriver den nye besked under
dén før, gentager den også beskeden før under den nye :'(

Kan nogen hjælpe mig med at opnå den ønskede effekt?.. helst med
et script-eksempel, for fatter stadig ikk' særlig meget af php.

Venligst
Ace


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Bertel Lund Hansen (29-05-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-05-08 10:15

Ace skrev:

> Umiddelbart lader det jo til at jeg bare skal gøre brug af "a",

Ja.

> men selvom denne metode ganske vidst skriver den nye besked under
> dén før, gentager den også beskeden før under den nye :'(

Nej. Det er ikke a-indstillingen der gør det. Det er dig.

Hvis du opsamler alt det chattede og tilføjer hver gang, så får
du gentaget det gamle.

Hvis du kun tilføjer det nye, er der ingen gentagelse. Eksempler:

$komplet_chatliste='plidderpladderplidderpladder";
$chatfil='chatfil.txt';

**FEJL**
if ($new_chat) {
   $added_chat='blablablablablablablabla';
   $komplet_chatliste.=$added_chat;
   $handle=fopen($chatfil,'a');
   fwrite($handle,$komplet_chatliste);
   fclose($handle);
}

** RIGTIGT **
if ($new_chat) {
   $added_chat='blablablablablablablabla';
   $komplet_chatliste.=$added_chat;
   $handle=fopen($chatfil,'a');
   fwrite($handle,$added_chat);
   fclose($handle);
}

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Ace (29-05-2008)
Kommentar
Fra : Ace


Dato : 29-05-08 10:32

> Bertel Lund Hansen skrev:
>
> $komplet_chatliste='plidderpladderplidderpladder";
> $chatfil='chatfil.txt';
>
> **FEJL**
> if ($new_chat) {
>    $added_chat='blablablablablablablabla';
>    $komplet_chatliste.=$added_chat;
>    $handle=fopen($chatfil,'a');
>    fwrite($handle,$komplet_chatliste);
>    fclose($handle);
> }
>
> ** RIGTIGT **
> if ($new_chat) {
>    $added_chat='blablablablablablablabla';
>    $komplet_chatliste.=$added_chat;
>    $handle=fopen($chatfil,'a');
>    fwrite($handle,$added_chat);
>    fclose($handle);
> }
>

tusind tak, men fuck hvor er det pinligt.. selvom du har skåret det
ud i pap for mig, er jeg stadig ikke sikker på jeg ved hvordan jeg
skal ændre mit script i følge din anvisning.. ville du have noget at
lave rettelsen direkte i det script jeg gør brug af?

<?php
$name = $_REQUEST["navn"];
$besked = $_REQUEST["besked"];
$time = date("H:i");

if (!$name)
{ $name = "Anonym"; }
else { "$name"; }

$databesked = "oversigt.txt"; // Hvor beskederne bliver gemt
$length = 300; // Hvor lang beskeden kan blive
$comments = 100000; // Hvor mange beskeder der vises
$besked = stripslashes($besked);
$comfile = file($databesked);

if ($besked) {$df = fopen ($databesked, "a");
$besked = stripslashes($besked);fwrite ($df, "<b
style='font-family:Tahoma'>$name</b> <a id='sound'
style='font-family:Franklin Gothic Medium;
font-size:7pt;'>($time)</a>: $besked<br>");
for ($i = 0; $i < $comments; $i++) {fwrite ($df,
$comfile[$i]);}fclose($df);}
?>

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Ace (29-05-2008)
Kommentar
Fra : Ace


Dato : 29-05-08 11:24

Bertel please.. jeg aner ikke hvad du mener med linerne:
$komplet_chatliste='plidderpladderplidderpladder";
og
$added_chat='blablablablablablablabla';
$komplet_chatliste.=$added_chat;

Hvordan emplementerer jeg dét i det script jeg bruger?

Reference:
<?php
$name = $_REQUEST["navn"];
$besked = $_REQUEST["besked"];
$time = date("H:i");

if (!$name)
{ $name = "Anonym"; }
else { "$name"; }

$databesked = "oversigt.txt"; // Hvor beskederne bliver gemt
$length = 300; // Hvor lang beskeden kan blive
$comments = 100000; // Hvor mange beskeder der vises
$besked = stripslashes($besked);
$comfile = file($databesked);

if ($besked) {$df = fopen ($databesked, "a");
$besked = stripslashes($besked);fwrite ($df, "<b
style='font-family:Tahoma'>$name</b> <a id='sound'
style='font-family:Franklin Gothic Medium;
font-size:7pt;'>($time)</a>: $besked<br>");
for ($i = 0; $i < $comments; $i++) {fwrite ($df,
$comfile[$i]);}fclose($df);}
?>

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bertel Lund Hansen (29-05-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-05-08 12:03

Ace skrev:

> lave rettelsen direkte i det script jeg gør brug af?

> <?php
> $name = $_REQUEST["navn"];
> $besked = $_REQUEST["besked"];
> $time = date("H:i");

> if (!$name)
> { $name = "Anonym"; }
> else { "$name"; }

Den sidste linje gør ingenting.

> $databesked = "oversigt.txt"; // Hvor beskederne bliver gemt
> $length = 300; // Hvor lang beskeden kan blive
> $comments = 100000; // Hvor mange beskeder der vises
> $besked = stripslashes($besked);
> $comfile = file($databesked);

Her hentes hele det gamle indhold.

> for ($i = 0; $i < $comments; $i++) { fwrite ($df, $comfile[$i]); }

Og her skrives det hele én gang til ned i filen. Drop den del.

if ($besked) {
   $df = fopen ($databesked, "a");
   $besked = stripslashes($besked);
   fwrite ($df, "<b style='font-family:Tahoma'>$name</b> <a id='sound' style='font-family:Franklin Gothic Medium; font-size:7pt;'>($time)</a>: $besked<br>");
   fclose($df);
}

Her er to råd til hvordan du strukturerer din kode så du selv
og andre kan hitte ud af det:

1. Kun et statement pr. linje.
2. Lav indrykning når du starter en blok (med krølleparentes) eller
en anden slags gruppering.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Ace (29-05-2008)
Kommentar
Fra : Ace


Dato : 29-05-08 13:51

Bertel Lund Hansen skrev:
>
> Her hentes hele det gamle indhold.
>
> > for ($i = 0; $i < $comments; $i++) { fwrite ($df, $comfile[$i]); }
>
> Og her skrives det hele én gang til ned i filen. Drop den del.
>
> if ($besked) {
>    $df = fopen ($databesked, "a");
>    $besked = stripslashes($besked);
>    fwrite ($df, "<b style='font-family:Tahoma'>$name</b> <a id='sound' style='font-family:Franklin Gothic Medium; font-size:7pt;'>($time)</a>: $besked<br>");
>    fclose($df);
> }
>
> Her er to råd til hvordan du strukturerer din kode så du selv
> og andre kan hitte ud af det:
>
> 1. Kun et statement pr. linje.
> 2. Lav indrykning når du starter en blok (med krølleparentes) eller
> en anden slags gruppering.

Arh yeah, tak for forklaringen nu virker det som det skal, og tak for rådene :)

Men jeg har faktisk et andet spørgsmål.. nu hvor beskederne vises i den "rigtige" røkkefølge, vil jeg helst også gerne have at beskederne vises fra bunden af
dokumentet og op efter. Er der ikke en måde hvorpå dette kan lade sig gøre?


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Bertel Lund Hansen (29-05-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 29-05-08 16:56

Ace skrev:

> Men jeg har faktisk et andet spørgsmål.. nu hvor beskederne vises i den "rigtige" røkkefølge, vil jeg helst også gerne have at beskederne vises fra bunden af
> dokumentet og op efter. Er der ikke en måde hvorpå dette kan lade sig gøre?

Jo, men så er du nødt til at skrive hele indholdet hver gang. Append
(den måde man sætter med "a") lader begyndelsen af filen urørt. Du
må også vente med at vise den nye til alle de gamle er blevet vist igen
medmindre du ved nok om CSS til at styre udskriften med det.

Til gengæld er du nødt til at nyskrive filen for at undgå det samme
problem igen.

for ($i = 0; $i < $comments; $i++) { fwrite ($df, $comfile[$i]); }

if ($besked) {
   $besked = stripslashes($besked);
   array_unshift($comfile,$besked); // Indsæt ny besked som første element.
   $df = fopen ($databesked, "w"); // Her slettes den gamle fil.
   foreach ($comfile as $besked) {
      $line="<b style='font-family:Tahoma'>$name</b> <a id='sound' style='font-family:Franklin Gothic Medium; font-size:7pt;'>($time)</a>: $besked<br>";
      fwrite ($df, $line);
      echo $line;
   }
   fclose($df);
}

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Peter Brodersen (29-05-2008)
Kommentar
Fra : Peter Brodersen


Dato : 29-05-08 10:39

On Thu, 29 May 2008 11:15:01 +0200, Bertel Lund Hansen
<unospamo@lundhansen.dk> wrote:

>   $handle=fopen($chatfil,'a');
>   fwrite($handle,$added_chat);
>   fclose($handle);

En lille detalje, men i PHP5 kan man i dette tilfælde bruge
file_put_contents() i stedet for de tre funktioner.

Det kan gøre tingene mere overskuelige, hvis man alligevel kun skal lave
én operation med filen, og ikke i øvrigt har noget at bruge det handle
til:

file_put_contents($chatfil, $added_chat, FILE_APPEND);

Jeg er også fortaler for fx glob() i stedet for
opendir()/readdir()/closedir()

opendir() og fopen() blev indført for blot at spejle diverse eksisterende
systemkald, men man kan lige så godt gå et niveau op og udnytte PHPs
færdiglavede funktioner.

--
- Peter Brodersen
Kendt fra Internet

Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste