[PHP] Informatie naar *.txt bestandje schrijven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
Ik kan nu wel informatie naar een tekstbestandje schrijven en ik kan het ook oproepen. Maar als ik nu informatie toevoeg aan mijn *.txt bestandje komt de nieuwe informatie een regel eronder te staan. Maar ik wil juist hebben dat het bovenaan komt te staan. Het gaat namelijk om een nieuws bestandje. Als ik nieuws toevoeg moet dit natuurlijk bovenaan komen te staan. ik heb nu deze code, wat moet ik veranderen. Ik weet dat ik het bestandje heb geopend in de a mode. Maar als ik em open in de +r mode dan voegt ie allemaal lege regels ertussen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
    if(isset($titel) && isset($tekst) && isset($datum)) {
    $dataarray[] = $titel;
    $dataarray[] = $tekst;
    $dataarray[] = $datum;
    $data = serialize($dataarray); 
    if ($file = fopen("nieuws.txt","a")){
     fputs($file, $data . "\n");
     fclose($file);
     echo "Het nieuws is toegevoegd..." . "<p>";
     echo "<a href='nieuws_toevoegen.php'>Meer nieuws toevoegen</a><br>";
     echo "<a href='nieuws.php'>Bekijk resultaat</a>";
    } 
    else {
    echo "File kan niet geopend worden";
    }
      }
?>

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Hele file inladen, dan omgekeerd weer wegschrijven.

Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
Ja das een goede, maar hoe doe ik dat?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

vandenhork25 schreef op 07 April 2003 @ 22:11:
Ja das een goede, maar hoe doe ik dat?
met een stack? (of kent php dat niet?)

[ Voor 8% gewijzigd door Erkens op 07-04-2003 22:41 ]


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
Niet dat ik weet. Ik kan het iig niet vinden op php.net. Iemand anders misschien een idee. Liefst met wat code erbij. Want ik zou niet weten hoe ik b.v. omgekeerd zou moeten wegschrijven.

Acties:
  • 0 Henk 'm!

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Weet niet zeker of dit werkt, maar probeer dit eens:
PHP:
1
2
3
4
...
rewind($file);
fputs($file, $data . "\n");
...


Dan zou dacht ik de cursor helemaal naar het begin punt moeten verplaatsen voordat php een en ander wegschrijft. Ik weet alleen niet of dit ook werkt met meer dan 1 regel.

Acties:
  • 0 Henk 'm!

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Bestand inlezen in array
Nieuw item toevoegen voor het eerste element v/d array
Wegschrijven van de array

Kijk eens naar de functies: file(), array_push(), fwrite()

Acties:
  • 0 Henk 'm!

  • supersook
  • Registratie: Januari 2001
  • Laatst online: 28-07 17:09

supersook

Professioneel prutser

