4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Podobne dokumenty
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

Funkcje zawarte w bibliotece < io.h >

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie w językach wysokiego poziomu

Funkcje zawarte w bibliotece < io.h >

Programowanie w językach

Wykład PASCAL - Pliki tekstowe

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Komunikacja między klientem, a skryptem PHP, oraz operacje na plikach

Biblioteka standardowa - operacje wejścia/wyjścia

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

7 Przygotował: mgr inż. Maciej Lasota

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Operacje na plikach w Pascalu

Pliki. Informacje ogólne. Obsługa plików w języku C

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

INFORMATYKA Studia Niestacjonarne Elektrotechnika

PHP daje nam możliwość wysłania wiadomości bezpośrednio z poziomu kodu. Służy do tego funkcja mail().

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

12. OPERACJE NA PLIKACH

Podstawowe wiadomości o systemach plików.

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Szablon główny (plik guestbook.php) będzie miał postać:

System plików warstwa logiczna

2. Łańcuchy tekstowe w PHP

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Wykład 4. Tablice. Pliki

1. Wprowadzenie do języka PHP

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

W języku C każdy plik fizyczny jest ciągiem bajtów, z których każdy może być niezależnie odczytany. Borland 01234

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Dane - pobieranie, przekazywanie i przechowywanie. dr Beata Kuźmińska-Sołśnia

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

Argumenty wywołania programu, operacje na plikach

Ćwiczenie: JavaScript Cookies (3x45 minut)

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Programowanie Procedurale. Pliki w języku C++

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

Podstawy programowania w języku C++

Smarty PHP. Leksykon kieszonkowy

Strumienie i pliki. Programowanie Proceduralne 1

KaŜda instrukcja musi być zakończona średnikiem ;!!!

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania w języku C++

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Strumienie, pliki. Sortowanie. Wyjątki.

Funkcje wbudowane PHP

Programowanie internetowe

Tablice, funkcje - wprowadzenie

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

7. Dynamiczne generowanie grafiki

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Internetowe bazy danych

Oczywiście plik musi mieć rozszerzenie *.php

Użycie Visual Basic for Applications ("VBA")

Systemy operacyjne. System operacyjny Linux - wstęp. Anna Wojak

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

OPERACJE NA PLIKACH. Podstawowe pojęcia:

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Systemy plików i zarządzanie pamięcią pomocniczą. Struktura pliku. Koncepcja pliku. Atrybuty pliku

Jak wiemy, wszystkich danych nie zmieścimy w pamięci. A nawet jeśli zmieścimy, to pozostaną tam tylko do najbliższego wyłączenia zasilania.

Instrukcje dołączania plików

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

do drukowania tekstu służy funkcja echo <?php echo "hello world!";?> jeżeli użyjemy jej kilka razy: <?php

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Informatyka 2015/16 wykład 9. Pliki Sterowanie przebiegiem programu cz. 2. Dr inż. Witold Nocoń (p. 230)

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Pliki. Wywołanie fopen ma schematyczną postać: fopen('nazwa_pliku', 'tryb_otwarcia')

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Podstawy programowania skrót z wykładów:

Formy dialogowe w środowisku Gnome

Logiczny model komputera i działanie procesora. Część 1.

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Statyczne i dynamiczne predykaty

Windows Serwer 2008 R2. Moduł 5. Zarządzanie plikami

Zaliczenie przedmiotu:

Metodyka i Technika Programowania 1

System plików - Podstawy PHP

14. POZOSTAŁE CIEKAWE FUNKCJE

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Transkrypt:

