Programmeren in PHP/IO
Uit Wikibooks
Iedere programmeertaal kent zijn eigen routines voor invoer en uitvoer 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.
Inhoud |
[bewerk] 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.
[bewerk] Bestanden openen
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.
[bewerk] 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 alleen 'for reading' willen openen (alleen lezen dus). Dit lettertje heet de "mode", en er zijn een hele hoop modes voor fopen:
| r | Alleen lezen |
| 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.
[bewerk] 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:
$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.
[bewerk] Filesize gebruiken
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.
[bewerk] file_get_contents
Er is ook een functie die bovenstaand voorbeeld samenvat tot 1 regel: file_get_contents. Je moet dan wel een PHP-versie van 4.3.0 of hoger hebben. Je gebruikt het zo:
$x = file_get_contents("bestand.txt"); echo $x===FALSE ? "Bestand niet ingelezen" : "Inhoud van bestand: $x";
[bewerk] 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 ge-fopen'd zijn met 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);
[bewerk] Bestanden verwijderen
Bestanden kun je ook verwijderen. Hiervoor gebruik je de unlink-functie:
unlink("bestand.txt");
[bewerk] Invoer/Uitvoer in PHP 5
In PHP 5 heb je extra functies tot je beschikking wat betreft I/O:
[bewerk] file_put_contents
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!"; }
| De wijzigingen aan deze pagina van voor 15 april 2007 vallen alléén onder de GFDL, en niet onder de CC-BY-SA-licentie. U kunt de inhoud van deze pagina dan ook alleen onder de voorwaarden van de GFDL (her)gebruiken. Niet alle bijdragers van voor 15 april 2007 hebben hun werk vrijgegeven onder de dubbellicentie GFDL&CC-BY-SA. Kijk hier voor meer informatie. |

