Fájlrendszer
PHP Manual

fopen

(PHP 4, PHP 5)

fopen — Megnyit egy fájlt vagy URL-t

Leírás

resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] )

A fopen() függvény beköti a filename paraméterben megnevezett erőforrást egy adatfolyamba. Ha a filename paraméter "scheme://..." formájú, ezt a PHP URL-nek tekinti és megkeresi a megfelelő protokollkezelőt (ún. burkolót) a sémára. Ha nincs burkoló a megadott protokollra regisztrálva, a PHP kibocsát egy értesítést, hogy felkutathasd a lehetséges hibákat a programban, és folyatatja a futást, a filename paramétert rendes fájlként feldolgozva.

Ha a PHP szerint a filename helyi fájlra mutat, megpróbál egy adatfolyamot nyitni a fájlon. A fájlnok hozzáférhetőnek kell lennie a PHP számára, tehát gondoskodnod kell a megfelelő hozzáférési jogosultságokról. Ha a safe mode vagy open_basedir be van kapcsolva, további korlátozások lehetségesek.

Ha a PHP szerint a filename regisztrált protokollt tartalmaz, és a protokoll hálózati URL-ként van ragisztrálva, a PHP ellenőrzi, hogy a allow_url_fopen be van-e kapcsolva. Ha ez ki van kapcsolva, a PHP figyelmeztetést bocsát ki és az fájlmegnyitásí függvényhívás sikertelen lesz.

Note: A támogatott protokollok listája megtalálható az List of Supported Protocols/Wrappers-ben. Néhány protokoll (wrapper-ek) támogatja a context-et és/vagy a php.ini opciókat. A beállítható opciókért lásd az adott protokoll oldalát a fenti linken. (pl.: a user_agent php.ini értéket a http burkoló használja).

Note: A context támogatása a PHP 5.0.0 változattól felfele érhető el. A conext-ek leírását itt találod: Streams.

Note: A PHP 4.3.2-től az alapértelmezett mód minden platformon bináris, ahol különbség van a bináris és szöveges mód között. Ha problémáid vannak a programmajaiddal a verziónövelés után, addig próbálkozz a 't' jelzővel, amíg a scripted olyan hordozható lesz, mint lejjebb látható.

A mode paraméter megszabja a kért hozzáférés típusát az adatfolyamhoz. Ez bármely lehet a következőek közül:

A fopen() függvény lehetséges megnyitási módjainak a listája, a mode paramétert használva
mode Leírás
'r' Megnyit egy fájl csak olvasásra; a fájlpointer helyzete a fájl elején lesz.
'r+' Megnyit egy fájlt olvasásra és írásra; a fájlpointer helyzete a fájl elején lesz.
'w' Megnyit egy fájlt csak írásra; a fájlpointer helyzete a fájl elején lesz, és teljesen törli a fájl tartalmát. Ha a fájl nem létezik, megpróbálja létrehozni.
'w+' Megnyit egy fájlt olvasásra és írásra; a fájlpointer helyzete a fájl elején lesz, és teljesen törli a fájl tartalmát. Ha a fájl nem létezik, megpróbálja létrehozni.
'a' Megnyit egy fájlt csak írásra; a fájlpointer helyzete a fájl végén lesz. Ha a fájl nem létezik, megpróbálja létrehozni.
'a+' Megnyit egy fájlt olvasásra és írásra; a fájlpointer helyzete a fájl végén lesz. Ha a fájl nem létezik, megpróbálja létrehozni.
'x' Megnyit egy fájlt csak írásra; a fájlpointer helyzete a fájl elején lesz. Ha a fájl már létezik, a fopen() függvényhívás sikertelen lesz, és FALSE-t ad vissza, és E_WARNING szintű hibát generál. Ha a fájl nem létezik, megpróbálja létrehozni. Ez a függvény ugyanaz, mintha a open(2) rendszerfüggvényt hívnánk meg O_EXCL|O_CREAT jelzőkkel. Ezt az opció csak a PHP 4.3.2-ban és a későbbi változatokban érhető el, és csak helyi fájlok esetében műküdik.
'x+' Megnyit egy fájlt olvasásra és írásra; a fájlpointer helyzete a fájl elején lesz. Ha a fájl már létezik, a fopen() függvényhívás sikertelen lesz, és FALSE-t ad vissza, és E_WARNING szintű hibát generál. Ha a fájl nem létezik, megpróbálja létrehozni. Ez a függvény ugyanaz, mintha a open(2) rendszerfüggvényt hívnánk meg O_EXCL|O_CREAT flagekkel. Ezt az opció csak a PHP 4.3.2-ban és a későbbi változatokban érhető el, és csak helyi fájlok esetében műküdik.

