Ga naar inhoud

[PHP] Ik begrijp fgets() niet helemaal...


anoniem

Aanbevolen berichten

Hallo iedereen. Ik gebruik de functie [b:91f56278f6]fgets[/b:91f56278f6] om tekstbestandjes uit te lezen en deze op mijn website te tonen. Nu werkt het allemaal prima, alleen begrijp ik een gedeelte van die functie niet helemaal :-? . Ik citeer even van php.net:[quote:91f56278f6]string fgets ( resource handle [, int length]) Geeft een string terug, met een maximale lengte van length - 1, gelezen uit het bestand waar de bestands pointer handle naar verwijst. Het lezen uit het bestand stopt als length - 1 bytes zijn gelezen, of als er een nieuwe regel begint (die wordt meegegeven aan de string), of als er een EOF optreedt (welke dan ook het eerste komt). Als length niet wordt opgegeven, wordt de standaardwaarde van 1k (1024 bytes) gebruikt. [/quote:91f56278f6]Nu heb ik me afgevraagd wat ik voor length moet gebruiken, en daar heb ik dus het een en ander mee geexperimenteerd. Nu blijkt in mijn geval die laatste opmerking uit voorgaand citaat niet op te gaan; als ik voor length gewoon helemaal niks invul, werkt het namelijk niet. Ik krijg dan de foutmelding "Warning: Wrong parameter count for fgets() in c:\phpdev3\www\buur75\index.php on line 29". Als ik dus wel een waarde invoer, werkt het prima, maar dan is me opgevallen dat het helemaal niet uitmaakt welke waarde ik gebruik voor length. Als ik nu 2, 1324 of 238984 intik, ik krijg gewoon hetzelfde resultaat! Oja bij 1 gaat het echter niet goed. Tja, hoe kan dit nu? :roll: Ok, de code is misschien ook wel handig :o ... Bij deze:[code:1:91f56278f6]$fp=@fopen($filename,"r"); if($fp<=0) { $txt = "Bestand niet beschikbaar of defect<br>\n"; } else { while (feof($fp)==0) { $regel=(fgets($fp,1324)); $txt = $txt . $regel; } fclose($fp);[/code:1:91f56278f6]
Link naar reactie
Het maakt inderdaad niet uit welk getal je invult zodra je gebruik maakt van een loop. Dmv van die "while" ga je net zolang door tot je bij het einde van het bestand bent (EOF = End Of File) Als je het getal kleiner maakt zal er dus in kleinere stapjes gelezen worden. De waarde 1 gaat fout, omdat er dan 1-1=0 bytes gelezen worden (Geeft een string terug, met een maximale lengte van length - 1) dus niets. Hierdoor wordt ook de EOF niet bereikt en zit het script in een oneindige loop.
Link naar reactie
Is het de bedoeling om de tekstfile regel voor regel uit te lezen? Als de hele file in één keer ook mag, kun je ook denken aan het attribuut filesize, bv.: $tekst="tekst.txt"; $lees = fopen($tekst,"r"); $weergave = fread($lees, filesize($tekst)); Ik heb hier fread gebruikt, is voorzover ik het begrijp equivalent aan fgets. Jan de Boer
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...