Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

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

J. de Boer
3 antwoorden
  • 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>
    "; }
    else {
    while (feof($fp)==0) {
    $regel=(fgets($fp,1324));
    $txt = $txt . $regel;
    }
    fclose($fp);[/code:1:91f56278f6]
  • 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.
  • Aha. Prima! Dank u wel. Ik dacht namelijk dat hij tijdens het inlezen bij elk stapje gewoon naar de volgende regel zou gaan. Bij een waarde van 10 had ik eigenlijk verwacht dat ik dan steeds de eerste 10 karakters van elke regel op mijn scherm zou krijgen. Daar zat dus mijn denkfout. Groeten van Buur.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.