Ik heb ditzelfde geintje ook ooit gehad met een gastenboek (tevens m'n eerste kennismaking met PHP). Wat ik heb gedaan is eigenlijk doodeenvoudig:

Laad eerst het bestand in, en maak het bestand helemaal leeg (dit kan op verschillende manieren, maar ga niet voor zitten kauwen hoe je dit precies moet doen), zet dan eerst de nieuwe regel in het bestand en dan pas de oude (of maak een nieuwe string waar je eerst de nieuwe regel in zet en dan de inhoud van het bestand aan toevoegd en stop die vervolgens weer in het bestand).

Zoek bij php.net maar eens door de filefuncties en string functies, en tezamen met de werkwijze hierboven beschreven moet je een heel eind komen denk ik.

edit:
te laat, het kan inderdaad ook met een array (functie file();), kijk maar wat je lukt

[ Voor 8% gewijzigd door supersook op 07-04-2003 22:52 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
rewind werkt niet met een file die geopend is als "a".

Maar hoe groot is het filetje???
Aan de naam nieuws.txt denk ik dat het niet zo groot is, max 10 headlines = 10 regels.

En dan kan je het makkelijk inlezen in een array en daarna de array omgekeerd wegschrijven.

Dus met inlezen tellen van 1 tot 10 en met wegschrijven tellen van 10 tot 1. Je hele file is nu omgedraaid.

Acties:
  • 0 Henk 'm!

  • Stubby
  • Registratie: Januari 2002
  • Laatst online: 16:36
Het makkelijkst (en vele malen mooier) zou natuurlijk zijn om dit in een database te gooien, om er een user systeem aan te hangen en het dan tweakers.net te noemen ;), maar ff serieus de rewind functie werkt wel, maar ik denk dat je dan info gaat overschrijven, dat zal je ff moeten testen, anders is het idd zaak om de file in te lezen en de vervolgens weg te schrijven...

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 16:24

mulder

ik spuug op het trottoir

in de help staat gewoon "w+"

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
als ik rewind gebruik en w+ dan word de file overschreven ja.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 16:24

mulder

ik spuug op het trottoir

w+ is LEZEN en schrijven

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
Maar als ik w+ gebruik word de hele inhoud verwijderd.

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 16:24

mulder

ik spuug op het trottoir

ik ben denk ik abuis.

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

Om de integriteit van je huidige correcte bestand te behouden (zodat het nog beschikbaar is) zou je het volgende kunnen doen:

Maak een tijdelijk bestand, zet daar de nieuwe regel in en copieer de rest van de gegevens uit het oude bestand naar dat tijdelijke bestand (lees schrijf actie).

Na deze acties ben je zeker dat het oude bestand het nog doet en het nieuwe tijdelijke bestand correct is.

Delete het oude bestand en hernoem het oude bestand naar de correcte naam. Het bestand is maar heel even niet beschikbaar.

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Kan je niet gewoon het bestand op de huidige manier vullen, maar hem van het eind naar het begin toe schrijven? Dat lijkt me een methode die gemakkelijker is te realiseren.
Het nadeel hierbij is dat het langzamer is dan het omdraaien bij het toevoegen van de regels tekst omdat de tekst elke keer als hij wordt opgevraagd omgedraaid moet worden in plaats van elke keer dat een nieuwe regel wordt toegevoegd. Als je geen duizenden bezoekers per dag hebt is dit echter geen beperking..

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
esf schreef op 07 April 2003 @ 23:08:
Kan je niet gewoon het bestand op de huidige manier vullen, maar hem van het eind naar het begin toe schrijven? Dat lijkt me een methode die gemakkelijker is te realiseren.
Het nadeel hierbij is dat het langzamer is dan het omdraaien bij het toevoegen van de regels tekst omdat de tekst elke keer als hij wordt opgevraagd omgedraaid moet worden in plaats van elke keer dat een nieuwe regel wordt toegevoegd. Als je geen duizenden bezoekers per dag hebt is dit echter geen beperking..
Ja zoiets wil ik ook doen, maar wat moet ik dan aanpassen in mijn code. Ik ben nu bezig met het openen van het bestand in een array, maar als ik de array wegschrijf, staat er gewoon array en niet de inhoud. Hoe doe ik dat?
Ik heb nu dit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(isset($titel) && isset($tekst) && isset($datum)) {
    $dataarray[] = $titel;
    $dataarray[] = $tekst;
    $dataarray[] = $datum;
    $data = serialize($dataarray); 
    $bestand = file ("nieuws.txt");
         if ($file = fopen("nieuws.txt","w+")){
     fputs($file, $data . "\n" . $bestand);
     fclose($file);
     echo "Het nieuws is toegevoegd..." . "<p>";
     echo "<a href='nieuws_toevoegen.php'>Meer nieuws toevoegen</a><br>";
     echo "<a href='nieuws.php'>Bekijk resultaat</a>";
    } 
    else {
    echo "File kan niet geopend worden";
    }
      }

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Het kan zijn dat er nog wat foutjes in zitten, ik heb het net even snel in elkaar gezet, maar het zou ongeveer als volgt kunnen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    $file = fopen ("nieuws.txt", "r");
    if (!$file) {
        echo "<p>Unable to open remote file.</p>\n";
        exit;
    }
    $i = 0;
    while (!feof ($file)) {
        $line = fgets ($file, 1024);
        $arr[$i] = $line;
        $i++;
    }
    fclose($file);
    for ($j = sizeof($arr) - 1; $j >= 0; $j--)
    {
        print $arr[$j] + "<br>\n";
    }


Een array kan je niet gewoon printen als je een string print. Voor testdoeleinden kan je gebruik maken van print_r(arraynaam), maar om de array goed op het scherm te krijgen, moet je gebruik maken van een lus/loop.

Wat jij trouwens in je laatste berichtje hebt geschreven is de code om in het bestand te schrijven. Wat ik heb gegeven, is voor het lezen. Dus het is niet de bedoeling om jouw stuk code dat je net hebt gegeven te vervangen door de mijne ;)

