fopen
(PHP 4, PHP 5)
fopen — Otwiera plik lub URL
Opis
resource fopen ( string $nazwa_pliku , string $tryb [, bool $u¿yj_include_path [, resource
$kontekst ]] )
fopen() wi±¿e nazwany zasób, okre¶lony przez nazwa_pliku, do strumienia.
Parametry
nazwa_pliku
Je¶li nazwa_pliku jest w postaci "schemat://...", to przypuszczalnie jest to URL i PHP szuka
protoko³u obs³ugi (tak¿e zwanego wrapper'em) dla tego schematu. Je¶li nie zarejestrowano
¿adnego wrapper'a dla tego protoko³u, PHP wyemituje notatkê, aby pomóc Tobie w wy¶ledzeniu
potencajalnego problemu w Twoim skrypcie nastêpnie bêdzie kontynuowaæ z podanym
nazwa_pliku traktuj±c go jako zwyk³y plik.
Je¶li PHP zdecyduje, ¿e nazwa_pliku okre¶la lokalny plik, wtedy spróbuje otworzyæ strumieñ na
tym pliku. Plik musi byæ dostêpny dla PHP, wiêc musisz zapewniæ prawa dostêpu do pliku
pozwalaj±ce na tak± operacjê. Je¶li masz w³±czone tryb bezpieczny lub open_basedir mog±
mieæ zastosowanie dodatkowe restrykcje.
Je¶li PHP zdecyduje, ¿e nazwa_pliku okre¶la zarejestrowany protokó³ i ten protokó³ jest
zarejestowany jako sieciowy URL, PHP sprawdzi allow_url_fopen czy jest w³±czone. Je¶li jest
wy³±czone (off), PHP wy¶wietli ostrze¿enie i wywo³anie fopen zakoñczy siê niepowodzeniem.
Informacja:
Listê obs³ugiwanych protoko³ów mo¿esz znale¼æ w Supported Protocols and Wrappers.
Niektóre protoko³y (równie¿ okre¶lane przez wrappery obs³uguj± kontekst lub/i opcje php.ini.
Odwo³aj siê do konkretnej strony protoko³u aby uzyskaæ listê opcji jakie mog± zostaæ ustawione
(np. php.ini warto¶æ user_agent u¿ywana przez wrapper http).
Na platformie Windows, dbaj aby wstawiaæ znaki ucieczki (escape) przed wszystkimi lewymi
uko¶nikami (backslash) u¿ytymi w ¶cie¿ce do pliku lub u¿ywaæ uko¶ników (slash).
<?php
$handle = fopen("c:\\data\\info.txt", "r");
?>
Parametr tryb okre¶la rodzaj dostêpu jaki wymagasz do strumienia. Mo¿e byæ dowolny z
nastêpuj±cych:
tryb Opis
'r' Otwiera tylko do odczytu; umieszcza wska¼nik pliku na jego pocz±tku.
'r+' Otwiera do odczytu i zapisu; umieszcza wska¼nik pliku na jego pocz±tku.
'w' Otwiera tylko do zapisu; umieszcza wska¼nik pliku na jego pocz±tku i obcina plik
do zerowej d³ugo¶ci. Je¶li plik nie istnieje to próbuje go utworzyæ.
'w+' Otwiera do odczytu i zapisu; umieszcza wska¼nik pliku na jego pocz±tku i
obcina plik do zerowej d³ugo¶ci. Je¶li plik nie istnieje to próbuje go utworzyæ.
'a' Otwiera tylko do zapisu; umieszcza wska¼nik pliku na jego koñcu.
Je¶li plik nie istnieje to próbuje go utworzyæ.
'a+' Otwiera do odczytu i zapisu; umieszcza wska¼nik pliku na jego koñcu. Je¶li
plik nie istnieje to próbuje go utworzyæ.
'x' Tworzy i otwiera plik tylko do zapisu; umieszcza wska¼nik pliku na
jego pocz±tku. Je¶li plik juz istnieje, wywo³anie fopen() nie powiedzie siê,
zwróci FALSE i wygeneruje b³±d na poziomie E_WARNING. Je¶li plik nie
istnieje, spróbuje go utworzyæ. To jest równowa¿ne z okre¶leniem flag
O_EXCL|O_CREAT stosowanym w wywo³aniu systemowym open(2).
'x+' Tworzy i otwiera plik odczytu i zapisu; umieszcza wska¼nik pliku na jego
pocz±tku. Je¶li plik juz istnieje, wywo³anie fopen() nie powiedzie siê, zwróci
FALSE i wygeneruje b³±d na poziomie E_WARNING. Je¶li plik nie istnieje,
spróbuje go utworzyæ. To jest równowa¿ne z okresleniem flag
O_EXCL|O_CREAT stosowanym w wywo³aniu systemowym open(2).
Informacja:
Ró¿ne rodziny systemów operacyjnych stosuja rózne konwencje koñca lini. Kiedy zapisujesz
plik tekstowy i chcesz wstawiæ ³amanie lini, musisz u¿yæ poprawnych dla twojego systemu
operacyjnego znak(ów) koñca lini. Systemy bazuj±ce na Uniksie u¿ywaj± \n jako znaku koñca
lini, systemy bazuj±ce na Windowsie u¿ywaj± \r\n jako znaków koñca lini, a systemy Macintosh
u¿ywaj± \r jako znak koñca lini.
Je¶li u¿yjesz nieprawid³owego koñca lini do zapisu pliku, mo¿esz zaobserwowaæ, w innych
aplikacjach otwieraj±c ten plik, ¿e "wygl±da on zabawnie".
Windows oferuje flagê ('t') konwertuj±c± tryb tekstowy, która przezroczy¶cie przek³ada \n na \r\n
kiedy pracujesz z plikiem. Dla kontrastu, mo¿esz tak¿e uzyæ 'b' aby wymusiæ tryb binarny, wtedy
nie bêdzie konwertowaæ twoich danych. Aby u¿yæ tych flag, wstaw 'b' lub 't' jako ostatni znak w
parametrze tryb.
Domy¶lnie tryb konwersji zale¿y od SAPI i wersji PHP jakiej u¿ywasz, wiêc namawiamy aby
zawsze podawaæ stosown± flage w celu przeno¶no¶ci. Powiniene¶ u¿yæ trybu 't' je¶li pracujesz
ze zwyk³ymi plikami tekstowymi (plainÂtext)i u¿ywasz \n do ograniczenia konców lini w twoim
skrypcie, ale wymagasz aby twój plik by³ czytelny w aplikacjach takich jak notatnik. Powiniene¶
uzyæ 'b' w ka¿dym innym przypadku.
Je¶li nie podasz flagi 'b' kiedy pracujesz na binarnych plikach, mo¿esz do¶wiadczyæ dziwnych
problemów z twoimi danymi, w³±czaj±c uszkodzone pliki graficzne i dziwne problemy ze
znakami \r\n.
Informacja:
Dla przeno¶no¶ci, bardzo zalecane jest u¿ycie zawsze flagi 'b' kiedy otwierasz pliki za pomoc±
fopen().
Informacja:
Ponownie, dla przeno¶no¶ci, jest równie¿ bardzo zalecane aby¶, przepisa³ swój kod, który
u¿ywa lub polega na trybie 't' tak aby u¿ywa³ poprawnego koñca lini oraz trybu 'b'.
u¿yj_include_path
Opcjonalny trzeci parametr u¿yj_include_path mo¿e byæ ustawiony na '1' lub TRUE je¶li chcesz
szukaæ pliku tak¿e w include_path.
kontekst
Informacja: Obs³uga kontekstów zosta³a dodana w PHP 5.0.0. Opis kontekstów znajduje siê w
rozdziale Stream Funkcje.
Zwracane warto¶ci
Zwraca wska¼nik pliku do zasobu w przypadku sukcesu lub FALSE przy b³êdzie.
B³êdy/Wyj±tki
Je¶li otwieranie siê nie powiedzie, funkcja wygeneruje b³±d na poziomie E_WARNING. Mo¿esz
u¿yæ @ aby zatuszowaæ to ostrze¿enie.