System plików - Podstawy PHP

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

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

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Ćwiczenie: JavaScript Cookies (3x45 minut)

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

Pliki. Operacje na plikach w Pascalu

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

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Laboratorium 7 Blog: dodawanie i edycja wpisów

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

Autor: Joanna Karwowska

12. OPERACJE NA PLIKACH

Lekcja : Tablice + pętle

Trochę o plikach wsadowych (Windows)

Programowanie w językach

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

edycja szablonu za pomocą programu NVU

Leszek Stasiak Zastosowanie technologii LINQ w

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Strumienie, pliki. Sortowanie. Wyjątki.

Podstawy technologii WWW

Strumienie, pliki. Sortowanie. Wyjątki.

Programowanie w językach wysokiego poziomu

Technologia Flash cieszy się coraz większą popularnością. Liczba dostępnych

Smarty PHP. Leksykon kieszonkowy

5.2. Pierwsze kroki z bazami danych

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

Tutaj znajdziesz Odpowiedź na: Najczęściej Spotykane Problemy Najczęściej zadawane Pytania

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Od programowania wizualnego do tekstowego

PHP: bazy danych, SQL, AJAX i JSON

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

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

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Jak używać funkcji prostego udostępniania plików do udostępniania plików w systemie Windows XP

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

Celem tego projektu jest stworzenie

INSTRUKCJA obsługi certyfikatów

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

PCSHEMATIC AUTOMATION Instalacja aktualizacji baz aparatury

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

KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

Zespół Szkół Technicznych w Suwałkach. Pracownia Systemów Komputerowych. Ćwiczenie Nr 15 PRACA W TRYBIE MS-DOS. Opracował Sławomir Zieliński

Gdy z poziomu programu Delphi otworzysz folder pierwszy program, zauważysz tylko dwa pliki [rys.1]:

FARA INTENCJE ONLINE. Przewodnik dla użytkownika programu FARA. Włodzimierz Kessler SIGNUM-NET

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 2. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

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

Każdy popełnia błędy - Podstawy PHP

Ćwiczenie 22 Dynamiczne wczytywanie tekstu z pliku.txt

Wykład PASCAL - Pliki tekstowe

Zad. 6: Sterowanie robotem mobilnym

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

Microsoft Small Basic

Instrukcja instalacji PHP-Hypercachera Refresher Standard oraz PHP-Hypercachera Refresher GZIP na Twojej witrynie

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

Funkcje zawarte w bibliotece < io.h >

Zespół Szkół Technicznych w Suwałkach. Pracownia Systemów Komputerowych. Ćwiczenie Nr 25 ARCHITEKTURA SYSTEMU LINUX. Opracował Sławomir Zieliński

Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi)

Jako lokalizację, w której będzie kontynuowana praca w przyszłym roku szkolnym, warto wybrać tę, w której zgromadzonych jest więcej danych.

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

Odseparowanie kodu PHP i warstwy prezentacji od dawna było celem

Jak zainstalować szablon allegro?

Funkcje zawarte w bibliotece < io.h >

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu.

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

dr inż. Jarosław Forenc

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

Podstawy programowania w języku C++

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

Podstawy technologii WWW

Wprowadzenie do Doctrine ORM

Kurs walut. Specyfikacja projektu. Marek Zając

Podstawy i języki programowania

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

Instrukcja obsługi dla studenta

Przydziały (limity) pojemności dyskowej

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

BAZY DANYCH. Transakcje. opracowanie: Michał Lech

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Podstawowe wiadomości o systemach plików.

Modele danych walidacja widoki zorientowane na model

Podstawy JavaScript ćwiczenia

Pliki cookies. Jaki rodzaj Cookies jest używany? Podczas wizyty na tej stronie używane są następujące pliki Cookies:

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

Pomoc krok-po-kroku. Jak korzystać z Twinspace

Serwery Statefull i Stateless

Ćw. I. Środowisko sieciowe, połączenie internetowe, opcje internetowe

- 1 Laboratorium fotografii cyfrowej Foto Video Hennig

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

Laboratorium nr 4: Arytmetyka liczb zespolonych

Instrukcja obsługi programu PLOMP PLUS FM

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Instrukcja konfiguracji programu Fakt z modułem lanfakt

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Transkrypt:

