Programmeren in PHP/IO

Uit Wikibooks

Ga naar: navigatie, zoek
  1. Een korte inleiding tot PHP
  2. Eigen webserver met PHP installeren
  3. Syntax
  4. Variabelen
  5. Constanten
  6. Rekenen
  7. Functies
  8. Beslissingsstructuren
  9. Gebruikersinvoer
  10. I/O in PHP
  11. Klassen in PHP 4
  12. Klassen in PHP5
  13. MySql in PHP4
  14. Reguliere Expressies

WSBN



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.
Lijst van gebruikers die hun wijzigingen niet hebben vrijgegeven onder beide licenties

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Aspecten/acties
Persoonlijke instellingen