2. Het gebruik van fopen()
Als je gebruik maakt van het bestandssysteem, dan zul je het meeste gebruik maken van fopen().
Dit staat voor file open, hiermee open je dus een bestand.
Bij de functie fopen() zet je devolgende informatie, die je in een variable (vaak $fp genoemd) opslaat:
$fp = fopen("bestand.php", 'a+');
Je begrijpt het bovenstaande wel denk ik, behalve dat 'a+' dan.
Dit is een voorbeeld van een modes die je op moet geven.
In de modes geef je aan hoe een bestand geopend moet worden.
De mode mag hetvolgende zijn:
r
Openen voor alleen lezen.
De pointer wordt aan het begin van het bestand geplaatst.
r+
Openen voor lezen en schrijven.
De pointer wordt aan het begin van het bestand geplaatst.
w
Openen voor alleen schrijven.
Het bestand wordt leeg (dus 0 bytes) gemaakt.
Mocht het bestand niet bestaan, dat wordt het aangemaakt.
w+
Openen voor lezen en schrijven.
Het bestand wordt leeg (dus 0 bytes) gemaakt.
Mocht het bestand niet bestaan, dat wordt het aangemaakt.
a
Openen voor alleen schrijven.
De pointer wordt aan het einde van het bestand geplaatst.
Mocht het bestand niet bestaan, dat wordt het aangemaakt.
a+
Openen voor lezen en schrijven.
De pointer wordt aan het einde van het bestand geplaatst.
Mocht het bestand niet bestaan, dat wordt het aangemaakt.
Je kunt ook altijd nog een b aan het einde van de mode zetten.
Dit is alleen handig op systemen die verschil zien tussen binaire en tekst bestand (bijvoorbeeld Windows, op Unix is het zinloos).
Als het niet nodig is, wordt het genegeerd.
Bijvoorbeeld:
$fp = fopen("bestand.php", 'a+b');
3. Een bestand uitlezen
Nu weet je dus hoe je een bestand opent met fopen() en hoe je een bestand aan kunt maken.
Maar hier heb je nu nog niks aan, daarom leg ik nu uit hoe je een bestand kunt uitlezen.
Dit doen we met de functie fread(), wat staat voor file read.
Deze maak je als volgt:
$inhoud = fread($fp, filesize($file));
Eventjes uitleggen:
fread($fp
Hier geef je aan dan je het bestand dat geopend is met fopen en opgeslagen is in de variable $fp uitleest.
filesize($file)
Hier geef je aan hoeveel tekens er moeten worden weergeven, die in het bestand staan.
Zoals je ziet gebruik ik (net zoals velen) filesize($file).
Dit geeft aan dat het aantal tekens dat het bestand $file bevat, het aantal tekens is dat moet worden weergeven.
Mocht je i.p.v. filesize($file) een getal zoals 10 neerzetten, dan zullen slechts de eerste 10 tekens uit het bestand weergeven worden.
Deze dingen worden nu opgeslagen in de variable $inhoud.
Dus als je nu hetvolgende hebt:
$inhoud = fread($fp, filesize($file));
Dan zal de variable $inhoud alle tekens uit het bestand $file bevatten.
En als je nu dit hebt:
$inhoud = fread($fp, 25);
Dan zal de variable $inhoud alleen de eerste 25 tekens uit het bestand $file bevatten. top
4. Wegschrijven naar een bestand
Nu kunnen we een bestand openen, aanmaken en lezen.
Dan nu nog informatie in een bestand zetten.
Dit doen we met de functie fwrite(), wat staat voor file write.
Deze gebruik je als volgt:
fwrite($fp, "Je tekst <br />En eventueel een variable:". $variable ."<br />Het kan allemaal!");
Deze functie lijkt me duidelijk.
Hier ga ik dan ook niet verder op in.
Als het toch niet duidelijk is, dan kun je een nota posten.
5. Het bestand afsluiten
Als je met de functie fopen() werkt moet je ook het bestand weer afsluiten.
Indien je dit niet doet, blijft het open, en gaat de server trager werken. "Als je 1 open bestand hebt, dan is dat geen probleem, maar als 200 mensen je script aanroepen, en je script 50 prentjes uit een directory uitleest, dan heb je al 200 keer die directory open en 1000 open connecties naar je prentjes.
Dan begint je server kwaad te worden", aldus Joël.
Dit doe je met de functie fclose, wat staat voor file close.
Deze functie gebruik je als volgt:
fclose($fp);
Ook hier geef ik geen verdere uitleg over.
Als het toch niet duidelijk is, dan kun je een nota posten.
6. fread en fwrite vervangen
Je hebt nu geleerd dat je met fread() een bestand kunt uitlezen en met fwrite() dingen in een bestand kunt zetten.
Het nadeel hiervan is dat je telkens als je dit wilt doen weer met fopen() en fclose() moet werken.
Maar je kunt fread() en fwrite() vervangen:
fread() kun je vervangen door file_get_contents() en fwrite kun je vervangen door file_put_contents().
Hierbij hoef je dan verder niks te openen of af te sluiten.
Het nadeel hiervan is, dat je in file_get_contents() niet kunt bepalen hoeveel tekens er uitgelezen moeten worden.
Maar dat is dan weer te bepalen met substr().
Dit is dus niet zo'n probleem, maar als je file_put_contents() wilt gebruiken, dan moet je host wel op PHP5 draaien, wat lang niet altijd het geval is.
Toch zal ik deze functies even uitleggen:
file_get_contents() gebruik je als volgt:
$inhoud = file_get_contents("bestand.php");
Zoals je wel zult begrijpen zal nu de inhoud (dus ook de PHP code) van bestand.php opgeslagen worden in de variable $inhoud.
Als je nu bijvoorbeeld de eerste 10 tekens uit het bestand wilt hebben, dan gebruik je het volgende:
$inhoud = substr(file_get_contents("bestand.php"), 0, 10);
Hier geef je aan dat alleen het eerste tot en met het tiende teken in de variable $inhoud opgeslagen worden.
Als je nou alleen het vijfde tot en met het twintigste teken wilt hebben, doe je het als volgt:
$inhoud = substr(file_get_contents("bestand.php"), 4, 20);
Als je nog meer informatie wilt hebben over substr(), klik dan hier.
file_put_contents() gebruik je als volgt:
$bytes = file_put_contents("bestand.php", "Je tekst <br />En eventueel een variable:". $variable ."<br />Het kan allemaal!");
Dit lijkt me wel duidelijk: je schrijft naar bestand.php een tekst.
In de variable $bytes wordt het aantal tekens opgeslagen dat naar het bestand geschreven is.
7. OplossingenAls ik een bestand probeer te openen lukt dit niet.
- Je moet om een bestand te kunnen openen het bestand de juiste rechten geven.
Dit doe je met chmod, hier heb ik ook een tutorial over geschreven: klik hier.
- Het bestand dat je wilt openen moet op dezelfde host staan, als dit niet het geval is opent hij het bestand niet.Ik wil iets wegschrijven met fwrite() maak het lukt niet.
- Je moet er wel altijd op letten dat je de juiste mode instelt in fopen().
Als je iets wilt wegschrijven moet de mode r+, w, w+, a of a+ zijn.
Je kunt dus niet wegschrijven als de mode r is.
- Het bestand waarin je iets wilt wegschrijven, moet op dezelfde host staan, als dit niet het geval is schrijft hij niet weg.Ik wil iets wegschrijven met file_put_contents() maak het lukt niet.
- Het bestand waarin je iets wilt wegschrijven, moet op dezelfde host staan, als dit niet het geval is schrijft hij niet weg.
- Je host moet PHP versie 5 hebbenAls ik een bestand wil uitlezen met fread dan doet hij dat niet.
- Je moet ook invullen hoeveel tekens uit het bestand gelezen moeten worden, doe je dit niet, dan zal hij 0 tekens uitlezen.
- Je moet er wel altijd op letten dat je de juiste mode instelt in fopen().
Als je iets wilt uitlezen moet de mode r, r+, w+ of a+ zijn.
Je kunt dus niet uitlezen als de mode w of a is.
- Als je een niet-bestaand bestand probeert te openen, of een leeg bestand, dan gaat fread($fp, filesize($file)) niet goed,
omdat filesize dan de mist in ging geloof ik (aldus FangorN).
- Het bestand waarin je iets wilt uitlezen, moet op dezelfde host staan, als dit niet het geval is leest hij niet uit.Als ik een bestand wil uitlezen met file_get_contens() dan doet hij dat niet.
- Het bestand waarin je iets wilt uitlezen, moet op dezelfde host staan, als dit niet het geval is leest hij niet uit.
- Je host moet PHP versie 4.3.0 of hoger hebben