View
10
Download
0
Category
Preview:
Citation preview
Języki programowaniawysokiego poziomu
Forum, Blog, Sample DB- wskazówki
PHP
Wielokrotne użycie kodu• Skrypt PHP może włączać (przez inkluzję) inne skrypty;
Służą do tego instrukcje (pseudo-funkcje):- include,- require,- require_once
• Jeżeli włączany skrypt zawiera HTML, jest on wysyłany do wyjściowego strumienia skryptu głównego, jeżeli PHP – jest interpretowany
• Rozszerzenie nazwy pliku nie jest istotne;niektóre podręczniki zalecają .inc;
• Pliki powinny być umieszczone poza public_html lub zabezpieczone przez wczytaniem do przeglądarki
PHP
Wielokrotne użycie kodu• Instrukcja include zwykle służy do włączania gotowego,
powtarzającego się fragmentu HTML:<?phpinclude "header.php";include "banner.php";// zmienne elementy strony
include "footer.php";?>
PHP
Wielokrotne użycie kodu• Instrukcja require_once zwykle służy do włączania
pomocniczych skryptów, zawierających definicje funkcji i zmiennych://index.php<?phprequire_once "tepmlate.php";
//template.php<?php$pageTemplate = "...";
PHP
Wielokrotne użycie kodu• Zabezpieczenie przed wczytaniem pomocniczego skryptu,
oparte na własnych zmiennych//index.php<?phpdefine ("INDEX", "1"); // $INDEX = true;require_once "tepmlate.php";
//template.php<?phpif (!isset (INDEX)) { header ("Location: index.php"); die ();}// zasadnicza treść skryptu
PHP
Wielokrotne użycie kodu• Zabezpieczenie przed wczytaniem pomocniczego skryptu,
oparte na tablicy sesji (zwykle i tak jest używana)//index.php<?phpsession_start();include "tepmlate.php";
//template.php<?phpif (!isset ($_SESSION)) { header ("Location: index.php"); die ();}// zasadnicza treść skryptu
PHP
Wielokrotne użycie kodu• Definiowanie długich łańcuchów tekstu
$pageTemplate = " <!DOCTYPE ...". "<html>". "<head>";
$pageTemplate = <<<EOM<!DOCTYPE ...<html><head>...EOM;
PHP
Wielokrotne użycie kodu• Definiowanie funkcji
function Name ($arg1, $arg2, …, $argn){ // dowolne instrukcje // opcjonalnie: return result;}
• Wywołanie funkcji$val1 = 7;$val2 = "value";$res = Foo ($val1, $val2, 13, "other");
PHP
Argumenty i rezultat funkcji• Ponieważ w PHP nie ma deklaracji zmiennych,
typ rezultatu i typy argumentów nie są formalnie określone;Każda funkcja zwraca rezultat (niejawnie: NULL)function foo ($arg){ if ($arg>=0) return sqrt(arg);}$re = foo (4); // 2$re = foo (-7); // NULL$re = foo (0); // 0 if ($re === NULL) // …
PHP
Argumenty domyślne• Wiele standardowych funkcji PHP ma argumenty domyślne,
można też ich używać we własnych funkcjachfunction foo ($str, $low=true, $trm=true){ if ($low) $str = mb_strtolower($str); if ($trm) $str = trim($str); $res = "foo: «" . $str . "»";}
$re = foo (" RES "); // "foo: «res»"$re = foo (" RES ", true, true); //jw.
PHP
Argumenty przekazywane przez referencję• Domyślnie argumenty są przekazywane przez wartość;
dodanie znaku "&" przed nazwą zmienia argument w referencjęfunction foo ($def, &$ref){ $def++; $ref++;}
$a=1, $b=1;foo ($a, $b); // $a=1, $b=2
PHP
Wielokrotne użycie kodu • Powtarzające się w wielu skryptach czynności powinny być
wykonywane przez funkcje, wczytywane z pliku// index.phprequire_once "common.php";$conn = ConnectDatabase();
// common.phpfunction ConnectDatabase() { $conn = new mysqli (…); if (mysqli_connect_errno()!=0) { // header ??? die (); } $res = $conn->query ("SET NAMES 'utf8'"); return $conn;}
PHP
Tworzenie strony na podstawie szablonu• Opracowanie szablonu
wzorcowa strona (tylko HTML), wszystkie elementy, które będą na stronach tworzonych dynamicznie
• Zastąpienie elementów zmiennych unikalnymi ciągami znaków, (np. ===Nazwa===), zapisanie szablonu do zmiennej PHP
• Dynamiczne tworzenie – w skrypcie PHP – tylko elementów zmiennych strony, do zmiennych PHP, np.:$pgBody = "<h2>Xxx</h2>";while (...) $pgBody .= "<p>Yyy";
PHP
Tworzenie strony na podstawie szablonu (cd.)• Na koniec – wstawienie utworzonych dynamicznie elementów
do szablonu strony i wysłanie całości do przeglądarki:
$page = str_replace("===PageBody===", $pgBody, $pageTemplate );echo $page;
PHP
Korzyści tworzenia strony na podstawie szablonu:• Wszystkie strony serwisu mają dokładnie taki sam układ oraz
takie samo formatowanie,• Zmiana wyglądu jest łatwa – zamiast zmieniać kod wielu
skryptów, wystarczy zmodyfikować szablon,• Szablony można zapisać w bazie danych, wówczas zmiana
wyglądu może być dokonana dynamicznie,• Dokument HTML, „produkowany” przez skrypt, jest wysyłany
do przeglądarki dopiero na sam koniec działania skryptu:– W dowolnej chwili można zaprzestać tej produkcji lub całkowicie
zmienić treść (np. w reakcji na błąd) – normalnie to niemożliwe– W dowolnej chwili można skorzystać z nagłówków HTTP
(np. funkcje session_start, set_cookie, header) – normalnie jest to możliwe tylko na samym początku działania skryptu.
PHP
Obsługa daty i czasu• Obsługa daty i czasu jest jednym z najbardziej złożonych
problemów, ze względu na olbrzymią liczbę alternatyw, które trzeba uwzględnić:
– Różne kalendarze (gregoriański, juliański, hebrajski, perski, chiński, …)
– Nieregularność kalendarzy (np. różne liczby dni miesiąca, lata przestępne, …),
– Strefy czasowe, czas letni i zimowy,– Liczne regionalne i międzynarodowe formaty zapisu daty i czasu
(kolejność podawania numeru miesiąca/dnia, zegar 12/24H, …),– Sposób kodowania znaków przez funkcje generujące tekstowe
reprezentacje daty (np. „Środa, 15 styczeń 2012”), który może być inny niż stosowany dla całej strony
• PHP pozwala uwzględnić wszystkie te niuanse
PHP
Obsługa daty i czasu• PHP udostępnia wiele funkcji związanych z datą i czasem:
– Pobieranie znacznika czasu (bieżąca data i czas, liczbowo)– Formatowanie daty i czasu (łańcuch tekstowy, o dowolnym
układzie, na podstawie znacznika)– Przekształcenie łańcucha lub liczb (oznaczających rok, miesiąc,
dzień, godzinę, …) na znacznik czasowy
• MySQL udostępnia funkcje, które można użyć w zapytaniach m.in. INSERT oraz UPDATE
– DATE() – bieżąca data, rezultat typu DATE,– TIME() – bieżący czas, rezultat typu TIME– NOW() – bieżące data i czas, rezultat typu TIMESTAMP
PHP
Znacznik czasu (timestamp)• PHP udostępnia funkcję time(), która zwraca aktualny znacznik
czasu (liczba sekund od 01.01.1970, godz. 00:00):$currTime = time();echo "<p>Datownik: $crrTime "; // 130928376
Datownik udostępniony przez funkcję time() można zamienić na czytelny dla użytkownika napis przy pomocy funkcji PHP:date() lub strftime()
PHP
Funkcje date() i strftime()• Dają możliwość niemal dowolnego formatowania daty i czasu,
np. miesiąc może być podany jako numer, nazwa lub nazwa skrócona, godzina – w zapisie 12 lub 24 godzinnym, uzupełniona zerem (08) lub nie (8) itp.
• Funkcja date ma tę wadę, że nazwy dni tygodnia oraz miesięcy podaje wyłącznie w j. angielskim, jednak jeżeli nazwy te nie są potrzebne, jest wystarczająca
PHP
Funkcja date()• Funkcja ma dwa argumenty: pierwszym jest łańcuch
formatujący, drugim, opcjonalnym, jest datownik:date ($format, [$timestamp]);
• Jeżeli datownik nie zostanie podany, funkcja pobierze aktualny datownik, zatem poniższe instrukcje są sobie równoważne:$dt = date ($format);$dt = date ($format, time());
• Łańcuch formatujący może zawierać dowolną kombinację znaków określających elementy składowe rezultatu funkcji;znaki nierozpoznane jako formatujące są pozostawiane bez zmian, np.:$tm = date ("H:i:s"); // 21:19:03$dt = date ("Y-m-d"); // 2011-05-19
PHP
Funkcja date()• Wybrane znaki formatujące (małe i wielkie litery są rozróżniane)
d – dzień miesiąca, z wiodącym zerem, 01-31D – dzień tygodnia, w skrócie, Mon – Sunm – numer miesiąca, z wiodącym zerem, 01-12M – nazwa miesiąca, w skrócie, Jan – DecF – nazwa miesiąca, np. JanuaryY – rok, 4 cyfry, np. 2011y – rok, 2 cyfry, np. 11H – godzina, format 24H, z zerem, 00 - 23h – godzina, format 12H, z zerem, 01 – 12i – minuta, z wiodącym zerem, 00-59s – sekundy, z wiodącym zerem, 00-59
PHP
Funkcja strftime()• Funkcja ma dwa argumenty: pierwszym jest łańcuch
formatujący, drugim, opcjonalnym, jest datownik :strftime ($format, [$timestamp]);
• Sposób wywołania strftime jest analogiczny, jak date, jednak istnieją dwie istotne różnice:- są inne znaki formatujące- strftime uwzględnia ustawienia regionalne;
PHP
Funkcja strftime()• Aby uzyskać nazwy dni tygodnia i miesięcy w j. polskim:
- zmienić ustawienia regionalne na polskie (funkcja setlocale),- wywołać strftime,- przekonwertować wynik z ISO-8859-2 (takiego używa funkcja strftime) na używany dla całej strony UTF-8 (funkcja iconv):
setlocale(LC_TIME, "pl_PL");$dtISO = strftime("%A"); // np. "Środa"$dtUTF = iconv("ISO-8859-2", "UTF-8", $dtISO);
PHP
Funkcja strftime()• Wybrane znaki formatujące (małe i wielkie litery są rozróżniane)
%d – dzień miesiąca, z wiodącym zerem, 01-31%a – dzień tygodnia, w skrócie, Mon – Sun%A – dzień tygodnia, np. Sunday %m – numer miesiąca, z wiodącym zerem, 01-12%b – nazwa miesiąca, w skrócie, Jan – Dec%B – nazwa miesiąca, np. January%Y – rok, 4 cyfry, np. 2011%y – rok, 2 cyfry, np. 11%H – godzina, format 24H, z zerem, 00 - 23%I – godzina, format 12H, z zerem, 01 – 12%M – minuta, z wiodącym zerem, 00-59%S – sekundy, z wiodącym zerem, 00-59
PHP
Funkcja strtotime()• Przekształca datę i czas, podane w postaci łańcucha znaków,
na datownik; ma dwa argumenty: pierwszym jest łańcuch zawierający datę i czas, drugim, opcjonalnym, jest datownik :strtotime ($time, [$timestamp]);
• Umożliwia (m.in.) przekształcenie datownika uzyskanego z bazy danych na datownik PHP, który następnie można przekształcić do potrzebnej postaci funkcjami date() lub strftime():$sql = "SELECT * FROM …";$res = $conn->query ($sql);$row = $res->fetch_assoc();$tm = strtotime ($row["pstts"]);// pole pstts typu TIMESTAMP
PHP
Funkcja strtotime()• Drugi argument jest potrzebny, jeżeli określenie czasu jest
względne, np.:$nextDay = strtotime ("+1 day", $someDay);
jeżeli zostanie pominięty, to czas jest określany względem czasu bieżącego, tj. domyślnie przyjmuje się równy time()
• Funkcja dobrze rozpoznaje rozmaite opisy, oczywiście tylko po angielsku:$tm1 = strtotime ("+1 week 2 days 4 hours);$tm2 = strtotime ("next Thursday ");$tm3 = strtotime ("last Monday ");$tm4 = strtotime ("yesterday");
Recommended