KURS PHP, Informatyka


KURS PHP

  • Składnia języka

    1. Typy zmiennych

    2. Zmienne predefiniowane

    3. Stałe

    4. Instrukcje warunkowe

    5. Pętle

    6. Instrukcja switch

    7. Instrukcje break i continue

    8. Funkcje

    9. Ciasteczka - ( cookie )

    10. Obsługa plików

    11. PHP a bazy danych

    12. Wysyłanie poczty w PHP

    13. Bezpieczeństwo w PHP

    0x01 graphic

    Co to jest PHP ?

    PHP jest jednym z wielu języków programowania, które umożliwiają szybkie tworzenie dynamicznych stron internetowych. Oficjalna nazwa PHP to " PHP: Hypertext Preprocessor " a sam skrót pochodzi od Personal Home Page. Składnią język ten zbliżony jest do C. PHP zostało napisane przez Rasmusa Lerdorfa, w celu poprawienia funkcjonalności własnej strony internetowej. Jego "twór" został spisany przez programistów z całego świata i tak powstał PHP3 a później PHP4 z nowym mechanizmem ( engine ) Zend. PHP został stworzony w celu pracy z WWW i dlatego jest pełnowartościowym językiem programowania umożliwiającym tworzenie aplikacji internetowych. Współpracuje z wieloma bazami danych np. MySQL oraz z usługami sieciowymi np. IMAP, POP3, czy HTTP. PHP może być instalowane na różnych platformach. Rozprowadzane jest głównie w postaci kodu źródłowego dzięki czemu może być skompilowane na wielu platformach np. Linuksie, FreeBSD lub Windows. Może pracować jako program CGI, bądz być zaistalowanym jako moduł APACHE. Może działać z każdym (?) serverem WWW

    0x01 graphic

    0x01 graphic

    Instalacja PHP

    Oczywistym jest, że instalację należy zacząć od pobrania dystrybucji PHP. Można ją pobrać z witryny www.php.net. Mamy możliwość pobrania kilka rodzajów pakietu. Najlepszy będzie kod źródłowy ale dla mniej zainteresowanych lub leniwych polecam binarną wersję pod Windows.
    Instalowanie wersji binarnej dla Windows nie nastręcza trudności. Osobiście polecam program "KRASNAL", który zawiera m.in. serwer APACHE, MySQL oraz PHP.

    Kompilacja PHP

    Kompilacja kodu w systemach Unixowych jest do siebie podobna - niezależnie jakiego systemu używamy np. Linux, Solaris. Należy pamiętać, że PHP można zainstalować na kilka sposobów. Jeżeli serwerem WWW jest APACHE, wówczas można skompilować PHP jako plik wykonywalny, moduł ładowany dynamicznie lub jako bibliotekę. Poniżej zostanie przedstawiona instalacja PHP jako modułu ładowanego dynamicznie.
    Po pobraniu odpowiedniego pakietu i rozpakowaniu go należy tak skompilować APACHE by obsługiwał dynamiczne moduły:

    cd <sciezka_apache>
    make clean
    ./configure --enable-module=so --enable-rule=SHARED_CORE --prefix=/www
    make
    make install

    Po odpowiednim przygotowaniu APACHE należy skompilować PHP w następujący sposób:

    cd <sciezka_do_php>
    make clean
    rm config.cache
    ./configure --with-apxs=/www/bin/apxs (pozostałe opcje konfiguracji)
    make
    make install

    Polecenia "make clean" i "rm config.cache" służą do usunięcia poprzedniej instalacji. Jeśli instalacja jest pierwszą nie trzeba ich używać. Ważną informacją szczególnie dla osób, które jeszcze nie przeprowadzali takiego procesu tj. kompilacji, jest to, że skrypt konfiguracyjny poszukuje w systemie narzędzi, plików i innych danych systemowych potrzebnych do przeprowadzenia kompilacji. Na podstawie tych danych tworzy skrypt kompilujący kod. Może się zdarzyć, że nie będzie wszystkich wymaganych parametrów do przeprowadznia instalacji.
    W wyniku procesu kompilacji zostanie stworzony m.in. plik wykonywalny php. Aby sprawdzić poprawność wykonanej kompilacji należy wpisać

    php < /dev/null

    Wynik postacią zbliżony do :

    X-Powered-By PHP/4.0.2
    Content-type text/html

    oznacza prawidłowo zakończoną kompilację.

    Konfiguracja

    Sposób konfiguracji PHP jest niezależny od platformy, na której działa. Sprowadza się do modyfikacji pliku php.ini. Osoby nie znające opcji konfiguracji mogą skorzystać z plików dołączonych w pakiecie instalacyjnym: php.ini-optimized oraz php.ini-dist. Wystarczy zmienić nazwę któregoś pliku na php.ini i zgrać do odpowiedniego katalogu. Dla Windows jest to C:\Windows a dla Unix najczęściej /usr/local/lib .



    Przykładowe opcje konfiguracji

    Opcji konfiguracji PHP jest bardzo dużo. Wszystkie są dostępne w witrynie www.php.net.

    0x01 graphic

    0x01 graphic

    Składnia języka

    PHP jest najczęściej wbudowany w kod HTML dlatego istnieją znaczniki tworzące bloki PHP:

    <? echo "Witaj świecie"; ?> -działa tylko z ustawioną opcją short_tag_open w pliku php.ini

    <?php echo "Witaj świecie"; ?> - wykorzystanie pełnych znaczników

    <script language="php"> echo "Witaj świecie"; </script> - dla edytorów HTML nie obsługujących instrukcji przetwarzania

    <% echo "Witaj świecie"; %> - działa tylko z ustawioną opcją asp_tags

    Składnią PHP jest zbliżony do języka C. Instrukcje są oddzielane średnikiem.

    Komentarze

    W PHP stosujemy komentarze takie jak w języku C lub C++ oraz te używane w skryptach Unixa. Komentarze jednoliniowe komentują do końca lini lub do końca bierzącego bloku PHP (w zależności co nastąpi pierwsze). Podobnie jak w C nie można zagnieżdżać wielowierszowych komentarzy.

    <?php
    print("Witaj świecie <br>"); // Komentarz jednowierszowy w stylu C++
    ?>

    <?php
    /* To jest komentarz
    wielowierszowy */
    print("Witaj świecie <br>");
    ?>

    <?php
    print("Witaj świecie <br>"); # A to komentarz w stylu Unixa
    ?>

    <?php
    /*
    echo "Witaj świecie"; /* Przykład zagnieżdżenia komentarza i spowodowania tym samym błędu */
    */
    ?>

    Typy zmiennych w PHP

    W PHP wyróżniamy następujące typy: liczby całkowite, zmiennoprzecinkowe, ciągi, tablice i objekty. Typ zmiennej nie jest jawnie ustalany przez programistę lecz zależy od kontekstu użycia zmiennej. W celu poprawnego zarządzania typami PHP posiada funkcje gettype() settype() is_integer() is_array() itp.

    Liczby

    Liczby całkowite można przedstawiać w różnych notacjach: dziesiętnej, ósemkowej i szesnastkowej. Liczby zmiennoprzecinkowe można przedstawiać jako notacja zwykła lub zapis naukowy:

    <?php
    $zmienna1=100; // Liczba dziesiętna
    $zmienna2=-100; // Liczba ujemna
    $zmienna3=01013; // Liczba 523 w zapisie ósemkowym
    $zmienna4=0x20B; // Liczba 523 w zapisie szesnastkowym
    $zmienna5=100.100; // Zapis zwykły liczby zmiennoprzecinkowej
    $zmienna6=10.0100e2; // Notacja naukowa liczby zmiennoprzecinkowej
    ?>

    Ciągi

    Ciągi w PHP ograniczamy cudzysłowami ( " ) lub apostrofami ( ' ). Zapis wpływa na sposób interpretacji ciągu. Gdy zastosujemy cudzysłowy zmienne zawarte pomiędzy nimi zostaną zamienione na ich wartości. Przy zastosowaniu apostrofów zmienne nie są zamieniane.

    Znaki specjalne w ciągach zamkniętych cudzysłowami

    Sekwencja znaków

    Znaczenie

    \n

    nowa linia

    \r

    powrót karetki CR

    \t

    tabulacja

    \

    lewy ukośnik

    \"

    cudzysłów

    \$

    znak dolara


    W PHP ciągi można łączyć ze sobą. Służy do tego kropka ( . ) Podobnie jak w języku C mamy dostęp do każdego znaku ciągu, który traktujemy jako tablicę znaków.

    <?php
    $ciag="To jest przykład ciągu";
    $ciag1="A to inny przykład";

    /* Wypisanie ciągów */

    print("$ciag"); // Wypisze -> To jest przykład ciągu
    print("\"); // Wypisze -> $ciag
    print("\' $ciag1 \'"); // Wypisze -> $ciag1

    /* Łączenie ciągów */

    $zmienna1="PHP";
    $zmienna2=" kurs";
    $zmienna3=$zmienna1.$zmienna2;
    print("$zmienna3"); // Wypisze -> PHP kurs
    ?>

    Tablice

    W PHP występują tablice indeksowane (wektory) oraz asocjacyjne. Można również tworzyć tablice wielowymiarowe. Dzięki konstrukcji tablic można jeden wymiar tablicy indeksować liczbą a inny asocjacyjnie. Tablice możemy tworzyć przy pomocy funkcji list() lub array() oraz poprzez jawne przypisanie wartości.

    Przykład inicjowania i wykorzystania tablic:

    <?php
    */ Tworzenie prostej tablicy */
    $a[0]="Kurs";
    $a[1]="php";
    $a[]="w skryptotece"; // Jawne przypisanie do indeksu 2
    $a[]="www.skryptoteka.pl"; //Jawne przypisanie do indeksu 4

    /* Tworzenie tablicy asocjacyjnej */

    $kierunkowy["Łódź"]="0-42";
    $kierunkowy["Warszawa"]="0-22";
    $kierunkowy["Piotrków"]="0-44";

    /* Tworzenie tablicy asocjacyjnej przy pomocy funkcji array() */

    $kierunkowy=array("Łódź"=>"0-42","Warszawa"=>"0-22","Piotrków"=>"0-44");

    /* Tworzenie tablicy wielowymiarowej */

    $maciez=[0][0]="wartosc";
    $zmienna["Wydział"]["Kierunek"]="Informatyka"; // Tworzona asocjacyjnie
    $zmienna_a[1]["indeks"]="PHP"; // Indeksowanie liczbowe z asocjacyjnym
    ?>

    Zmienne w PHP są poprzedzane znakiem $, po którym następuje nazwa zmiennej. Nazwa zmiennej musi zaczynać się od litery bądź znaku podkreślenia. W nazwie dopuszczone są litery a-z, A-Z, 0-9 oraz znaki ASCII z zakresu 127-255. Wartości do zmiennych mogą być przypisywane przez samą wartość lub poprzez referencję. Aby przypisać poprzez referencję należy nazwę zmiennej poprzedzić znakiem &. W przypadku przypisania przez wartość zmienne pozostają niezależne, zmiana wartości jednej zmiennej nie ma wpływu na wartość drugiej. W przypadku przypisania przez referencję zmienne skojarzone są ze sobą zależne i zmiana wartości jednej zmiennej wpływa na wartość skojarzonej z nią zmiennej. Wielkość liter jest istotna w nazwie zmiennej tj. $Nazwa i $nazwa to dwie różne zmienne.

    <?php
    $_zmienna="Skryptoteka";
    $zmienna=$_zmienna; //Przypisanie poprzez wartość
    print("$_zmienna $zmienna"); // Wypisze -> Skryptoteka Skryptoteka
    $_zmienna="www.skryptoteka.pl";
    print("$_zmienna $zmienna"); // Wypisze -> www.skryptoteka.pl Skryptoteka

    /* Przypisanie przez referencję */

    $_zmienna=&$zmienna;
    print("$_zmienna $zmienna"); // Wypisze -> Skryptoteka Skryptoteka
    $zmienna="120";
    print("$_zmienna $zmienna"); // Wypisze -> 120 120
    ?>

    Zmienne predefiniowane

    PHP oprócz zmiennych tworzonych przez użytkownika posiada szereg zmiennych tworzonych przez system. Zmienne te zależą od wielu czynników np. wersja PHP, serwera WWW. PHP tworzy także zmienne dla danych przesyłanych z formularza metodą POST, GET oraz zmienne plików cookies. Do obejrzenia wszystkich zmiennych służy funkcja phpinfo().

    Przykładowe zmienne predefiniowane

    Sekwencja znaków

    Znaczenie

    REMOTE_ADDR

    Adres IP oglądającego stronę

    SERVER_PROTOCOL

    Nazwa i wersja protokołu

    PHP_SELF

    Nazwa pliku z wykonywanym skryptem

    PHP_COOKIE_VARS

    Tablica asocjacyjna zmiennych cookie

    PHP_GET_VARS

    Tablica asocjacyjna zmiennych GET

    PHP_POST_VARS

    Tablica asocjacyjna zmiennych POST

    REMOTE_PORT

    Port WWW klienta


    Wszystkie zmienne predefiniowane są opisane w manualu PHP

    Stałe

    W PHP można definiować stałe. Używa się do tego funkcji define()

    <?php

    define("nazwastalej","jejwartosc");
    define("Ulica","Warszawska");
    print(Ulica); // wypisze -> Warszawska

    ?>

    PHP posiada dodatkowo kilka stałych predefiniowanych.

    Instrukcje warunkowe - if, else, elseif

    Instrukcja if służy do organizacji sterowania poprzez tworzenie warunków na podstawie wyrażeń logicznych.

    <?php

    if(1<2)
    {
    echo "Warunek if został spełniony";
    }
    else
    {
    echo "Wypisze jeśli warunek if nie został spełniony";
    }

    $kolor="czerwony";
    if($kolor=="zielony")
    {
    echo "Warunek if został spełniony";
    }
    elseif($kolor=="żółty")
    {
    echo "Wypisze jeśli warunek elseif został spełniony";
    }
    else
    {
    echo "Wypisze jeśli warunek else został spełniony";
    }

    ?>

    Pętle

    W PHP wyróżniamy cztery pętle. Ich działanie jest podobne do pętli języka C i innych języków wysokiego poziomu.

    <?php

    // Pętla while

    $warunek=0;
    while($warunek<10)
    {
    echo "$warunek"; $warunek++;
    }

    // Pętla do..while

    $warunek=0;
    do
    {
    echo "$warunek"; $warunek++;
    }
    while($warunek<10)

    ?>

    Pętle while i do..while są zasadą działania do siebie podobne. Obie wykonują się do czasu gdy ich warunek jest spełniony tj. dopóki ($warunek<10) jest prawdą. Jedyną różnicą pomiędzy nimi jest to, że jeśli warunek ($warunek<10) nie jest spełniny już na samym początku pętla while nie wykona się ani razu natomiast pętla do..while wykona się dokładnie raz. W pierwszym przypadku warunek pętli jest sprawdzany na początku, w drugim na końcu.

    <?php

    // Pętla for

    for($index=0;$index<10;$index++)
    {
    echo "$index";
    }

    ?>

    Pętla for jest najbardziej złożoną pętlą PHP. Składnią jest taka sama jak w języku C.

    for(wyrażenie1;wyrażenie2;wyrażenie3)  { instrukcje }

    Wyrażenie1 jest sprawdzane raz na początku wykonywania pętli. Wyrażenie2 jest obliczane przy każdorazowym przejściu pętli i pętla jest wykonywana do czasu gdy wyrażenie2 jest równe TRUE tzn. dopóki jest spełnione. Wyrażenie3 jest sprawdzane przy każdym przejściu pętli. Każde z tych wyrażeń może zostać opuszczone. Jeżeli opuści się wyrażenie2 to jego wartość zawsze będzie TRUE.

    <?php

    // Przykład opuszczenia wyrażenia pętli for

    for(;$index<10;$index++)
    {
    echo "$index";
    }

    ?>

    Ostatnią pętlą PHP jest foreach która umożliwia wygodne przeglądanie tablic. Posiada dwie postacie:

    foreach(tablica as wartosc) { instrukcje }
    foreach(tablica as klucz => wartosc) { instrukcje }

    Pierwsza postać pętli przelatuje przez tablicę i w każdym przebiegu wartość bieżącej komórki zapisywana jest w zmiennej wartosc. Druga postać pętli wykonuje to samo dodatkowo zapisując bieżący klucz komórki do zmiennej klucz.

    Instrukcja switch

    Instrukcja switch jest uproszczeniem wielokrotnych warunków if..elseif..else. Składnia i implemantacja tej funkcji jest taka sama jak w C. Ważną zasadą jest stosowanie instrukcji break().

    <?php

    $kolor="red";
    switch($kolor)
    {
    case "green": { print("#00FF00");break; }
    case "blue": { print("#0000FF");break; }
    case "red": { print("#FF0000");break; }
    default: { print("Nie znaleziono podanego koloru");break; }
    }

    ?>

    Instrukcja break powoduje zatrzymanie wykonywania switcha. Pominięcie jej spowoduje wykonanie warunku prawidłowego oraz wszystkich pozostałych będących w hierarchii poniżej.

    Instrukcje break i continue

    Obie instrukcje znane z C pozwalają na sterowanie pętlami. Obie pozwalają na podanie wartości liczbowej jako parametru mówiącego ile zagnieżdżonych pętli należy przerwać lub rozpocząć ich wykonywanie od początku. Instrukcja break kończy wykonywanie bieżącej konstrukcji, np. pętli lub switch. Instrukcja continue jest używana tylko w pętlach. Jej wywołanie powoduje opuszczenie pozostałych instrukcji pętli i rozpoczęcie nowej iteracji.

    Funkcje

    W PHP można tworzyć własne funkcje. Nie muszą być wcześniej deklarowane (PHP4). Funkcja w PHP może posiadać następujące cechy: zmienną liczbę argumentów, argumenty domyślne, argumenty przekazywane przez referencję. W ciele funkcji mogą być wykonywane dowolne funkcje, jedna fukcja może wywoływać inną czyli dozwolona jest rekurencja. Domyślnie zmienna jest przekazywana do funkcji poprzez wartość. Aby przekazać poprzez referencję należy nazwę zmiennej poprzedzić znakiem &. Argumenty domyślne muszą być umieszczone po argumntach obowiązkowych.

    <?php

    //Zdefiniowanie własnej funkcji
    function suma($a,$b)
    {
    return$a+$b;
    }
    $wynik=suma(2,3); //Wywołanie funkcji

    //Przekazanie wartości poprzez referencję
    function dodaj(&$a)
    {
    $a++;
    return $a;
    }

    ?>

    0x01 graphic

    0x01 graphic

    COOKIES

    COOKIE to mały plik mogący zawierać dowolną informację. Plik ten jest zapisywany nie na serwerze a na komputerze klienta. PHP posiada jedną funkcję do tworzenia ciasteczek - setcookie. Funkcja setcookie musi być wywołana przez wysłaniem jakichkolwiek danych do przeglądarki (chyba, że zastosuje się buforowanie).

    setcookie("nazwa","wartość","czaswygaśnięcia","ścieżka","domena","tryb");

    Wszystkie wartości oprócz nazwy są opcjonalne. Wywołanie setcookie tylko z nazwą spowoduje usunięcie ciasteczka o podanej nazwie. Czaswygaśnięcia jest standardowym czasem Unixa, który można uzystać poprzez działanie funkcji mktime(). Parametr tryb informuje czy ciasteczko ma być wysłane połączeniem bezpiecznym HTTPS. Przyjmuje wartości 0 lub 1.

    <?php

    //Ustawienie ciasteczka
    setcookie("imie","Tomek");

    //Ustawienie ciasteczka wygasającego po dwóch tygodniach
    setcookie("data","2004-02-04",time()+60*60*24*14);

    ?>

    Przy obsłudze cookie należy pamiętać o trzech istotnych sprawach:

    Ustawione ciasteczko jest dostępne w skrypcie jako zmienna PHP.

    0x01 graphic

    0x01 graphic

    Obsługa plików

    PHP jak większość języków programowania umożliwia obsługę plików. Można je tworzyć, modyfikować,zapisywać lub odczytywać. PHP udostępnia funkcje do obsługi plików podobne jak w C, podobnie używa uchwytów do plików. Obsługę plików należy wykorzystywać "z głową" by nie spowodować luki w bezpieczeństwie systemu. Do tworzenia uchwytów plików używamy m.in. funkcji fopen

    fopen("nazwa","mode")

    Parametr nazwa może przyjmować cztery wartości: "http://" - zostanie zwrócony wskaźnik pliku odpowiedzi, "ftp://" - zostanie nawiązane połączenie ftp i zwrócony wskaźnik do podanego pliku, "php://stdin" (lub "php://stdout", lub "php://stderr") - zostanie otwarty standardowy strumień. Jeśli nazwa będzie zaczynała się inaczej niż powyższe przykłady zostanie otwarty plik z systemu plików, o podanym adresie. Każdy plik należy zamknąć. Używa się do tego funkcji fclose(nazwauchwytu). Parametr mode może przyjmować wartości:

    Tryby otwierania plików

    Tryb

    Znaczenie

    r

    Tylko do odczytu

    r+

    Do odczytu i zapisu

    w

    Tylko do zapisu. Tworzy nowy plik lub kasuje stary jeśli istnieje

    w+

    Do odczytu i zapisu.Tworzy nowy plik lub kasuje stary jeśli istnieje

    a

    Tylko do zapisu. Nie kasuje istniejącego pliku lecz dopisuje na jego końcu

    a+

    Do odczytu i zapisu. Nie kasuje istniejącego pliku lecz dopisuje na jego końcu


    Do pobierania wartości z pliku służy funkcja fgets($uchwytpliku,$liczba) gdzie $liczba jest ilością znaków-1 jaką chcemy pobrać z pliku. Funkcja ta kończy wykonywanie jeśli pobierze ilość znaków-1, napotka znak końca lini lub znak końca pliku. Do wpisywania danych do pliku służy funkcja fputs($uchwytpliku,$ciąg) gdzie $ciąg jest ciągiem, który chcemy wpisać do pliku. Parametr mode może przyjąć jeszcze jedną wartość b, która otwiera plik binarny. Jednak działa to tylko w systemach, które rozróżniają tryby binarny i tekstowy. Czyli w Unixach i tak nie zadziała.

    <?php

    // Otwarcie pliku poprzez HTTP
    $plik=fopen("http://adres.pl/index.php","r");
    $ciag=fgets($plik,100); //Pobieranie z pliku 99 znaków
    echo "$ciag";
    fclose($plik);

    // Otwarcie pliku poprzez FTP
    $plik=fopen("ftp://user:haslo@adres_ftp","w");

    //Otwarcie zwykłego pliku z systemu plików
    $plik=fopen("/home/users/nick/plik.cc","r+");
    fputs($plik,"Ala ma kota"); // Wpisywanie do pliku podanego ciągu
    fclose($plik); // Zamykanie pliku

    ?>

    0x01 graphic

    0x01 graphic

    Obsługa baz danych w PHP na przykładzie MySQL

    PHP jak wiele języków programowania umożliwia współpracę z bazami danych. Posiada bardzo wiele mechanizmów obsługi baz, np. indeksowanie, relacje, obsługa transakcji. PHP obsługuje bazy danych poprzez zestaw różnych funkcji. Każda baza posiada swój zestaw np. dla bazy MySQL funkcje zaczynają się od mysql_. Pomimo, że każda baza posiada własny zestaw funkcji, dostęp do nich z poziomu PHP polega na tym samym. Poniżej prezentuję schemat obsługi bazy według Blake Schwendimana:

    <?php

    połącz_z_bazą();
    wybierz_bazę();
    wyślij_zapytanie();
    pobierz_wyniki();
    while(isnieje_wiersz)
      pobierz_wiersz();
    zamknij_połączenie();

    ?>

    Tak pokrótce wygląda schemat obsłużenia bazy danych. Aby jednak rozpocząć zabawę z bazami należy najpierw zainstalować jakąś. W niniejszym kursie zostanie przedstawiona baza MySQL. Jej wersję możemy pobrać z www.mysql.com. Mamy możliwość pobrania trzech rodzajów pakietów. Wersji binarnej dla Windows, źródła lub plik RPM. PHP ma wbudowaną obsługę MySQL więc nie trzeba specjanie kompilować języka. Po zainstalowaniu odpowiedniego pakietu można zacząć pracę z bazą danych.

    <?php

    $polaczenie=mysql_connect("host","uzytkownik","haslobazy"); /* Nawiązanie połączenia z bazą */

    mysql_select_db("bazadanych",$polaczenie); /* Wybranie odpowiedniej bazy danych */

    $sql="SELECT imie,nazwisko FROM dane_pracownika";

    $wynik=mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */

    while($linia=mysql_fetch_array($wynik)) /* Pętla dopóki istnieją dane */

    echo "$linia["imie"] $linia["nazwisko"]";

    mysql_close($polaczenie);

    ?>

    Powyższy kod powinien prawidłowo połączyć się z bazą danych, wybrać odpowiednią bazę, następnie wysłać do niej zapytanie sql o imię i nazwisko i ostatecznie wyświetlić wszystkie linie z wyniku zapytania i zamknąć połączenie. W zapytaniu sql można stosować dowolne zapytania np. select, insert, update itp. PHP posiada bardzo dużo funkcji do obsługi bazy MySQL, opis wszystkich znajduje sie w manualu PHP. Poniżej prezentuję kilka przydatnych funkcji w codziennej pracy:

    mysql_num_rows($wynik_zapytania) - zwraca ilość wierszy zwróconych przez zapytanie

    mysql_num_fields($wynik_zapytania) - zwraca ilość pól zwróconych przez zapytanie

    mysql_list_dbs($polaczenie) - zwraca wszystkie nazwy baz znajdujących się na serwerze

    mysql_connect(host,uzytkownik,hasło) - połączenie z bazą danych

    mysql_query($zapytanie) - wykonanie zapytania do bazy danych

    0x01 graphic

    0x01 graphic

    Wysyłanie poczty w PHP

    Wysłanie poczty z poziomu PHP jest bardzo prostym zadaniem. Język ten posiada jedną funkcję wysyłającą maile. Jest to:

    mail(do_kogo,temat,treść,dodatkowe_nagłówki)

    Pierwsze trzy argumenty funkcji mail są jasne. Dodatkowe_nagłówki muszą być zawsze na końcu i zawsze oddzielone nową linią. Przykład wysłania maila z dodatkowymi nagłówkami:

    <?php

    $adres="noone@wp.pl";
    $temat="Mój temat maila";
    $tresc="Cześć ! Właśnie czytam o PHP. A ty co robisz ?";

    /* Dodatkowe nagłówki */

    $nagłówek="From: Somebody <somebody@wp.pl> "; // Od kogo
    $nagłówek.="Reply-To: Somebody <somebody@wp.pl> "; // Adres zwrotny
    $nagłówek.="X-Mailer: PHP "; // Klient poczty
    $nagłówek.="X-Priority: 1 "; // Priorytet wiadomości
    $nagłówek.="Return-Path: <somebody@wp.pl> "; // Adres zwrotny dla błędów

    mail($adres,$temat,$tresc,$nagłówek); // Wysłanie maila

    ?>

    W nagłówku możemy umieścić także typ MIME

    0x01 graphic

    0x01 graphic

    Bezpieczeństwo w PHP

    Aby można było mówić o bezpieczeństwie w sieci należy zacząć od samej transmisji danych. Protokół TCP/IP nie posiada wbudowanych funkcji szyfrujących. Także HTTP, korzystający z TCP/IP nie zapewnia bezpieczeństwa danych. Wszystkie strony internetowe oraz dane są przesyłane w sposób jawny i narażone tym samym na śledzenie i przechwytywanie. Aby takiej sytuacji zapobiec stosuje się metody kryptograficzne. Często w celu stworzenia bezpiecznego połączenia pomiędzy komputerami stosuje się protokół SSL, który zapewnia szyfrowanie na zadowalającym poziomie. Szyfrowanie przebiega z zastosowaniem klucza prywatnego i publicznego.
    Istotną sprawą jeśli chodzi o bezpieczeństwo jest ukrywanie kodu. Jeśli potencjalny włamywacz nie wie co skrypt robi, jaka jest architektura naszej bazy danych, może tylko zgadywać. Co może być czasochłonne i bezcelowe. Jeśli serwery WWW i PHP pracują prawidłowo nie ma możliwości podejrzenia kodu PHP strony poprzez stronę internetową. Co jednak gdy serwer PHP lub WWW będzie miał awarię ? Jeśli serwer WWW nieprawidłowo zainstaluje PHP to może zamiast wykonania skryptu wyświetlić jego kod. Należy zatem zadbać by pliki zawierające login i hasło do bazy danych nie były dostępne z poziomu serwera WWW a do skryptu dołączane poprzez funkcję include. Np:

    <?php

    include("../../../hasla.php");

    ?>

    Tak dołączony plik nie będzie dostępny z poziomu adresu URL w przypadku nieprawidłowego działania serwera WWW lub PHP. Można też do ochrony skryptu zastosować funkcję error_reporting(0). Przy takim ustawieniu nie zostanie wyświetlony żaden błąd w trakcie wykonania skryptu (jeśli taki zaistnieje) i potencjalny włamywacz nie pozna nazwy funkcji czy pliku jaki używamy.
    Inną istotną sprawą jest przesyłanie danych z formularzy. Można je przesyłać na dwa sposoby. Poprzez post i get. Odradza się stosowanie get ponieważ dane wysyłane tą metodą są jawnie dołączone do adresu URL. Np po wysłaniu swojego hasła z formularza poprzez get wyświetli się adres:

    http://212.191.65.5/skrypt.php?mojehaslo=haslo

    Osoba stojąca z boku bez problemu może dojrzeć nasze hasło. Tak samo należy pamiętać, że jeśli pobieramy od użytkownika hasło poprzez formularz, powinniśmy zastosować opcję password. Zapewnimy tym samym poufność wpisywanych danych ponieważ zamiast znaków hasła będą wyświetlały się ******.
    Aby zapewnić bezpieczeństwo skryptom należy zawsze inicjować zmienne oraz kożystać z talic $HTTP_COOKIE_VARS, $HTTP_POST_VARS, $HTTP_GET_VARS a nie globalnych zmiennych. Zabezpieczymy się przed ingerencją włamywacza poprzez inicjowanie zmiennych dzięki adresowi URL.

    Bardzo dużym i istotnym zagrożeniem jest wykonywanie poleceń systemowych z wykożystaniem zmiennych podanych przez użytkownika. Przykład: pobieramy od użytkownika jego nick (poprzez formularz). Następnie wykonujemy zapytanie do bazy danych:

    <?php

    $sql="SELECT haslo FROM tabela WHERE nick='$HTTP_POST_VARS['nick']'";
    mysql_query($sql);

    ?>

    Wszystko wydaje się być prawidłowe ale ... Co jeśli użytkownik poda jako swój nick ciąg
    '; DELETE FROM tabela;
    Nasze zapytanie do bazy będzie miało postać:

    <?php

    $sql="SELECT haslo FROM tabela WHERE nick='';DELETE FROM tabela";
    mysql_query($sql);

    ?>

    Powyższe zapytanie nic nie wyświetli a usunie nam wszystkie dane z tabeli tabela. Jeśli użytkowników było trzech to nic sie raczej nie stało. Jednak jeśli użytkowników było 50.000 to mamy chyba ogromny problem.
    Aby zapobiec takim sytuacją należy filtrować wszystkie znaki specjalne MySQL poprzez funkcję mysql_escape_string.

    <?php

    $poprawne=mysql_escape_string($HTTP_POST_VARS['nick']);
    $sql="SELECT haslo FROM tabela WHERE nick='$poprawne'";
    mysql_query($sql);

    ?>

    Teraz nasze zapytanie jest zabezpieczone przed w/w sytuacją. Obecne dystrybucje MySQL i PHP nie zezwalają na łączenie zapytań jednak należy przestrzegać powyższych zasad na wypadek zmiany systemu itp.
    Podobna sytuacja występuje jeśli wykonujemy polecenie systemowe serwera pobierając parametry od użytkownika. Przykład: pobieramy od użytkownika parametry poprzez formularz i stosujemy je do polecenia:

    <?php

    system("w $parametr");

    ?>

    Jest to kolejny przykład niezabezpieczonego kodu ponieważ włamywacz może jako parametr w formularzu podać:
    ;ps -aux lub ;cat /etc/passwd lub dowolny inny
    Zapytanie takie wyświetli procesy w systemie lub plik z hasłami. A co jeśli włamywaczowi uda się dostać do jądra systemu? Może załamać cały system.
    Zabezpieczenie takiego skryptu jest analogiczne jak w przypadku bazy danych tylko z wykożystaniem funkcji escapeshellcmd.

    PHP zostało napisane tak by umożliwiać łatwe dołączanie plików. Z tą sytuacją też są związane pewne niebezpieczeństwa. Jeśli włamywaczowi uda się jakoś zmienić wartośc $PATH to może do naszego skryptu dołączyć swój dowolny plik PHP. Taki plik może wyświetlić wszystkie zmienne globalne (co umożliwi włamywaczowi poznanie naszego hasła bazy itp) oraz wykonanie innych potencjalnie niebezpiecznych funkcji. Aby ustrzec się przed takimi zagrożeniami należy unikać dołączania plików. Innym sposobem zabiezpieczania jest zabezpieczanie z poziomu serwera. Ustawienie opcji safe_mode jako on uniemożliwi wykonywanie poleceń systemowych poziomy WWW i skryptów, safe_mode_exec_dir - ustalamy jakie katalogi mogą być dostępne z poziomu PHP, safe_mode_allowed_env_vars - określa jakie zmienne środowiskowe mogą być zmieniane przez skrypt PHP. To nie wszystkie opcje zabezpieczeń tylko przykład kilku.

    Żaden skrypt nie jest zabezpieczony w 100%. Pewien mądry człowiem kiedyś powiedział: " Nie ma skryptów bez luk, są tylko takie, w których tych luk jeszcze nie znaleziono". Dlatego warto zawsze pracować by ulepszyć swój skrypt pod względem bezpieczeństwa. Wyżej przedstawione luki to tylko przykłady, ktorych znam jeszcze trochę. A ile jest ich naprawdę? Chyba tyle ilu dobrych włamywaczy !!!



    Wyszukiwarka

    Podobne podstrony:
    Kurs Php & Mysql, Informatyka, ● PHP, MySQL, ORACLE
    Kurs PHP v1
    Kurs PHP & MYSQL
    Kurs PHP dla początkujących
    kurs php fusion 7T67UCH4LSQRCFDFBO5SKMNWJWRZN7MOTXXZWSA
    Kurs CSS, INFORMATYKA
    Turbo Pascal kurs, Technik Informatyk, Programowanie strukturalne i obiektowe Turbo Pascal
    Flash i php, Informatyka
    Kurs PHP v2
    Kurs Php & Mysql(1)
    informatyka php 5 praktyczny kurs wydanie ii marcin lis ebook
    bazy danych, Informatyka, PHP,,,HTMT,,,CSS,,,SIECI KOMPUTEROWEL,,,LINUX,,,DUZO RÓZNOŚCI
    PHP kurs 2
    PHP kurs

    więcej podobnych podstron