Programmeren in PHP/IO

Uit Wikibooks

Programmeren in PHP


  1. Inleiding
  2. Een webserver installeren
  3. Syntax
  4. Variabelen
  5. Beslissingsstructuren
  6. Constanten
  7. Rekenen
  8. Loops
  9. Includes
  10. Functies
  11. Gebruikersinvoer
  12. I/O in PHP
  13. Klassen
  14. MySQL en PHP
  15. Reguliere Expressies

Iedere programmeertaal kent zijn eigen routines voor invoer en uitvoer (Input/Output) naar bestanden, het scherm, of wat voor iets dan ook. PHP gebruikt veel functies die voor C-programmeurs erg herkenbaar zullen zijn. In dit hoofdstuk leer je hoe je bestanden opent en leest/schrijft vanuit een script. Verder leer je hoe je webpagina's kunt ophalen van andere websites via de gewone bestandsfuncties.

Invoer/uitvoer in PHP 4[bewerken]

Als je webserver PHP 4 draait, lees dan dit. Als hij PHP 5 draait, raad ik je aan om file_get_contents en file_put_contents te gebruiken.

Bestanden openen[bewerken]

Bestanden openen in PHP is heel simpel: je gebruikt gewoon de fopen-functie:

PHP-code:

$fp = fopen("bestand.txt","r");
if($fp) {
    // Je kunt hier met je bestand werken
    fclose($fp);
}
else {
    // Bestand kon niet worden geopend
}

Zoals je ziet geeft fopen een waarde terug in een variabele. Vanaf dat moment gebruik je $fp om het bestand te identificeren. Als je klaar bent met je bewerkingen op het bestand, moet je het netjes afsluiten met fclose. Overigens worden open bestanden bij het eindigen van je script automatisch gesloten, maar als je bijvoorbeeld 100 bestanden moet openen in je script is het wel fijn als je fclose tussendoor doet, omdat anders je resource-gebruik nogal hoog wordt.

Modes[bewerken]

Wat je misschien is opgevallen is de "r" als tweede parameter van fopen (de eerste parameter is de bestandsnaam). De "r" geeft aan dat we het bestand 'read only', d.w.z. alleen voor lezen willen openen. Deze letter duidt de "mode" aan. Er zijn een hele hoop modes voor fopen:

r Alleen lezen (read only)
w Schrijven
w+ Lezen en schrijven
a schrijven (maar dan in 'append'-modus, wat je schrijft wordt aan het einde van het bestand toegevoegd)

Voor de details (er zijn nog meer modes!) kijk je op de fopen-documentatiepagina.

Van een bestand lezen[bewerken]

De C-programmeurs onder ons gebruiken waarschijnlijk de standaard-functie fread om uit bestanden te lezen. PHP gebruikt ongeveer dezelfde functies, dus ook deze is hetzelfde. Hieronder een voorbeeldje van fread in actie:

PHP-code:

$fp = fopen("bestand.txt", "r");
$contents = "";

while (!feof($fp)) {
  $contents .= fread($fp, 8192);
}
fclose($fp);

Deze code leest bestand.txt in in een loopje, steeds in brokken van 8192 bytes (de tweede parameter van fread). Met feof kun je controleren of je al aan het einde van het bestand (EOF = End Of File) zit. Overigens leest fread nooit meer in dan nodig, dus je hoeft niet bang te zijn dat als je fread($fp, 1000) doet op een bestand met maar 2 tekens dat er dan een hoop andere dingen bij komen of dat je een foutmelding krijgt. 1000 is gewoon de buffergrootte, en die buffer hoeft niet perse vol te zitten.

Een heel bestand in één keer inladen[bewerken]

Je kunt ook het hele bestand in 1x inladen. Niet zo slim als het bestand heel groot is, maar soms is het wel makkelijk. Je doet het als volgt:

PHP-code:

$fn = "bestand.txt";
$fp = fopen($fn,"r");
$contents = fread($fp, filesize($fn));
fclose($fp);

Heb je gelijk een nieuwe functie geleerd: met filesize vraag je de grootte van een bestand op in bytes aan de hand van de bestandsnaam. Erg straight-forward, kun je weinig fouten mee maken.

Er is echter een nog makkelijkere manier:

PHP-code:

$fn = "bestand.txt";
$contents = file_get_contents($fn);

Schrijven naar bestanden[bewerken]

Als je leest met fread, dan schrijf je dus logischerwijs met... fwrite, juist. fwrite is bijna net zo simpel te gebruiken als fread. Om te kunnen schrijven (write) moet het bestand wel met fopen geopend zijn in mode "w" of een andere schrijfmode:

PHP-code:

$fp = fopen("bestand.txt", "w");
if(fwrite($fp, $somecontent)===FALSE) {
    echo "Kon niet schrijven!";
    exit;
}
fclose($fp);

Invoer/uitvoer in PHP 5[bewerken]

In PHP 5 heb je extra functies tot je beschikking wat betreft I/O:

file_put_contents[bewerken]

file_put_contents() vat het bovenstaande samen. Je gebruikt het zo:

PHP-code:

$geschreven=file_put_contents('bestand.txt','Tekst...');
if($geschreven!==FALSE) {
    echo "Aantal geschreven bytes: $geschreven\n";
    $toegevoegd=file_put_contents('bestand.txt',"\nDit is toegevoegde tekst",FILE_APPEND);
    echo $toegevoegd===FALSE ? "Niks toegevoegd" : "Aantal toegevoegde bytes: $toegevoegd";
} else {
    echo "Er ging iets mis!";
}

Andere functies met bestanden[bewerken]

Bestanden en mappen kun je ook verwijderen, hernoemen, verplaatsen, of kopiëren. Hiervoor gebruik je deze functies:

PHP-code:

unlink("bestand.txt"); //bestand.txt verwijderen
rename("bestand.txt", "bestand.html"); //bestand.txt hernoemen naar bestand.html
move("bestand.txt", "../"); //bestand.txt naar een map omhoog verplaatsen.
copy("bestand.txt", "../"); //een kopie van bestand.txt een map omhoog maken.
rmdir("map"); //de map "map" verwijderen
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.