Forum und email

fopen

(PHP 4, PHP 5)

fopen — Opent een bestand of URL

Beschrijving

resource fopen ( string $filename , string $mode [, int $use_include_path [, resource $zcontext ]] )

fopen() bindt een genaamde resource, aangegeven met filename , aan een stream. Als filename van het formaat "schema://..." is, dan wordt aangenomen dat het een URL is en PHP zal dan zoeken naar een protocol handler (ook bekend als een wrapper) voor dat schema. Als er geen wrapper voor dat protocol geregistreerd is, zal PHP een notice weergeven om je te helpen mogelijke problemen in je script te achterhalen en zal dan doorgaan alsof filename verwijst naar een normaal bestand.

Als PHP heeft besloten dat filename verwijst naar een lokaal bestand, dan zal het proberen om een stream te openen naar dat bestand. Het bestand moet toegankelijk zijn voor PHP, dus je moet er voor zorgen dat de bestands rechten dit toestaan. Als je safe mode of open_basedir aan hebt staan, kunnen er andere restricties gelden.

Als PHP heeft besloten dat filename verwijst naar een geregistreerde protcol en dat dat protocol is geregistreerd als een netwerk URL, dan zal PHP controleren of allow_url_fopen aan staat. Als het uit staat, dan zal PHP een waarschuwing weergeven en fopen zal dan falen.

Note: De lijst met ondersteunde protocols kan gevonden worden op List of Supported Protocols/Wrappers. Sommige protocols ondersteunen context en/of php.ini opties. Kijk bij de handleiding van het protocol voor een lijst met opties die aangegeven kan worden. (bijvoorbeeld wordt de php.ini waarde user_agent gebruikt bij de http wrapper) Voor een beschrijving van contexts en de zcontext parameter, kijk op Streams.

De mode parameter mag een van de volgende zijn:

A list of possible modes for fopen() using mode
mode Description
'r' Openen voor alleen lezen; plaats de bestands pointer aan het begin van het bestand.
'r+' Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand.
'w' Openen voor alleen schrijven; plaats de bestands pointer aan het begin van het bestand en maak het bestand 0 bytes lang. Als het bestand niet bestaat, probeer het aan te maken.
'w+' Openen voor lezen en schrijven; plaats de bestands pointer aan het begin van het bestand en maak het bestand 0 bytes lang. Als het bestand niet bestaat, probeer het aan te maken.
'a' Openen voor alleen schrijven; plaats de bestands pointer aan het einde van het bestand. Als het bestand niet bestaat, probeer het aan te maken
'a+' Openen voor lezen en schrijven; plaats het bestands pointer aan het einden van de file. Als het bestand niet bestaat, probeer het aan te maken

Note: Op systemen die verschil maken tussen binair ('b') en tekst ('t') mode vertaling (zoals Windows), kan je achter de mode of de letter 'b' of de letter 't' neerzetten om de vertalings mode respectievelijk op binair of op tekst te zetten.
De standaard vertalings mode hangt af van de SAPI die je gebruikt, dus we moedigen je aan om altijd de vertalings mode aan te geven. Meestal zal dat de 'b' zijn, als je je script compatible over verschillende besturingssystemen wilt houden.
Als je niet de 'b' mode opgeeft als je werkt met binaire bestanden, dan kan je raar gedrag verwachten met je data, waaronder niet werkende afbeeldingsbestanden en rare problemen met \r\n tekens.
Het wordt sterk geadviseerd dat je altijd de 'b' mode gebruikt als je bestanden opent met fopen().

De optionele derde use_include_path parameter kan op '1' of TRUE gezet worden; voor als je ook wilt zoeken voor het bestand in include_path.

Als het openen faalt, dan geeft de functie FALSE terug.

Example#1 fopen() voorbeelden

<?php
$handle 
fopen ("/home/rasmus/file.txt""r");
$handle fopen ("/home/rasmus/file.gif""wb");
$handle fopen ("https://www.example.com/""r");
$handle fopen ("ftp://user:[email protected]/somefile.txt""w");
?>

Als je problemen hebt met het lezen en schrijven naar bestanden en je maakt gebruik van de server module versie van PHP, controleer dan of de bestanden en folder die je gebruikt wel toegankelijk zijn voor het server proces.

Op Windows platform, vergeet niet backslashen te escapen in folders en bestanden, of gebruik slashen.

<?php

// $handle = fopen ("c:\data\info.txt", "r");
// Is fout!

$handle fopen ("c:\\data\\info.txt""r");
$handle fopen ("c:/data/info.txt""r");
// Zijn beide goed

?>

Zie ook List of Supported Protocols/Wrappers, fclose(), fgets(), fsockopen(), file(), file_exists(), is_readable(), socket_set_timeout(), en popen().