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 (plaintext)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.