Artykuł pobrano ze strony eioba.pl System plików - Podstawy PHP System plików Przez wcześniejsze rozdziały często przewijały się nam różne funkcje odczytu danych z dysku twardego. Przyszedł czas na zebranie informacji o nich oraz ich usystematyzowanie. Pierwszą rzeczą, o której należy pamiętać, jest wydajność. Wszelkie odwołania do systemu plików są dosyć powolne i często stanowią nawet wąskie gardło w szybkości naszego kodu. Dlatego powinieneś starać się wykonywać ich tak mało, jak tylko się da i buforować wyniki działania niektórych z nich, aby późniejszy kod mógł odwoływać się do nich. Odczyt danych Zanim zaczniemy, utwórz sobie plik plik.txt z jakąś długą zawartością (najlepiej w kilku linijkach). Zawartość pliku można odczytać w PHP na kilka sposobów. Oto pierwszy z nich, wywodzący się jeszcze z języka C: $f = fopen('plik.txt', 'r'); while(!feof($f)) echo fread($f, 1024); Każdy dostęp do pliku musi rozpocząć się od jego otwarcia. Zadaniem tym zajmuje się funkcja fopen(). Parametr r nakazuje otwarcie pliku do odczytu. Następnie w pętli pobieramy plik po kawałkach o wielkości jednego kilobajta. W ten sposób dane mogą być przetwarzane "równolegle" z odczytem. Funkcja feof() służy do sprawdzenia, czy osiągnęliśmy koniec pliku. Po zakończonej pracy nasze połączenie z plikiem trzeba zamknąć. Odpowiada za to fclose(). Uwaga! Zawsze zamykaj swoje pliki. Inaczej możesz zablokować innych użytkowników korzystających ze strony! Z powyższego kodu możemy wyrzucić pętlę i pobrać wszystko za jednym zamachem. Wystarczy tylko użyć funkcji filesize(), aby podała nam rozmiar pliku: $f = fopen('plik.txt', 'r'); echo fread($f, filesize('plik.txt')); Zwróćmy uwagę na jakość podanych przykładów. Zmień nazwę plików, do których się odwołujemy, na jakiś nieistniejący. Oba skrypty wtedy zgłupieją. Pierwszy zaleje nas niekończącą się falą ostrzeżeń, drugi zrobi ich "tylko" kilka (przyczyną jest brak pętli). Dlatego powinniśmy tak przygotować wszystko, abyśmy sami panowali nad komunikatami. Czas stworzyć prymitywną obsługę błędów. Wykorzystamy tutaj operator @, aby zagłuszyć funkcję fopen() i sprawdzić zwracany wynik. Powinna ona zwrócić nam połączenie z plikiem, tj. wartość typu Resource. Zobaczmy:

$f = @fopen('inny_plik.txt', 'r'); if(!is_resource($f)) echo fread($f, filesize('inny_plik.txt')); Uwaga! Jeśli skrypt odczytujący zacznie się dziwnie zachowywać, pierwszym krokiem powinno być tymczasowe usunięcie operatora @ - inaczej nigdy nie dowiesz się, co jest przyczyną problemów! Porada W celu uproszczenia twojego kodu możesz napisać sobie własny wariant funkcji fopen() posiadający twoją obsługę błędów. Uprości to zarządzanie kodem projektu. Od PHP 4.3.0 nie trzeba już rozpisywać się, aby wczytać zawartość pojedynczego pliku. Cała czynność jest zautomatyzowana w funkcji file_get_contents(). Aby tu sprawdzić poprawność otwarcia, wystarczy porównać zwrócony wynik z wartością false, która jest zwracana w przypadku błędu: $tresc = @file_get_contents('plik.txt'); if($tresc === false) echo $tresc; Pisząc księgę gości, poznaliśmy funkcję file(), która zwracaną zawartość rozbijała od razu na tablicę poszczególnych linijek. Dzięki tej właściwości wyświetlimy plik jako listę wypunktowaną HTML bez większych trudności: $tresc = @file('plik.txt'); if($tresc === false) echo '<ul>'; foreach($tresc as $linia) echo '<li>'.$linia.'</li>'; echo '</ul>';

Pamiętaj, że file() nie gubi znaków końca linii - te są nadal zapisane w poszczególnych linijkach. Dlatego gdy będziesz chciał z powrotem połączyć wszystko w całość, powinieneś napisać implode('', $tresc); zamiast np. implode("\n", $tresc); Pod żadnym pozorem nie odczytuj plików w ten sposób: implode('', file('plik.txt')); Sens takiego kodu można streścić w prostym porównaniu: pakować się tylko po to, by się natychmiast rozpakować. Nie służy to niczemu, a konsumuje niezbędny czas. Aby przekonać się, jak mało wydajne jest takie rozwiązanie, spróbuj załadować tak plik tekstowy o wielkości megabajta, następnie powtórz to samo z wykorzystaniem file_get_contents() i porównaj wrażenia. Jeżeli pragniesz odczytywać pliki binarne, otwieraj je z parametrem rb zamiast r. Zapis danych Zapis danych wygląda analogicznie do odczytu. Różne jest tylko miejsce docelowe danych. Sposób pierwszy polega na otwarciu pliku funkcją fopen() i skorzystaniu z fwrite() do dodania nowej zawartości. Plik otwieramy z parametrem w (nadpisujemy starą zawartość) lub a (dopisujemy coś do pliku). W przypadku operowania danymi binarnymi, dodajemy jeszcze literę b. $f = fopen('./plik.txt', 'w'); fwrite($f, 'To jest nowa zawartosc pliku'); Po uruchomieniu tego skryptu w plik.txt powinna pojawić nam się nowa zawartość. W przypadku pracy na systemie Linux/Unix sprawdź, czy PHP ma uprawnienia do edycji plików w twoim katalogu roboczym. W PHP 5.0.0 pojawiła się funkcja file_put_contents(), która upraszcza całą sprawę. Zwraca ona liczbę zapisanych do pliku bajtów i możemy wykorzystać to do kontroli, czy operacja dopisywania faktycznie się udała. Funkcja pobiera dwa parametry: nazwę pliku oraz tekst do wpisania i "firmowo" nie zniekształca danych binarnych. if(file_put_contents('./plik.txt', 'To jest nowa zawartosc pliku')!= ) echo 'Udalo sie zapisac nowa zawartosc do pliku.'; Zadajmy sobie pytanie, co jeśli musimy dopisać dodatkową treść. Naturalnie file_put_contents() także to potrafi. Trzeba tylko skorzystać z trzeciego parametru, w którym możemy ustawiać flagi. FILE_APPEND jest tym, czego potrzebujemy.

