# Programmeren in PHP/IO

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

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

Bestanden openen in PHP is heel simpel: je gebruikt gewoon de fopen-functie:
PHP-code:
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

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

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:
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

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:
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:

## Schrijven naar bestanden

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:

# Invoer/uitvoer in PHP 5

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

### file_put_contents

file_put_contents vat het bovenstaande samen. Je gebruikt het zo:
PHP-code:

## Andere functies met bestanden

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