[ Voor 59% gewijzigd door esf op 07-04-2003 23:36 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
$messages = "textfile.txt";
$msgfile = fopen ("$messages","r");
$oud = fread ($msgfile, filesize ($messages));
fclose ($msgfile);

$new = $HEADER;
$new .= $oud;

$msgfile = fopen ("textfile.txt","w");
fputs ($msgfile,$new);
fclose ($msgfile);


deze gebruik ik, en werkt.

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Even voor de duidelijkheid.. Het script dat ik heb gegeven is voor het omgekeerd afdrukken van de regels uit een tekstbestand. Het script van Blaise daarentegen, kan worden gebruikt om op een gegeven moment de regels in een tekstbestand om te draaien. Op zich maakt het niet zo veel uit welke je gebruikt, maar het nadeel van het script van Blaise is dat hij nog aangepast moet worden omdat hij niet uitgevoerd wordt bij het wegschrijven van de gegevens en ook niet bij het afdrukken op het scherm, maar ertussen. Dit is niet erg efficient omdat je nu drie stappen krijgt in plaats van twee. Maar met een beetje aanpassing kan het ook voor het script worden gebruikt..

The hardest thing in the world to understand is the income tax. - Albert Einstein


Acties:
  • 0 Henk 'm!

  • vandenhork25
  • Registratie: April 2002
  • Laatst online: 23-12-2017
Het is nu eindelijk gelukt, met behulp van de code van Blaise, bedankt allemaal. Hier nog even de code. Misschien zit er nog wat onzinnige code in of zo.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$messages = "nieuws.txt"; 
    $msgfile = fopen ("$messages","r"); 
    $oud = fread ($msgfile, filesize ($messages)); 
    fclose ($msgfile); 

    $new = $HEADER; 
    $new .= $oud;
    
    if(isset($titel) && isset($tekst) && isset($datum)) {
    $dataarray[] = $titel;
    $dataarray[] = $tekst;
    $dataarray[] = $datum;
    $data = serialize($dataarray); 
    if ($msgfile = fopen ("nieuws.txt","w")){
     fputs ($msgfile,$data . "\n" . $new); 
     fclose ($msgfile);
     echo "Het nieuws is toegevoegd..." . "<p>";
     echo "<a href='nieuws_toevoegen.php'>Meer nieuws toevoegen</a><br>";
     echo "<a href='nieuws.php'>Bekijk resultaat</a>";
    } 
    else {
    echo "File kan niet geopend worden";
    }
      }

Acties:
  • 0 Henk 'm!

  • esf
  • Registratie: Juni 2002
  • Laatst online: 21-02 08:56

esf

Ohw.. sorry voor mijn vorige commentaar op het stuk van Blaise. Ik had de code even snel doorgelezen en dacht dat het alleen de tekst in een tekstbestand omdraaide, maar zag over het hoofd dat hij ook een extra regel toevoegde. Maar nu ik zie dat dat wel het geval is, denk ik dat het een goede oplossing is die de TS uiteindelijk heeft gevonden ;)

The hardest thing in the world to understand is the income tax. - Albert Einstein

Pagina: 1