if(file_put_contents('./plik.txt', ' dopisana tresc', FILE_APPEND)!= ) echo 'Udało się dodać zawartość do pliku.'; Ten skrypt będzie już dopisywać dane do pliku, zamiast je nadpisywać. Informacje o plikach W wielu przypadkach przydaje się wiedza o tym, co w zasadzie w katalogach mamy. Możemy ją uzyskać, korzystając z rodziny funkcji udostępniających nam różne informacje o plikach. Wszystkie przyjmują za parametr nazwę pliku: is_file() - zwraca true, jeśli obiekt jest plikiem. is_dir() - zwraca true, jeśli obiekt jest katalogiem. is_readable() - zwraca true, jeśli posiadamy prawa do odczytu zawartości obiektu. is_writeable() - zwraca true, jeśli posiadamy prawa do zapisu do obiektu. file_exists() - zwraca true, jeśli plik/katalog istnieje. fowner() - zwraca ID właściciela pliku. fgroup() - zwraca ID grupy, do której plik należy. fperms() - zwraca uprawnienia pliku. filesize() - zwraca wielkość pliku. filemtile() - zwraca czas ostatniej modyfikacji pliku lub false, jeśli nie istnieje. Przy korzystaniu z nich musimy pamiętać o wydajności. Odczyt wszelkich danych z dysku jest dość powolny, dlatego starajmy się jak najwięcej wycisnąć z pojedynczego wywołania funkcji. Oto przykład: załóżmy, że mamy plik A.txt i na jego podstawie generujemy B.txt zawsze, kiedy ulegnie on zmianie (taki kompilator). Musimy zatem napisać mechanizm sprawdzający, czy można uruchomić kompilację, czy też jest ona zbędna. if(!file_exists('a.txt')) die('plik A.txt nie istnieje!'); if(file_exists('b.txt')) if(filemtime('b.txt')!= filemtime('a.txt')) echo 'Plik A.txt wymaga kompilacji.'; echo 'Można czytać z pliku B.txt'; echo 'Plik A.txt wymaga kompilacji'; Pozornie wszystko wygląda na poprawne - skrypt prawidłowo raportuje wszystkie sprawy. Jednak robi to zbyt

wolno, gdyż przeciążyliśmy go dużą ilością odwołań do dysku twardego. Jeżeli uruchomimy go na witrynie z dużym ruchem, osiągnąłby gorsze wyniki wydajności, niż inne skrypty. Spróbujmy go nieco zmodyfikować. Czy naprawdę potrzebujemy funkcji file_exists()? Okazuje się, że nie. Przecież filemtime() zwróci nam false, jeżeli plik nie będzie istniał i możemy to wykorzystać. Oto poprawiony kod skryptu: $czasa = @filemtime('a.txt'); if($czasa === false) die('plik A.txt nie istnieje!'); $czasb = @filemtime('b.txt'); if($czasb!== false) if($czasb!= $czasa) echo 'Plik A.txt wymaga kompilacji.'; echo 'Można czytać z pliku B.txt'; echo 'Plik A.txt wymaga kompilacji'; Zauważmy, w tym przypadku mamy tylko dwa odwołania do dysku, a jeśli plik A.txt nie będzie istnieć, to nawet jedno! Zamiast wykonywania za każdym razem setek nowych funkcji, wykorzystujemy maksymalnie te dane, które już mamy. To jest właściwa filozofia przy pracy z plikami. Zakończenie Plikom poświęciliśmy naprawdę bardzo duży rozdział. Jednak mało która aplikacja PHP wykorzystuje je jako główne źródło danych dla internauty. Znacznie poważniejszym i mającym większe możliwości narzędziem są bazy danych. Zagadnienie to jest omówione w następnej części podręcznika. Czy jednak pliki należy w takim razie wyrzucić? Nie, ze względu na wydajność. Wbrew pozorom, odczyt rekordów z bazy zazwyczaj jest wolniejszy, niż z pliku i w przypadku elementarnych ustawień aplikacji, które nie wymagają złożonego sortowania oraz stosowania rozbudowanych relacji (np. konfiguracja, dane systemowe), można pokusić się o zastąpienie ich plikami. Treść pochodzi ze strony WikiBooks i jest udostępniana na licencji GNU FDL Autor: WikiBooks Artykuł pobrano ze strony eioba.pl