(PHP 4, PHP 5)
fopen — Megnyit egy fájlt vagy URL-t
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:
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");
?>
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().