Note: Különböző operációsrendszer csaláloknak különböző sorvégződéseik vannak. Amikor egy szöveges fájlba írsz, és új sort szeretnél hozzáadni, az operációs rendszerednek megfelelő sorvégződési karakter(eket) kell használnod. Unix-alapú rendszerek \n-t használnak sorvégi karakterként, Windows-alapú rendszerek \r\n-t használnak sortörő karakterként, és Macintosh-alapú rendszerek \r-t.
Ha rossz sorvégződési karaktereket használsz a fájlok írásakor, más alkalmazások e fájl használatakor "vicces" kimenetet adhatnak.
A Windows lehetővé teszi a szöveges szerkesztést ('t'), ami a \n-eket to \r\n-ekké alakítja a fájl használata közben. Ellentétben használhatod a 'b' jelzőt is a bináris mód kényszerítéséhez, ami nem alakítja át az adatokat Ezeknek a jelzőknek a használatához vagy a 'b' vagy 't' karaktert add meg utolsó karakterként a mode paraméterben.
Az alapértelmezett átalakítási mód függ a SAPI-tól és a PHP verziójától, tehát érdemes mindig megadni a szükséges jelzőt a hordozhatóság érdekében. A 't' jelzőt kellene használni sima szövegfájloknál, és így biztos, hogy \n karakter fogja elválasztani a sorokat, de a fájlok nem biztos, hogy más alkalmazással olvashatóaknak lesznek, mint a jegyzettömbó. Minden más esetben a 'b'-t szükséges használnod.
Ha nem adod meg a 'b' jelzőt bináris fájlok feldolgozásánál, akkor érdekes problémáid lehetnek az adattal, beleértve a hibás képfájlokat és érdekes problémákat a \r\n karakterekkel.

Note: A hordozhatóság érdekében erősen ajánlott, hogy mindig használd a 'b' jelzőt a fopen() függvénnyel való megnyitásokkor.

Note: Again, for portability, it is also strongly recommended that you re-write code that uses or relies upon the 't' mode so that it uses the correct line endings and 'b' mode instead.

Az opcinális harmadik use_include_path paraméter beállítható '1'-ra vagy TRUE-ra, ha azt szeretnéd, hogy a fájlt a PHP az include_path-ban is keresse.

Ha a fájl megnyitása sikertelen, a függvény FALSE-t ad vissza és E_WARNING szintű hibát generál. Használhatod a @ karatert e figyelmeztetés elfojtásához.

Example#1 fopen() példák

<?php
$handle 
fopen("/home/rasmus/file.txt""r");
$handle fopen("/home/rasmus/file.gif""wb");
$handle fopen("http://www.example.com/""r");
$handle fopen("ftp://user:password@example.com/somefile.txt""w");
?>

Ha problémákat észlelsz a fájlok olvasása és írása közben, és a PHP-t szerver modulként használod, emlékezz, hogy a szerver folyamatnak hozzá kell férnie a használni kívánt fájlokhoz és könyvtárakhoz.

Windowson vigyázni kell arra, hogy a fordított perjelek (\) a fájl elérési útvonalában le legyenek védve, vagy használj sima perjeleket (/).

<?php
$handle 
fopen("c:\\data\\info.txt""r");
?>

Warning

SSL titkosított kapcsolat esetén a Microsoft IIS webszerver az SSL protokol helytelen implementálása folytán a kapcsolatot a close_notify jelzése nélkül zárja. A PHP ezt a következő hibaüzenettel honorálja, amikor az adattovábbítás végére ér: "SSL: Fatal Protocol Error". A probléma tüneti kezelésére a error_reporting beállítást lehet lejjebb venni. APHP 4.3.7-es és későbbi változatai képesek felismerni a hibásan működő IIS szerver-szoftvert amikor a https:// adatfolyam-burkolót alkalmazod és elnyeli a fenti hibaüzeneteket. Ha az fsockopen()-t használod ssl:// csatornán keresztül, a hibaüzenetet magad tudod észlelni és elnyomni.

Note: Ha a safe mode be van kapcsolva, a PHP ellenőrzi, hogy a könyvtár, amelyben dolgozni szeretnél, ugyanazzal a felhasználói azonosítóval (UID) rendelkezik-e, mint az éppen futó program.

Lásd még: List of Supported Protocols/Wrappers, fclose(), fgets(), fread(), fwrite(), fsockopen(), file(), file_exists(), is_readable(), stream_set_timeout(), popen() és stream_context_create().


Fájlrendszer
PHP Manual