4. Pliki 4.1. Informacje ogólne o dostępie do plików w PHP Jak praktycznie każdy język programowania, PHP zapewnia dostęp do systemu plików znajdujących się na komputerze, na którym uruchamiany jest skrypt, bądź też zdalnych.interfejs dostępu do plików w PHP jest zbliżony do tego, co udostępnia biblioteka standardowa języka C, znajdziemy jednak kilka specyficznych dla PHP, a dość wygodnych funkcji. Plik w PHP jest reprezentowany przez zmienną typu zasób (resource). Większość funkcji związanych z plikami wymaga takiej zmiennej jako pierwszego parametru. Istnieją jednak funkcje, które używają jedynie ścieżki dostępu do pliku. 4.2. Sprawdzanie istnienia pliku file_exists() Zanim spróbujemy plik otworzyć, warto sprawdzić jego istnienie. Funkcja file_exists() przyjmuje jako argument łańcuch tekstowy, będący ścieżką dostępu do pliku, wynikiem jest TRUE lub FALSE. Oto przykład: if (file_exists('dane/wyniki.txt')) { // plik istnieje }

Ścieżka dostępu do pliku, jeżeli jest względna, jest interpretowana w odniesieniu do katalogu, w którym znajduje się skrypt. Jeżeli mamy następującą stukturę katalogów: / /home /user6 /public_html /skrypty skrypt.php /dane dane3.txt to z wnętrza skryptu skrypt.php możemy się odwołać do pliku dane3.txt albo bezwzględnie, poprzez /home/user6/public_html/dane/dane3.txt albo względnie poprzez../dane/dane3.txt. 4.3. Wczytanie pliku do łańcucha tekstowego file_get_contents() Funkcja ta wczytuje plik o podanej nazwie (całą zawartość) do jednego łańcucha tekstowego, który może być rzecz jasna dość długi. $text = file_get_contents('../dane/dane3.txt'); Warto zwrócić uwagę, że o ile w pliku występują znaki końca linii, to zostaną one bez zmian umieszczone w łańcuchu. Można tą funkcją ładować pliki binarne, ale trzeba się liczyć z tym, że łańcuch może zawierać dowolne znaki z całego zakresu 0 255.

4.4. Wczytanie pliku do tablicy file() Jest to funkcja przeznaczona do ładowania plików tekstowych podzielonych na linie (zakończone znakiem końca linii). Każda linia tekstu zostaje załadowana do kolejnego elementu tablicy. Klucze kolejnych elementów tworzone są automatycznie (liczby całkowite 0, 1, 2...). Wartości kolejnych elementów to łańcuchy tekstowe zawierające zawartość kolejnych linii tekstu wraz ze znakami końca linii (nie są one odrzucane). Można się ich pozbyć wykonując na elementach funkcję rtrim(). $tablica = file('../dane/dane3.txt'); 4.5. Badanie rozmiaru pliku - filesize() Funkcja podaje rozmiar pliku o podanej nazwie w bajtach: $dlugosc = filesize('../dane/dane3.txt'); 4.6 Badanie daty ostatniej modyfikacji pliku filemtime() Funkcja zwraca datę ostatniej modyfikacji pliku o podanej nazwie. Data ta jest zwracana w postaci ilości sekund jaka upłynęła od 1 stycznia 1970, 00:00:00 do chwili modyfikacji pliku. Można ją przetworzyć w postać czytelną dla człowieka za pomocą funkcji date().

4.7. Otwieranie pliku fopen() Jest to pierwsza z serii funkcji posługujących się tzw. uchwytem pliku zmienną typu zasób. fopen() tworzy taką zmienną w czasie otwierania pliku. Funkcje używające uchwytu pliku są z reguły zgodne ze swoimi odpowiednikami ze standardowej biblioteki języka C. Plik może zostać otwarty w jednym z 8 trybów, oto one wraz z krótkim opisem: r r+ w w+ a a+ x x+ tryb tylko do odczytu zapis/odczyt od początku istniejącego pliku tylko zapis, nowy plik, ewentualna stara zawartość pliku usunięta zapis/odczyt, nowy plik, ewentualna stara zawartość pliku usunięta zapis na końcu istniejącego pliku lub utworzenie nowego zapis/odczyt na końcu istniejącego pliku lub utworzenie nowego zapis tylko i wyłącznie do nowego pliku (FALSE jeżeli już istnieje) zapis/odczyt tylko i wyłącznie do nowego pliku (FALSE jeżeli już istnieje) if ($plik = fopen('../dane/dane3.txt', 'r')) { // robimy coś z plikiem fclose($plik); }

4.7. Zamykanie pliku fclose() Funkcja ta zamyka plik o podanym uchwycie (a więc plik otwarty uprzednio za pomocą fopen()). Czy należy zawsze zamykać pliki? W zasadzie niekoniecznie, ponieważ PHP samo zamyka wszystkie niezamknięte pliki w momencie zakończenia skryptu. Zamykanie plików zaraz po zakończeniu ich używania jest jednak dobrą praktyką, ponieważ zmniejsza zużycie zasobów serwera (przypominam o limicie przydziału pamięci dla skryptu). Poza tym zawartość niezamkniętego ręcznie pliku może być nieokreślona w przypadku anormalnego zakończenia skryptu. 4.8. Czytanie fragmentu pliku fread() Funkcja odczytuje fragment pliku od bieżącej pozycji i umieszcza go w łańcuchu tekstowym. Długość fragmentu jest podana w bajtach, znaki końca linii traktowane są jak wszystkie inne. $fragment = fread($plik, 47); // $fragment zawiera 47 bajtów z pliku W przypadku dojścia do końca pliku zostanie oczywiście mniej bajtów.' 4.9. Czytanie pojedynczego znaku fgetc() Funkcja jako swój wynik zwraca jeden znak odczytany z pliku.

$znak = fgetc($plik); W przypadku dojścia do końca pliku funkcja zwróci wartość logiczną FALSE. 4.10. Czytanie linii tekstu fgets() Jak łatwo się domyślić, ta funkcja służy do czytania z plików tekstowych. Wynikiem działania funkcji jest łańcuch tekstowy zawierający wczytaną z pliku linię. Linia jest czytana do momentu napotkania znaku końca linii, albo (opcjonalnie) po przeczytaniu maksymalnej podanej liczby znaków. Należy zwrócić uwagę na istotny fakt jeżeli czytanie zakończy się po napotkaniu znaku końca linii, to znak ten jest dołączony na końcu łańcucha, jeżeli natomiast w grę wejdzie iograniczenie ilości znaków, to znaku końca linii nie będzie. Podobnie może się wydarzyć, jeżeli ostatnia linia w pliku nie ma znaku końca linii (wtedy czytanie zatrzyma się na EOF). $linia = fgets($plik); // czytaj całą linię $linia = fgets($plik, 80); // czytaj linię, ale nie więcej niż 80 znaków 4.11. Czytanie linii z odrzuceniem tagów HTML i PHP fgetss() Ta z kolei funkcja działa bardzo podobnie do fgets() ale usuwa z ładowanego tekstu wszystkie tagi języka HTML i kod PHP. Opcjonalnie możemy podać, jakie tagi życzymy sobie zostawić. Najlepiej zilustrują to przykłady:

// czytanie linii tekstu z usunięciem kodu PHP i wszystkich znaczników HTML $linia = fgetss($plik); // tylko w PHP5, w PHP4 trzeba podać ograniczenie // to samo, ale z ograniczeniem długości linii $linia = fgetss($plik, 80); // z ograniczeniem długości, ale pozostaw proste formatowanie $linia = fgetss($plik, 80, '<b>,</b>,<i>,</i>,<u>,</u>,<br>'); Funkcja fgetss() może być szczególnie użyteczna, gdy jest używana do przetwarzania kodu HTML np. pobranego z innej strony internetowej. Jest to możliwe, gdyż fopen() pozwala na otworzenie jako pliku dowolnego zasobu dostępnego poprzez protokół HTTP. Więcej na ten temat w punkcie 4.14. 4.12. Zapis do pliku fwrite() W przypadku zapisu nie ma już tylu funkcji co przy odczycie, jest po prostu jedna funkcja zapisująca wskazany łańcuch tekstowy jako ciąg bajtów do pliku. Jest oczywiste, że w ten sposób można zapisać również linię tekstu, o ile na końcu łańcucha będzie znak końca linii. Funkcja pozwala też na opcjonalne ograniczenie długości zapisywanego łańcucha do określonej liczby bajtów.

// zapis bez ograniczenia $linia = "To jest pierwsza linia\n"; fwrite($plik, $linia); fwrite($plik, "To jest druga linia\n"); // z ograniczeniem fwrite($plik, "A to trzecia\n", 6); // uwaga, znak końca linii zostanie obcięty! 4.13. Poruszanie się po pliku funkcją fseek() Funkcja fseek() służy do zmiany aktualnego miejsca czytania i zapisu w pliku. Przy otwarciu pliku miejsce to automatycznie znajduje się na jego początku (w niektórych trybach otwarcia pliku na końcu, patrz punkt 4.7.). Funkcje czytające i zapisujące dane przesuwają to miejsce na koniec odczytanych lub zapisanych danych. Funkcja fseek() pozwala na ręczne manipulacje. Miejsce czytania i zapisywania (zwane też wskaźnikiem pliku) może zostać przesunięte w nowe położenie określone względem początku (SEEK_SET), końca (SEEK_END) lub aktualnego położenia (SEEK_CUR) w pliku. Należy pamiętać o tym, że fseek() może zachować się w różny sposób przy pracy z sieciowymi systemami plików, albo z plikami otwartymi poprzez protokół HTTP.

$plik = fopen('plik.txt','x+'); fwrite($plik, "Ala ma kota.\n ); A l a m a k o t a. \n fseek($plik, 2, SEEK_SET); A l a m a k o t a. \n fwrite($plik, "fred ma audi.\n"); A l f r e d m a a u d i. \n fseek($plik, -6, SEEK_END); A l f r e d m a a u d i. \n fwrite($plik, "tico turbo glx", 4); A l f r e d m a t i c o. \n

4.14. Strumienie HTTP jako pliki PHP umożliwia traktowanie zasobów dostępnych przez protokół HTTP jak zwykłych plików.należy jednak zwrócić uwagę na szereg ograniczeń. Pliki otwarte w ten sposób są tylko do odczytu, nie działa fseek() i większość funkcji podających atrybuty pliku. Głównym przeznaczeniem takich plików jest po prostu sekwencyjne odczytanie zawartości. Używanie strumieni HTTP jako plików jest możliwe jeżeli ustawiona jest zmienna konfiguracyjna allow_url_fopen. PHP obsługuje również strumienie zaszyfrowane (protokół HTTPS). Przykład wyświetla kod źródłowy strony otwartej jako plik. $plik = fopen('http://jakis.serwer.pl/stronka.html','r'); $tab1 = array('<','>',"\n"); $tab2 = array('<','>','<br>'); if ($plik) { while($linia = fgets($plik)) { $l2 = str_replace($tab1, $tab2, $linia); echo $l2; } }