web2 logo

Bestanden in gedeelten lezen en schrijven met PHP

Kleine bestanden kan je in hun geheel in het geheugen inlezen, aanpassen en weer in hun geheel terugschrijven. Bij grotere bestanden kan het nodig zijn dat je dit in gedeelten doet.
Om een bestand in gedeelten te kunnen lezen of schrijven, moet je een bestand eerst openen met de functie fopen(). Hierbij moet je een modus meegeven om aan te geven hoe je het bestand wil openen.

Welke modus gebruiken voor het openen van een bestand?

Lezen : 'rb'
Opent het bestand voor lezen, als het bestand niet bestaat, geeft dit FALSE.

Schrijven (gevaarlijk) : 'wb'
Opent een bestand om te schrijven. Als het bestand al bestaat, dan wordt dit geleegd zodra je het bestand opent, ook al heb je nog niets weggeschreven, vandaar de aanduiding ‘gevaarlijk’. Als het bestand nog niet bestaat, dan wordt dit aangemaakt.

Schrijven (aanvullend): 'ab'
Opent een bestand om te schrijven. Als het bestand al bestaat, dan wordt nieuwe data achteraan toegevoegd, als het bestand nog niet bestaat, dan wordt het aangemaakt.

Schrijven (veilig): 'xb'
Maakt een nieuw bestand aan om te schrijven, als het al bestaat, dan geeft de functie fopen() FALSE.

Bestanden openen en sluiten

Functies die je kan gebruiken bij het openen en sluiten van bestanden:

$bestand = fopen($pad_en_naam, $modus);
Opent het bestand in de opgegeven modus en geeft een file handle terug in $bestand.

feof($bestand)
EOF checker, deze functie kijkt of het einde van het bestand is bereikt. Geeft TRUE als het einde van het bestand is bereikt.

fclose($bestand)
Sluit het bestand.

Lezen en schrijven van bestanden

Functies die je kan gebruiken voor het lezen en schrijven van bestanden, $bestand is hier een file handle die je via fopen() hebt gekregen:

fread($bestand, $max_aantal)
Leest het aantal bytes dat door $max_aantal wordt aangegeven, of minder als het einde van het bestand wordt bereikt voordat het aantal van $max_aantal is ingelezen.

fgets($bestand)
Leest een regel uit het bestand.

fwrite($bestand, $data)
Schrijft de string $data naar het bestand. Deze functie voegt geen nieuwe regelkarakters toe, dat moet je zelf doen.

Voorbeeld : Lezen uit een bestand

$pad_en_naam = './gebruikers.txt'; $bestand = fopen($pad_en_naam, 'rb'); $namen = ''; while (!feof($bestand)) { $naam = fgets($bestand); if ($naam === false) continue; $naam = trim($naam); if (strlen($naam) == 0 ) continue; $namen .= $naam . "<br>"; } fclose($bestand) ; echo $namen;

Voorbeeld : Schrijven naar een bestand

$pad = getcwd(); $schrijfpad = './bestandenlijst.txt'; $items = scandir($pad); // het eventueel al bestaande bestand wordt hier overschreven $bestand = fopen($schrijfpad, 'wb'); foreach ($items as $item) { $item_pad = $pad . DIRECTORY_SEPARATOR . $item; if (is_file($item_pad)) { fwrite($bestand, $item . "\n"); } } fclose($bestand) ;

Het lezen en schrijven van csv-bestanden

Een csv-bestand is een tekstbestand met een speciale indeling. Het bestaat uit regels met gegevens die gescheiden zijn door komma’s. Deze bestanden kunnen worden gemaakt en geimporteerd in spreadsheets en databases.
In een csv-bestand is iedere regel een database-record waarbij de velden worden gescheiden door komma's. Als een veld een komma bevat, of dubbele aanhalingstekens of een nieuwe regelteken, dan moet dat veld tussen dubbele aanhalingstekens staan. Dubbele aanhalingstekens in een veld moeten worden ge-escaped met een set dubbele aanhalingstekens.

Een regel lezen uit een csv-bestand:

fgetcsv($bestand)
Leest een regel in van een csv-bestand en zet de waarden in de velden van deze regel in een array.

Een regel schrijven naar een csv-bestand:

fputcsv($bestand, $array)
Schrijft de waarden uit de array, gescheiden door komma's, weg naar een regel in het csv-bestand.

Voorbeeld van een csv-bestand

"iPhone met hoesje",smartphone,999.95
"iPad met pencil",tablet,499.95
"Telefoonhouder",accesoire,19.95

Als je de punt als decimaalteken gebruikt, dan hoeven bedragen niet tussen aanhalingstekens te staan.

Schrijven naar een csv-bestand

Om te schrijven naar een csv-bestand maak je een array die als elementen ook weer arrays bevat. De hoofdarray bevat de gegevens voor het hele bestand, de element-arrays bevatten elk de gegevens voor een regel van het csv-bestand.
$pad_en_naam = './producten.csv'; $producten = array( array("iPhone met hoesje","smartphone",999.95), array("iPad met pencil","tablet",499.95), array("Telefoonhouder","accesoire",19.95) ); $bestand = fopen($pad_en_naam, 'wb'); foreach ($producten as $product) { fputcsv($bestand, $product); } fclose($bestand); Dit wordt de inhoud van het csv-bestand:

"iPhone met hoesje",smartphone,999.95
"iPad met pencil",tablet,499.95
Telefoonhouder,accesoire,19.95

Het openen van het csv-bestand in een spreadsheet geeft:

spreadsheet csv

Lezen uit een csv-bestand

$pad_en_naam = './producten.csv'; $bestand = fopen($pad_en_naam, 'rb'); $producten = array(); while (!feof($bestand)) { $product = fgetcsv($bestand); if ($product === false) continue; $producten[] = $product; echo '<div>'; foreach ($product as $item) { echo $item . ' ~ '; } echo '</div>'; }
Resultaat:

iPhone met hoesje ~ smartphone ~ 999.95 ~
iPad met pencil ~ tablet ~ 499.95 ~
Telefoonhouder ~ accesoire ~ 19.95 ~

Toegevoegd door: Kees de Keijzer
Twitter: @kdkq

~ php ~

~ Onderwerpen ~

Dit is een website zonder pop-ups

~ Links ~

Design & Development by Cyberwebdesign.nl for web2.nl © 2020.