/ 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
Indsæt nederst i stedet for øverst?
Fra : Niels


Dato : 15-10-04 12:27

Jeg har en gæstebog hvor den indsætter beskeden (navn, email,
hjemmeside, emne, besked) ØVERST i et tekst-dokument!

Her er et udsnit af koden:

   $fil = "tekstdokument.txt";
   $tid = strftime("%d %B %Y", getlastmod()+3600);
   $str = "<p><b>Navn:</b> $navn<br><b>Besked:</b>
$besked</p><hr/>";
   $fp = fopen($fil, r);
   if($fp) {
      $filArray = file($fil);
      $result = implode("", $filArray);
      $result = "$str$result";
      fclose($fp);
   }
   $fp = fopen($fil, w);
   if($fp) {
      fputs($fp, $result);
      fclose($fp);
   }

Nu sætter den ind øverst i tekstdokument.txt, kan den ikke sætte
ind nederst?

Mvh. Niels (http://niels.spoweb.dk)

--
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

 
 
Dennis Newel (15-10-2004)
Kommentar
Fra : Dennis Newel


Dato : 15-10-04 13:22


byt rundt så $result = "$result$str";

...forresten en lidt tung måde hvis der først kommer load på. Du loader
hele filen ind i hukommelsen, for at tilføje en enkelt linie. Det kan
helt klart gøres smartere. Prøv:


Niels wrote:
>    $fil = "tekstdokument.txt";
>    $tid = strftime("%d %B %Y", getlastmod()+3600);
>    $str = "<p><b>Navn:</b> $navn<br><b>Besked:</b>
> $besked</p><hr/>";

erstat:
>    $fp = fopen($fil, r);
>    if($fp) {
>       $filArray = file($fil);
>       $result = implode("", $filArray);
>       $result = "$str$result";
>       fclose($fp);
>    }
>    $fp = fopen($fil, w);
>    if($fp) {
>       fputs($fp, $result);
>       fclose($fp);
>    }
>
med:
$fp = fopen($fil, w);
if($fp) {
   fputs($fp, $str);
   fclose($fp);
}

Så nøjes du med at tilføje din linie til bunden af filen. Læs evt. mere
om fopen her: http://dk.php.net/manual/en/function.fopen.php

./Dennis

Thomas Lindgaard (15-10-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 15-10-04 14:09

On Fri, 15 Oct 2004 14:21:31 +0200, Dennis Newel wrote:

> $fp = fopen($fil, w);
> if($fp) {
>    fputs($fp, $str);
>    fclose($fp);
> }

Eller endnu bedre - erstat med:

$fp = fopen($fil, 'a');

Hvis man åbner filen med 'w', så slettes indholde ved ny skrivning.
Skrivning til en fil åbnet med 'a' sker i enden af filen.

(Var det ikke det du mente, Dennis?)

Mvh.
/Thomas

Thomas Lindgaard (15-10-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 15-10-04 13:28

On Fri, 15 Oct 2004 11:26:50 +0000, Niels wrote:

> Nu sætter den ind øverst i tekstdokument.txt, kan den ikke sætte
> ind nederst?

Nej.

Den eneste måde hvorpå du kan indsætte noget i toppen af en fil er at
skrive det nye indlæg i en ny fil, og derefter kopiere indholdet af den
gamle fil ind i bunden.

Men i mine øjne ville det være smartere at gemme indlæggene i din
gæstebog som et serialiseret array, sårn lidt ala:

<?php
$guestbook[] = array(
'date' => time(),
'name' => 'Hans Henning Hestehandler',
'message' => 'Bambi er sej!'
);

// Save to disk
if ( ($f = fopen('guestbook.txt', 'w')) != false )
{
fwrite($f, serialize($guestbook));
fclose($f);
}
?>

Når du så skal vise gæstebogen, er det bare at læse det serialiserede
array igen og skrive det ud på en smart måde:

<?php
$guestbook = unserialize(file_get_contents('guestbook.txt'));
foreach ($guestbook as $entry)
{
// udskriv $entry
}
?>

Eller hvis du vil udskrive det nyeste indlæg først:

<?php
$guestbook = unserialize(file_get_contents('guestbook.txt'));
for ($i = count($guestbook); $i > 0; $i--)
{
// udskriv $guestbook[$i]
}
?>

Hmmm... toilettid - gotta go.
/Thomas

Tommy Ipsen (15-10-2004)
Kommentar
Fra : Tommy Ipsen


Dato : 15-10-04 14:29

Thomas Lindgaard wrote:

>>Nu sætter den ind øverst i tekstdokument.txt, kan den ikke sætte
>>ind nederst?
>
> Nej.
>
> Den eneste måde hvorpå du kan indsætte noget i toppen af en fil er at
> skrive det nye indlæg i en ny fil, og derefter kopiere indholdet af den
> gamle fil ind i bunden.

Du svarer da ikke på spørgsmålet?

Mvh Tommy

Thomas Lindgaard (15-10-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 15-10-04 16:31

On Fri, 15 Oct 2004 15:28:49 +0200, Tommy Ipsen wrote:

> Du svarer da ikke på spørgsmålet?

Joh lidt gør jeg da... :)

Men jeg kan da ved nærmere gennemlæsning godt se at det kunne gøres
bedre. Here goes...

Man kan ikke skrive noget ind i toppen af en fil - man kan kun tilføje
til bunden. Skrivning til toppen af filen KAN gøres ved anvendelse af
følgende krumspring:

1) åbne og læse indholdet af den originale fil - dette gemmes i en
streng og filen lukkes igen
2) åbne filen med skriveadgang (hvorved alt indholdet slettes) og så
først skrive det nye indhold og derefter indholdet af strengen

Svar nok?

Til gengæld foreslog jeg en metode hvor Murray i stedet for at gemme en
html-fil kunne gemme sin gæstebog som et serialiseret array. Et sådant
er meget let både at tilføje til og at indlæse igen, og når man først
har hele sin gæstebog liggede i et array, kan man jo selv bestemme om man
vil skrive det ud forfra eller bagfra eller fra midten og ud...

Men hvorom alting er, så læser begge metoder (Murrays og min) HELE
gæstebogen ind, hver gang der tilføjes en indgang til den, og det kan jo
godt gå hen og blive lidt træls rent performance-mæssigt, hvis man har
mange besøgende.

Mvh.
/Thomas

Tommy Ipsen (15-10-2004)
Kommentar
Fra : Tommy Ipsen


Dato : 15-10-04 22:36

Thomas Lindgaard wrote:

> Men jeg kan da ved nærmere gennemlæsning godt se at det kunne gøres
> bedre. Here goes...
>
> Man kan ikke skrive noget ind i toppen af en fil - man kan kun tilføje
> til bunden. Skrivning til toppen af filen KAN gøres ved anvendelse af
> følgende krumspring:
>
> 1) åbne og læse indholdet af den originale fil - dette gemmes i en
> streng og filen lukkes igen
> 2) åbne filen med skriveadgang (hvorved alt indholdet slettes) og så
> først skrive det nye indhold og derefter indholdet af strengen

Så vidt jeg forstår af spørgsmålet har Niels i forvejen den lidt
omstændige løsning med at skrive til starten af en fil og ønsker i
stedet en løsning, hvor der skrives til slutningen af en fil! Dette er
så besvaret af Dennis og tilrettet af dig - disse par linier er vel
løsningen på Niels' problem?

Mvh Tommy Ipsen

Thomas Lindgaard (16-10-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 16-10-04 09:01

On Fri, 15 Oct 2004 23:36:18 +0200, Tommy Ipsen wrote:

> Så vidt jeg forstår af spørgsmålet har Niels i forvejen den lidt
> omstændige løsning med at skrive til starten af en fil og ønsker i
> stedet en løsning, hvor der skrives til slutningen af en fil! Dette er
> så besvaret af Dennis og tilrettet af dig - disse par linier er vel
> løsningen på Niels' problem?

Aaah - nu kan jeg se hvad du mener. Jeg forstod det som om, at Niels
ønskede at skrive øverst i filen...

Så jow - Dennis har svaret.

Mvh.
/Thomas (der dog stadig mener at serialiserede arrays er smarte :)

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

Månedens bedste
Årets bedste
Sidste års bedste