fopen
(PHP 4, PHP 5)
fopen — Megnyit egy fájlt vagy URL-t
LeÃrás
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("https://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().