Lukasz Budnik
Tworzenie dynamicznych stron WWW –
technologia PHP.
Mozliwosci, zastosowanie.
Zagadnienia poruszane w referacie:
1. Technologie internetowe, porownanie mozliwosci, stron statycznych, Java Script, Flash
2. PHP jako technologia internetowa
3. Przykladowe aplikacja internetowe
4. Podsumowanie
Dodatek: Szybki kurs programowania w jezyku PHP:
1. Podstawowa skladnia, wprowadzajace przyklady, porownanie z jezykiem C
2. Funkcje czasu, operacje na stringach oraz plikach
3. Zmienne srodowiskowe, zmienne predefiniowane
4. Przekazywanie danych pomiedzy stronami(POST, GET), Cookie
5. Dostep do poczty
6. PHP i bazy danych – kilka krotkich przykladow wspolpracy PHP z MySQL
7. Naglowki HTTP
8. Mechanizmy sledzenia sesji
Literatura:
1. Magazyn .net(2000)
2. PHP 3 – Leon Atkinson (Helion)
3. PHP 3 Internetowe aplikacje bazodanowe – Craig Hilton, Jeff Wills (Helion)
4. PHP 4 Biblia – Tim Converse, Joyce Park (Helion)
5.
http://www.php.net/download-docs.php
Pomocne strony:
1.
http://www.komputery-internet.net/php/
2.
http://www.php.net
3.
http://www.phpdev.com
4.
http://www.google.com?querry=php+tutorials+examples +databases
Kontakt:
1.
admin@komputery-internet.net
2.
admin@komputery.wejher.pl
3. GG: 139109
Wejherowo 2003
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 2 -
1. Technologie internetowe
W dzisiejszym internecie spotykane witryny nie sa juz zwyklymi pisanymi w notatnikach stronami
WWW, dzis strona to prawdziwa aplikacja internetowa, zaprzegajaca do pracy setki technologii
internetowych, wykonywanych po stronie serwera czy klienta.
Ale od poczatku.
W latach osiemdziesiatych strony internetowe pisane byly z wykorzystaniem czystego jezyka
HTML, zawierajacego nieco ponad 100 tagow. Z czasem rozwijano specyfikacje HTML, dodajac coraz
to nowe, jedne mniej, drugie bardziej przydatne tagi.
Podajmy najprostszy przyklad strony WWW wyswietlajacy naglowek, nowy akapit, prosta tabelke
z kolorowymi napisami. Kod mniej wiecej prezentuje sie tak:
<html>
<head>
<title>Przyklad</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1 align="center">naglowek stopnia 1</h1>
<p>Akapit i jaki¶ <b>wytluszczony tekst</b></p>
<table width="75%" border="0">
<tr>
<td><font color="#FF0000"><i>kolorki</i></font></td>
<td><font face="Verdana, Arial, Helvetica, sans-serif">inne
czcionki</font></td>
</tr>
<tr>
<td><font size="-3">komorka obok bedzie pusta</font></td>
<td> </td>
</tr>
</table>
<p>moze jeszcze jaki¶ obrazek: <img src="wqw.jpg" width="100" height="100"
alt="nie ma tego obrazka to tylko przyklad">i linka: <a
href="http://www.qwq.net">qwq</a></p>
</body>
</html>
Polecam kurs jezyka HTML autorstwa Pawla Wimera dostepnego pod adresem:
http://webmaster.helion.pl/kurshtml/
.
Z rozwojem internetu, zwiekszeniem jego popularnosci, powszechniejszym dostepem powstawaly
nowe technologie internetowe majace na celu ulatwienie, lub tez po prostu uprzyjemnienie,
przegladania strony lub w przypadku administratorow ulatwienie zarzadzania strona.
Zaczely powstawac technologie wykorzystywane przez serwery WWW oraz technologie
wykonywane po stronie uzytkownikow.
Pojawialy sie pierwsze skrypty Java, pierwsze, dzis mozna by powiedziec prymitywne, technologie
SSI - ServerSideInclude(kurs tej technologii i przyklady pod adresem:
http://www.komputery-
internet.net/ssi/
).
Zobaczmy przykladowy kod JavaScriptu wyswietlajacy biezaca date, formatke z zapytaniem,
podswietlanie wyszukiwanych wyrazow oraz zawierajacy blokade prawego klawisza myszki.
<html>
<head>
<title>Przyklad, prosty JS</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 3 -
<script language="Javascript1.2">
// (C) 2000 www.CodeLifter.com
// http://www.codelifter.com
// Free for all users, but leave in this header
// Set the message for the alert box
am = "Niestety prawy klawisz nie dziala.";
// do not edit below this line
// ===========================
bV = parseInt(navigator.appVersion)
bNS = navigator.appName=="Netscape"
bIE = navigator.appName=="Microsoft Internet Explorer"
function nrc(e) {
if (bNS && e.which > 1){
alert(am)
return false
} else if (bIE && (event.button >1)) {
alert(am)
return false;
}
}
function clickIE() {if (document.all) {alert(am);return false;}}
function clickNS(e) {if
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {alert(am);return false;}}}
if (document.layers)
{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<script language="javascript">
var l=new Date()
var h=l.getHours()
var m=l.getMinutes()
var s=l.getSeconds()
document.write(h+':'+m+':'+s+'\n\n');
if(confirm('Ta strona ma tytul: '+document.title+' czy nie?'))
document.write("<p>TAK");
else document.write("<p>Nie");
var description = "<p>jaki¶ Tam tekst, jakis inny tekst<br>";
var keywords = "tam jaki¶"
re = /(\s)/gi
keywords = keywords.replace(re, "|");
var reg = new RegExp("(" + keywords + ")", "gi");
description = description.replace(reg, "<b style='background-color:
#eeeeee'>$1</b>");
document.write(description);
</script>
</body>
</html>
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 4 -
Dla osob zainteresowanych JavaSript polecam szczegolnie dwie stronki:
http://webmaster.helion.pl/kurshtml/skrypt/skrypt.htm
oraz bardzo dobry kurs autorstwa Stefana
Kocha(przetlumaczone na polski):
http://webmaster.helion.pl/kurshtml/jsintro/script.htm
Przelomowym momentem stalo sie wprowadzenie technologii CGI – Common Gateway Interface
– popularne skrypty .cgi(czesto z rozszerzeniem .pl) oparte na jezyku Perl. Interfejs CGI byl poteznym
narzedziem zapewnial on dostep do zasobow serwera, do programow na nim zainstalowanych,
posiadal dostep do baz danych, mozliwosci weryfikacji i autentyfikacji uzytkownikow... do czasu
wprowadzenia PHP.
PHP napisal Rasmus Lerdorf. PHP bylo skrotem od Personal Home Page Tool – narzedzie, ktore
mialo zbierac informacje o uzytkownikach wchodzacych na internetowa strone domowa Rasmusa.
Autor zamiescil swoje narzedzie na stronie domowej, szybko stalo sie popularne, pozniej przyszly
kolejne wersje(nie bede tu opisywal co bylo wprowadzane w kolejnych wersjach). Obecnie dostepna
jest wersja z linii 4.0, trwaja prace nad wersja 5.0.
PHP dziala na zasadzie technologii CGI, wiele cech jest zblizonych. PHP zdecydowanie wyparlo
CGI ze wzgledu bezpieczenstwa, prostszych rozwiazan wykonywania procesow oraz tego
najwazniejszego – napisanie prostej aplikacji internetowej np.: forum, czy banalnej sondy to tylko
kwestia kilku minut.
Najwieksza wada, czesto krytykowana u CGI jest wymaganie rozgaleziania procesow podczas
gdy skrypt PHP jest wykonywany po prostu jako czesc procesu serwera!
PHP ma prostsza skladnie(notabene Perl tez nie jest trudny), podobna do C, pisze sie skrypty
bazujac na kilku podstawowych regulach.
Zapamietajmy:
Wsrod stron internetowych wyrozniamy trzy podstawowe typy:
•
Statyczne, zwykly HTML
•
Interaktywne, JavaScript, ActionScript(Flash)
•
Dynamiczne, PHP, ASP, Cold Fusion
Roznica pomiedzy tymi trzema typami jest znaczaca.
Dzis odchodzi sie juz od surowych stron, zapisanych tylko w HTML, wzbogaca sie strony o
elementy interaktywnosci(JavaScript, Flash – animacje na stronie, rozne fajerwerki, cos sie pojawia,
cos znika) oraz elementy dynamiczne(nie nalezy mylic tych dwoch pojec, interaktywnosc to nie
dynamicznosc, JavaScript nie jest dynamiczna!). Coraz czesciej nawet strony domowe(bo serwisy
intenetowe korzystaja z dobrodziejstw technologii dynamicznych juz od dawna) zawieraja skrypty
PHP, dzieki nimi tworca strony moze korzystac z informacji zgromadzonych w bazie danych, moze
bezposrednio porozumiewac sie z uzytkownikiem.
Dwa najwazniejsze powody, dla ktorych warto korzystac z PHP to:
•
PHP jest jezykiem darmowym
•
Jest wrecz banalny, napisanie licznika wizyt, systemu rotacyjnego wyswietlania banerow,
generowanie statystyk, rozpoznawanie uzytkownikow to tylko kwesta kilku minut i tyluz
samo linii kodu zrodlowego
W niniejszym referacie zajme sie prezentacja mozliwosci dynamicznych stron WWW – opartych
na technologii PHP.
JavaScript i Flash sa w 100% rozne od PHP, to tez ich zastosowanie jest calkiem inne. Ich
mozliwosci ‘ograniczaja sie’ do ‘umilania czasu przegladania strony’ i nie wnosza nic do jej
funkcjonowania, komunikowania sie z uzytkownikiem, pobierania przez strone danych z pliku czy tez
innej aplikacji internetowobazodanowej, dodatkowo obie technologie sa w 100% zalezne od uzywanej
przegladarki oraz systemu operacyjnego, poniewaz, w przeciwienstwie do PHP sa wykonywane przez
uzytkownikow – tych ograniczen pozbawiony jest PHP.
Zdecydowanie jednak nie nalezy niedoceniac walorow jakie posiadaja JavaScript oraz Flash.
Prawdziwy serwis laczy w sobie wszystkie te technologie, jest w pelni funkcjonalny, potrafi zadowolic
nawet najwybredniejszego uzytkownika.
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 5 -
2. PHP jako technologia internetowa
"PHP (akronim rekursywny "PHP: Hypertext Preprocessor"), jest szeroko uzywanym jezykiem
skryptowym ogolnego zastosowania, tworzonym na zasadach Open Source, dopasowanym do
potrzeb aplikacji WWW, z mozliwoscia zagniezdzania w HTML." – definicja z oficjalnej strony projektu
PHP.
PHP jest jezykiem skryptowym zagniezdzanym w HTML’u. Programy napisane w tym jezyku
nazywa sie skryptami lub w przypadku wiekszych projektow aplikacjami internetowymi. Kodow
zrodlowych nie kompiluje sie – umieszcza sie je wprost na stronie internetowej(najczesciej o
rozszerzeniu .php) – pozniej podczas zgloszenia do serwera WWW(np.: Apache) pobrania strony
przez uzytkownika, strona przechodzi przez Parser i wykonana przez niego wyswietlana jest
uzytkownikowi. Jest to bardzo wazna cecha jezyka PHP. Projektant nie musi przejmowac sie
konfiguracja przegladarek internetowych uzytkownikow – nie ma to najmniejszego znaczenia
poniewaz caly kod jest przetwarzany przez serwer i wysylany do uzytkownika juz jako "czysty i
zrozumialy" HTML.
Ogolniej PHP jest jezykiem aplikacji internetowych wykonywanych dynamicznie po stronie
serwera, ktorych wyniki sa przesylane na strone internetowa wyswietlana uzytkownikowi.
Ponadto kazdy program PHP ma dostep do srodowiska serwera i moze korzystac z baz danych
oraz plikow zapisanych na nim.
Skladnia jezyka PHP jest zblizona do skladni C, Java’y i Perla.
PHP jest co prawda jezykiem obiektowym, dynamicznym, ale zdecydowanie jest ukierunkowany
na wspolprace serwera i uzytkownika.
PHP jest obecnie najczesciej stosowana, dajaca najwieksze mozliwosci technologia internetowa.
PHP potrafi zbierac dane z formularzy, generowac dynamiczne strony oraz wysylac i odczytywac
pliki cookies, wspolpracuje z ponad 20 bazami danych, posiada biblioteki mcrypt zawierajace
najczesciej stosowane w internecie algorytmy szyfrujace, biblioteki obslugi plikow skompresowanych
"w locie", dynamiczne generowanie plikow gif, pdf, standardowo ma budowana prosta autentyfikacje,
a w wersjach z linii 4.0 i nowszych "rozpoznawanie" uzytkownika czyli mechanizmy sledzenia sesji.
PHP to bogactwo funkcji sieciowych oraz obsluga wszystkich najwazniejszych protokolow
sieciowych!
3. Przedyskutujmy tworzenie, metoda top-down, przykladowej aplikacji internetowej
Pomyslmy jak napisac prosta subskrypcje, wypiszmy co powinien zawierac – jak dzialac nasz
system.
•
potrzebny jest serwer WWW z obsluga PHP
•
10 palcow(w ekstremalnych wypadkach wystarczy tylko jeden)
•
znajomosc(minimalna) PHP(w zupelnosci wystarczy przeczytanie dolaczonego kursu)
•
najwazniejsze czyli pomysly...
Prosta(najprostsza subskrypcja powinna realizowac):
•
zapisy i odczyty, usuwanie e-maili z bazy danych(ewnetualnie pliku na serwerze)
•
w prosciutkiej petli wysylane wiadomosci
to jest oczywiste, wiec pozostaje nam tylko zrealizowanie powyzszych zalozen.
Krotka prezentacja przykladowych aplikacji:
•
Prezentacja przykladowego systemu zarzadzania subskrypcjami – AW_Subskrypcja
•
Prezentacja Forum, omowienie mozliwosci i zalet.
Jak pisac aplikacje podobne do forum, jak sie je testuje pod wzgledem bezpieczenstwa, na co
powinno sie zwraca uwage piszac aplikacje internetowe etc.
•
Pytania od sluchaczow
•
Wiedzialem, ze ich nie bedzie zatem spojzmy na jeszcze jeden przyklad: ciekawego
zastosowania PHP – kalendarz, ktory jest generowany przez PHP a JavaScript+DHTML
dopelnia jego funkcjonalnosc zapewniajac tzw. Live clock – uzyskujemy w ten sposob obecna
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 6 -
tendencje wsrod administratorow – laczenie technologii serwerowych z technologiami
uruchamiajacymi po przeciwnej stronie – u klienta
•
Ostatnia szansa: Pytania od sluchaczow
4. Podsumujmowanie, najwazniejsze informacje dotyczace wsloplczesnych technologii
internetowych
•
dzisiejsze strony WWW nie sa juz statycznymi dokumentami, sa poteznymi aplikacjami
internetowymi, sysytemami wyszukiwawczymi, aktywnymi 24 godz na dobe sklepami
internetowymi
•
aby uzyskac 100% funkcjonalnosc nie wystarczy jednak uzyc jednej technologii, trzeba je
laczyc, poniewaz stanowia one doskonale uzupelnienie siebie nawzajem
•
internet staje sie coraz to silniejsza galezia gospodarek na calym swiecie, branza IT staje sie
coraz wieksza, coraz wszechogarniajaca(lodowki kupujace produkty przez internet), warto sie
wiec w sieci godnie zaprezentowac, stworzyc strone, ktora bedzie nasza wizytowka, ktora
bedzie zachecala naszych przyszlych, potencjalnych klientow zamiast ich od nas odstraszac
Jestesmy w stanie tego dokonac w bardzo prosy sposob bez potrzeby wydawania tysiecy zlotych
na profesjonalne firmy projektujace strony internetowe, wszystko jest w naszym zasiegu, najwiekszym
problemem nie sa umiejetnosci programowania, ale brak kreatywnych pomyslow.
Zapraszam do zapoznania sie z technologia PHP.
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 7 -
Dodatek:
Kurs programowania w jezyku PHP
1. Podstawowa skladnia, wprowadzajace przyklady, porownanie z jezykiem C
PHP jest stworzony w oparciu o skladnie jezyka C, jest naprawde niewiele roznic – czesc roznic
polega na np.: innej nazwie funkcji., czesc funkcji np.: funkcje operujace na stringach sa bardziej
rozbudowane(czytaj jest ich znacznie wiecej niz w C).
PHP jest bardzo intuicyjnym jezykiem, osoby programujace wczesniej w jezyku C nie beda mialy
zadnych problemow z przyswojeniem skladni oraz metodyki pisania skryptow.
Oczywiscie pierwszym programem jest skrypt(tej terminologii bede juz uzywal w dalszej czesci
referatu) "Witaj swiecie":
<html>
<head>
<title>Przyklad</title>
</head>
<body>
<?php echo "Witaj swiecie!"; ?>
</body>
</html>
Jak latwo zauwazyc, jest to kod zrodlowy prostej strony WWW zapisanego w jezyku znacznikow
HTML ze wstawka PHP. Skrypty PHP najczesciej rozpoczyna sie od "<?" lub "<?php" konczy sie
"?>". Kazda linie powinien konczyc srednik.
Spojrzmy na ponizsze linie:
# PHP umozliwia uzywanie znakow tabulacji , nowej linii
# i powrotu karetki jak C np.:
echo "Skrypt\nPHP";
/* ponizszy tekst zostanie poprawnie wyswietlony, ale znaki \t i \n zostana
potraktowane jako zwykly napis */
echo '\tSkrypt PHP\n';
// na tym poziomie wiedzy o PHP mozemy powiedziec, ze jest to odpowiednik
// echo, echo rowniez umozliwia wpisywanie tagow HTML
print("<p>Skrypt\nPHP</p>");
W powyzszych przykladach pokazane zostaly takze trzy metody komentowania skryptu.
Oczywiscie uzytkownik po otworzeniu strony zobaczy same napisy(wynik), bez echo i print.
Stale w PHP definiuje sie podobnie jak w jezyku C np.:
define("POWITANIE","Cze jestem skryptem i jest smiesznie");
odwolanie sie do tak zdefiniowanej stalej moze nastapic poprzez np.: print(POWITANIE);
Zmienne w PHP poprzedza sie zawsze znakiem dolara.
<?
# w PHP nie musimy sie martwic o typy...
$zmienna_lancuchowa="Nie trzeba nic wiecej robic!";
$zmienna_liczbowa="121334545466";
$zmienna_lancuchowa2="Nie trzeba sie meczyc!\nMozna robic wszystko!(prawie
;D)";
$zmienna_liczbowa2=1213;
print($zmienna_lancuchowa);
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 8 -
echo
"\n".$zmienna_liczbowa."\n".$zmienna_lancuchowa2."\n".$zmienna_liczbowa2;
echo ($zmienna_liczbowa+$zmienna_liczbowa2);
echo "\n".(PI()*$zmienna_liczbowa2);
?>
i moze jeszcze jeden ciekawy przyklad, co bedzie wynikiem ponizszego kodu?:
$a=100;
$b="500 nowych zlotych";
$c=$a+$b;
echo "suma wynosi $c";
$a=" nowych zlotych";
echo $a;
echo "<br>";
echo ‘ale $a dodac $b nie zawsze jest $c’;
Tak naprawde z typami jest jeszcze latwiej.
Przyjrzyjmy sie funkcji settype oraz pochodnym: strval, intval, doubleval
<?
print("<B>Zastosowanie settype</B><BR>\n");
$AverageTemperature = "36.6 stopni";
print("Lancuch znakow: $AverageTemperature <BR>\n");
settype($AverageTemperature, "double");
print("Liczba zmiennoprzecinkowa: $AverageTemperature <BR>\n");
settype($AverageTemperature, "integer");
print("Liczba calkowita: $AverageTemperature <BR>\n");
settype($AverageTemperature, "string");
print("Lancuch znakow: $AverageTemperature <BR>\n");
print("<BR>\n");
print("<B>zastosowanie strval, intval, ");
print("oraz doubleval</B><BR>\n");
$AverageTemperature = "36.3 stopni";
print("String: ");
print(strval($AverageTemperature));
print("<BR>\n");
print("Liczba zmiennoprzecinkowa: ");
print(doubleval($AverageTemperature));
print("<BR>\n");
print("Liczba calkowita: ");
print(intval($AverageTemperature));
print("<BR>\n");
print("Lancuch znakow: ");
print(strval($AverageTemperature));
?>
oczywiscie mozemy wyciagac tak zmienne liczbowe ze stringow i normalnie na nich prowadzic
operacje np.:
$tak=doubleval($AverageTemperature);
$tak*=2;
echo $tak;
Wszelkie zapisy $zmienna*=$zmienna dzialaja na tej samej zasadzie co w jezyku C.
Wszelkie operatory znane z C sa rowniez zaimplementowane w PHP(+,-,*,/,%,--,++).
Operacje bitowe rowniez sa uzywane standardowo(czyt.: tak jak w C).
Tablice.
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 9 -
W PHP rozrozniamy dwa typy tablic – pierwszym jest tablica numeryczna, ktorej indeksami sa
liczby np.: $tab[0][0]=123; oraz tablica asocjacyjna, ktorej indeksami sa string np.:
$tab["Polska"]["hymn"]="Mazurek Dabrowskiego";
Tablice w PHP tworzy sie funkcja Array();
Zainicjujmy jednowymiarowe tablice: numeryczna cyfr i asocjacyjna walut.
$tablica=array(0,1,2,3,4,5,6,7,8,9);
$tablica = array(
"Polska" => "Zloty";
"Niemcy" => "Marka";
);
Kilka operacji na tablicach, ktore wykazuja swoja wyzszosc nad C(nie nalezy tego stwierdzenia
brac doslownie – to przeciez dwa calkowicie inne jezyki o innych przeznaczeniach):
$tab[ ]=$jakas_zmienna – dodanie nowego elementu, na koniec tablicy, ilosc indeksow jest jak
widac dynamicznie przydzielana, nie ma z gory ustalonego rozmiaru tablicy
sort($tab) – podstawowa funkcja sortujaca – po jej wykonaniu elementy beda ulozone od
najmniejszego do najwiekszego
rsort($tab) – recursive sort, patrz wyzej tylko od najwiekszego do najmniejszego
asort($tab) – uzywana w przypadku tablic asocjacyjnych(od najmniejszego do najwiekszego)
arsort($tab) – uzywana w przypadku tablic asocjacyjnych(od najwiekszego do najmniejszego)
sizeof($tab) – oblicza liczbe elementow
current($tab) – zwraca biezacy element(adres)
next($tab) – zwraca nastepny element tablicy, jesli doszedl do konca tablicy zwraca false
prev($tab) – zwraca poprzedni element tablicy, jesli wrocil na poczatek tablicy zwraca false
each($tab) – dziala jak current(), ale po zwroceniu biezacego elementu wskazuje na nastepny
reset($tab) – ustawia kursor na pierwszy element
end($tab) – ustawia kursor na ostatnim elemencie
Funkcje.
<?
function useColor()
{
# zapamietanie poprzedniej wartosci, poprzedniego koloru
static $ColorValue;
/* wybierz nastepny kolor */
if($ColorValue == "#00FF00")
{
$ColorValue = "#CCFFCC";
}
else
{
$ColorValue = "#00FF00";
}
return($ColorValue);
}
print "<TABLE WIDTH=\"300\">\n";
for($count=0; $count < 10; $count++)
{
$RowColor = useColor();
print "<TR><TD BGCOLOR=\"$RowColor\">";
print "Wiersz numer $count</TD></TR>\n";
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 10 -
}
print "</TABLE>\n";
?>
Mozna zatem uwazac, ze sluchacze zapoznali sie z podstawowa skladnia jezyka PHP.
2. Funkcje czasu, operacje na stringach oraz plikach
Zastosowanie funkcji date() i mktime().
Funkcja date() wywolywana jest w roznymi parametrami – jest ich 31 roznych. Zwraca "parametry"
dzisiejszego dnia, miesiaca, roku, w przeciwienstwie do funkcji mktime(), ktora moze "tworzyc czas
przeszly lub przyszly". Ponizej przedstawie tylko wybrane z nich.
w szablonie formatujacym date uzywa sie m.in.:
•
a - "am" lub "pm"
•
A - "AM" lub "PM"
•
d - dzien miesiaca, 2 cyfry z zerem na poczatku; tzn. od "01" do "31"
•
D - dzien tygodnia, tekst, 3 litery; np. "Fri"
•
F - miesiac, tekst, pelna nazwa; np. "January"
•
g - godzina, format 12-godzinny bez zera na poczatku; tzn. od "1" do "12"
•
G - godzina, format 24-godzinny bez zera na poczatku; tzn. od "0" do "23"
•
h - godzina, format 12-godzinny z zerem na poczatku; tzn. od "01" do "12"
•
H - godzina, format 24-godzinny z zerem na poczatku; tzn. od "00" do "23"
•
i - minuty; tzn. od "00" do "59"
•
j - dzien miesiaca bez zera na poczatku; tzn. od "1" do "31"
•
l (mala litera 'L') - dzien tygodnia, tekst, pelna nazwa; np. "Friday"
•
L - "1" jesli rok przestepny, "0" w przeciwnym razie
•
m - miesiac; tzn. "01" to "12"
•
M - miesiac, tekst, 3 litery; n.p. "Jan"
•
n - miesiac bez zera na poczatku; tzn. "1" to "12"
•
s - sekundy; i.e. "00" to "59"
•
S - standardowy angielski sufiks liczebnika porzadkowego, 2 litery; tzn. "st", "nd", "rd" lub "th"
•
t - liczba dni w danym miesiacu; tzn. od "28" do "31"
•
w - dzien tygodnia, liczbowy, tzn. od "0" (Niedziela) do "6" (Sobota)
•
W - numer tygodnia w roku, w ktorym tydzien zaczyna sie w poniedzialek (dodane w PHP
4.1.0)
•
Y - rok, 4 liczby; n.p. "1999"
•
y - rok, 2 liczby; n.p. "99"
•
z - dzien roku; tzn. od "0" do "365"
Zakladajac, ze dzis jest: March 10th, 2001, 5:16:18 pm
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST
2001
$today = date('H:m:s \+\ \n\a\p\i\s'); // 17:03:17 + napis
$today = date("H:i:s"); // 17:16:17
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 11 -
Korzystajac z funkcji mktime() mozemy sprawdzic, ktorego dnia beda nasze urodziny w 2010
roku, np.:
echo "W 2010 roku bede mial urodziny w: ".date("l",mktime(0,0,0,3,7,2010));
jak widac mktime() jest wywolywany z 6 parametrami, odpowiednio: godziny, minuty, sekundy, dzien,
miesiac, rok, mozemy oczywiscie bez problemu polaczyc dzialanie date() i mktime() np.:
$jutro = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));
$ostatni_miesiac = mktime (0,0,0,date("m")-1,date("d"), date("Y"));
$kolejny_rok = mktime (0,0,0,date("m"), date("d"), date("Y")+1);
Operacje na stringach.
Nazwa funkcji
Opis
Przyklad wykorzystania
Chr
Zwraca znak o podanym kodzie
ASCII
Ch(27)
Explode
Wyszukuje w podanym lancuchu
fragmenty oddzielone
okreslonym znakiem lub
sekwencja znakow(separatorem)
i umieszcza je w odrebnych
komorkach tablicy
$tab=expode("","jeden
dwa trzy");
Implode lub join
Laczy w lancuch komorki tablicy
$string=implode("",$tab)
;
Ltrim
Usuwa biale spacje z lewej
strony
$string=ltrim($string);
Rtrim
Usuwa biale spacje z prawej
strony
$string=rtrim($string);
Trim
Usuwa biale spacje z calego
stringu
$string=trim($string);
Nl2br
Zamienia wszystkie znaki nowej
linii na tag <br>
nl2br("jeden\ndwa\ntrzy"
);
Ord
Zwraca kod ASCII pierwszego
znaku z lancucha
Ord("Danni Minogue");
Parse_str
Traktuje podany lancuch jak
sekwencje parametrow
przekazanych przez adres URL i
nadaje odpowiednie wartosci
zmiennym – w podanym
przykladzie: $a=="ala" $b=="ma
K"
Parse_str("a=ala&b=ma+ko
ta");
StrCaseCmp
Porownanie dwoch stringow bez
zwracania na wielkosci liter
Strcasecmp("jeden","JeDe
N");
StrCmp
Jak wyzej tyle, ze case-sensitive
Strcmp("jeden","jeden");
StrChr lub StrStr
"odcina" czesc lancucha ponizej
pierwszego wystapienia podanej
sekwencji znakow- w podanym
przykladzie: "@Minogue"
Strstr("Dannii@Minogue")
;
Strlstr
Jak wyzej z rozroznianiem
wielkosci liter
Strip_Tags
Usuwa z lancucha wszystkie
znaczniki HTML i PHP
Strip_tags("<p>qwq</p>")
;
Strlen
Zwraca dlugosc lancucha
Strlen($zminna);
StrPad
Dopelnia lancuch podanymi
znakami z lewej strony
(parametr STR_PAD_LEFT), z
prawej(STR_PAD_RIGHT) lub z
obu(STR_PAD_BOTH)
Strpad("QwQ",4,
"^",STR_PAD_BOTH);
StrPos
Zwraca miejsce(pozycje)
Strpos("qwerty","w");
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 12 -
pierwszego wystapienia
podanego znaku w lancuchu, w
podanym przykladzie 2
StrRPos
Zwraca miejsce(pozycje)
ostatniego(pierwszego od
konca) wystapienia podanego
znaku w lancuchu, w podanym
przykladzie 2
Strrpos("qwerty","t");
StrRChr
"odcina" czesc lancucha ponizej
ostatniego(pierwszego od
konca) wystapienia podanego
znaku
Strrchr("qwq/qwq/qwq","/
");
Str_Repeat
Powtarza podany lancuch n razy
Str_repeat($string,n);
StrRev
Odwraca kolejnosc znakow w
lancuchu
Strrev("qwq");
StrToLower
Zamienia wszystkie litery na
male
Strtower("QWQ");
StrToUpper
Jak wyzej, tylko w druga strone
Strtoupper("qwq");
Str_Replace
Zastepuje wszystkie ciagi
znakow wystepujace w lancuchu
innym
Str_replace("^stary^","t
aki","jakis tekst
^stary^ sobie");
Strtr
Zastepuje w lancuchu znaki z
jednej grupy odpowiednimi
znakami z drugiej grupy, np.:
obcinanie ogonkow
Strtr($string,
"aceoszz","aceoszz");
SubStr
Zwraca czesc lancucha o
podanej dlugosci, poczynajac od
podanej pozycji(liczac od 0)
Substr("tralala
ARKA!",0,-1);
UcFirst
Zamienia pierwsza litere
lancucha jej wielkim
odpowiednikiem
Ucfirst("polska");
UcWords
Jak wyzej tylko zamienia
wszystkie pierwsze litery w
stringu
UcWords("rzeczyposlpolit
a polska");
Funkcje wprowadzone w najnowszej linii PHP 4.3.0, operujace na stringach poprzedzane sa
zazwyczaj "mb_" posiadaja one mozliwosc pracy na stringach kodowanych w roznych standardach,
moga bezposrednio konwertowac stringi na rozne standardy. Sa one jednak caly czas w stadium
eksperymentalnym.
Funkcje operujace na plikach – na przykladzie prostego licznika odwiedzin strony.
Ale najpierw musimy poznac kilka funkcji operujacych na plikach.
File_exists("plik.txt") – zwraca wartosc flase lub true
Jak juz sprawdzimy, czy dany plik istnieje, mozemy go otworzyc:
Fopen("plik.txt",typ);
tryb moze byc dowolny z ponizszych:
•
'r' - Otworz tylko do odczytu; ustawia wskaznik pliku na poczatku pliku.
•
'r+' - Otworz do odczytu i zapisu; ustawia wskaznik pliku na poczatku pliku.
•
'w' - Otworz tylko do zapisu; ustawia wskaznik pliku na poczatku pliku i obcina plik (zeruje) do
0 dlugosci. Jesli plik nie istnieje to probuje go utworzyc.
•
'w+' - Otworz do odczytu i zapisu; ustawia wskaznik pliku na poczatku pliku i obcina plik
(zeruje) do 0 dlugosci. Jesli plik nie istnieje to probuje go utworzyc.
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 13 -
•
'a' - Otworz tylko do zapisu; ustawia wskaznik pliku na koncu pliku. Jesli plik nie istnieje to
probuje go utworzyc.
•
'a+' - Otworz do odczytu i zapisu; ustawia wskaznik pliku na koncu pliku. Jesli plik nie istnieje
to probuje go utworzyc.
Przy czym w pierwszym polu nie musi wystapic plik lokalny, moze nim byc dowolny plik, do
ktorego mamy dostep poprzez protokoly: HTTP(tylko do odczytu) oraz FTP(zapis i odczyt, ale nie
jednoczesnie). Np.:
$fp = fopen ("/home/rasmus/file.txt", "r");
$fp = fopen ("/home/rasmus/file.gif", "wb");
$fp = fopen ("http://www.example.com/", "r");
$fp = fopen ("ftp://user:password@example.com/", "w");
$fp = fopen ("c:\\data\\info.txt", "r");
Bardzo wazna funkcja jest funkcja flock($fp,parametr), ktora ustawia blokady lub sprawdza stan
pliku.
Chodzi o to, ze w wypadku gdyby w naszym serwisie dwie osoby uruchomily w tym samym czasie
dany plik, w najlepszym wypadku jeden z nich uzyskalby dostep do niekompletnych danych(drugi
uzytkownik w tym samym czasie modyfikowal jego zawartosc), w najgorszym stracilibysmy cala
zawartosc pliku.
Przed jakimi kolwiek zmianami w plikach nalezy wiec zalozyc odpowiednia blokade:
•
1 – dostep do odczytu
•
2 – wylaczny dostep do zapisu
•
3 – zwolnienie blokady
Uzytkownik, ktory chce uzyskac dostep do zapisu musi czekac do chwili, az wszystkie blokady
beda zwolnione. Dopiero wtedy bedzie mogl uzyskac dostep do pliku.
Mozemy z poziomu PHP sprawdzic, blokady, wywolujac funkcje flock z parametrami: 5 – sprawdza
czy mozna cos dopisac do pliku, 6 – sprawdza czy mozna z pliku czytac
Jesli to juz sprawdzilismy i uzyskalismy dostep do plikow rozpoczynamy prace z plikiem:
Najpierw odczyty:
•
fgetc($fp) – pobranie jednego znaku
•
fgets($fp) – pobranie jednego kilobajta znakow, mozna uzyc drugiego parametru i zmniejszyc
lub zwiekszyc ilosc wczytywanych bajtow, znak konca pliku przerywa dzialanie funkcji
•
fread – wczytanie calego pliku do przyklad uzycia:
$filename = "/usr/local/something.txt"; $fd = fopen ($filename, "r");
$contents = fread ($fd, filesize ($filename));
Uwaga: jesli chcemy tylko i wylacznie wyswietlic zawartosc pliku, a plik jest typu txt, lub html i
nie potrzebuje byc dodatkowo formatowany przed wyswietleniem wystarczy uzycie jednej
komendy: readfile(sciezka_do_pliku);
Zapis do pliku:
•
fwrite($fp,$co,$dlugosc) – wpisanie do pliku zmiennej $co, funkcja moze miec 3 parametr –
dlugosc
Inne funkcje realizujace operacje na plikach:
•
filesize($nazwa_pliku);
•
mkdir($nazwa_katalogu);
•
basename($sciezka); - zwraca nazwe pliku, obcina sciezke
•
dirname($siezka); - zwraca nazwe katalogu, obcina sciezke
•
copy($skad,$do_kod);
•
rename($stara_nazwa,$nowa_nazwa);
•
unlink($nazwa_pliku); - usuniecie pliku
•
rmdir($nazwa_katalogu); - jesli katalog jest pusty usuwa go
•
feof($fp); - sprawdza czy osiagnieto juz koniec pliku
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 14 -
•
fileatime($nazwa_pliku); - ostatni dostep do pliku – czytanie
•
filemtime($nazwa_pliku); - ostatni dostep do pliku – modyfikacja
•
ftruncate($fp,$ilosc_znakow); - obciecie pliku do podanej ilosci znakow
•
fclose($fp); - zamkniecie pliku! Nigdy nie zapomnij zamknac pliku po skonczeniu pracy na nim!
Sam kod zrodlowy licznika jest bardzo prosciutki:
<?
$nazwa="licznik.txt";
if(file_exists($nazwa))
{
$plik=fopen($nazwa, "r");
$licz=fgets($plik,10);
flose($plik);
$licz++;
}
else $licz=1;
$plik=fopen($nazwa, "w+");
flock($plik,2);
fwrite($plik,$licz);
lock($plik,3);
fclose($plik);
echo "Strone odwiedzono ".$licz. "razy";
?>
Przyklad wyciagajacy z danej strony jej tytul – w ten sposob mozna pobierac m.in. prognozy pogody
lub newsy z innych portali internetowych.
<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
echo "<p>Nie mozna otworzyc zdalnego pliku.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* Zadziala tylko wtedy, gdy tytul i jego znaczniki sa w tej samej
linii */
if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>
3. Zmienne srodowiskowe, zmienne predefiniowane
Pomimo, iz sa bardzo wazna rzecza dla PHP zostana omowione powierzchownie(poniewaz
uzytkownik, sam, w jednej prostej funkcji moze miec pelny ich spis – phpinfo(); ).
Zmienne predefiniowane sa to takie zmienne, ktorych wartosci sa nadawane automatycznie przez
PHP. Uzyskuje sie w ten sposob informacje o serwerze, kliencie, oraz ich srodowiskach(w niektorych
kompilacjach PHP mozna wyciagac tez konfiguracje).
Kilka przykladow:
$QUERY_STRING
Tablica parametrow przekazane do strony
poprzez adres URL(wiecej w nastepnym
rozdziale)
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 15 -
$HTTP_GET_VARS
Tablica zawierajaca zmienne przeslane do
skryptu metoda GET(wiecej w nastepnym
rozdziale)
$HTTP_POST_VARS
Tablica zawierajaca zmienne przeslane do
skryptu metoda POST(wiecej w nastepnym
rozdziale)
$HTTP_COOKIE_VARS
Tablica zawierajaca zmienne przeslane do
skryptu metoda COOKIE(wiecej w nastepnym
rozdziale)
$PHP_SELF
Pelna sciezka do skryptu na serwerze
$REMOTE_ADDR
Adres IP komputera, z ktorego laczy sie
uzytkownik
$REMOTE_HOST
Nazwa hosta, z ktorego laczy sie uzytkownik
$HTTP_HOST
Nazwa hosta, na ktorym umieszczony jest skrypt
$HTTP_USER_AGENT
Zwraca sygnature uzywana przez przegladarke
uzytkownika
$HTTP_REFERER
Adres URL, z ktorego nastapilo odwolanie
Pelny spis obslugiwanych zmiennych srodowiskowych i predefiniowanych mamy poprzez
wywolanie funkcji phpinfo().
4. Przesylanie danych pomiedzy skryptami – GET, POST
Dane mozna wysylac pomiedzy skryptami dwoma metodami, GET i POST, roznia sie one tym, ze
przekazujac dane metoda GET – parametry przekazywane sa poprzez adres URL(mozna miec do
nich dostep takze poprzez tablice $QUERY_STRING), POST sprawia, ze te dane sa niewidoczne.
Prosty przyklad formularza, logujacego do strony, zwykle podanie imienia, nie pokazuje przykladu
logujacego z uzyciem hasel genrowanych do tokenow MD5, zwykle podanie imienia, ksywa – chodzi o
pokazanie dzialania, przyklad jest podany dla POST, analogicznie nalezy postapic w przypadku
metody GET:
<form name="form1" method="post" action="<?=$PHP_SELF?>">
Podaj swoje imie: <input type="text" name="imie">
<input type="reset" name="Reset" value="Reset">
<input type="submit" name="Submit" value="Submit">
<?
if($HTTP_POST_VARS)
echo "Cze! $HTTP_POST_VARS["imie"] jak leci ;D";
?>
Jak widac tablice POST i GET sa asocjacyjne, wartosc zmiennej podanej do skryptu znajduje sie
w tablicy o indeksie rownym nazwie tej zmiennej.
COOKIE, COOKIES
Sa to za zwyczaj male pliki wysylane do uzytkownikow, przez serwery HTTP, powyzszy przyklad
mozna tak zmodyfikowac, zeby pamietal nas i w ten sposob nie musielibysmy sie za kazdym razem
logowac. Dostep do COOKIES jest bardzo prosty.
Do ustawianie plikow cookies uzywa sie funkcji setcookie(), kilka przykladow:
setcookie ("TestCookie", $wartosc_zmiennej_TestCookie);
setcookie ("TestCookie", $wartosc_zmiennej_TestCookie,time()+3600); /*
traci waznosc za godzine */
setcookie ("TestCookie", $wartosc_zmiennej_TestCookie,time()+3600,
"/~rasmus/", ".utoronto.ca", 1);
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 16 -
Wyjasnienie parametrow: pierwszym jest nazwa zmiennej cookie, drugim jest jej wartosc, kolejne
sa opcjonalne, trzeci argument to czas wygasniecia(time() zwraca aktualny czas w formacie UNIX
mozemy ustawic czas wygasniecia na konkretna date z dokladnoscia do sekundy dzieki zastosowaniu
funkcji mktime()), czwarty parametr, to sciezka w ktora bedzie obejmowala nasza zmienna, dalej
domena oraz poziom bezpieczenstwa.
Aby poznac zawartosc przykladowego ciasteczka ze skryptu, nalezy zastosowac ponizszy
przyklad:
echo $TestCookie;
echo $_COOKIE["TestCookie"]
Wiecej informacji na temat ciasteczek znajduje sie w specyfikacji Netscape'a, na stronie
wbudowanych kilka protokolow obslugi poczty(z SMTP oraz POP3, IMAP na czele) nie mniej jednak
zajmiemy sie najprostsza funkcja, pozwalajaca wysylac maile ze strony WWW.
5. Dostep do poczty
Programiscie PHP udostepniono bardzo rozbudowana funkcje mail() oprocz tego mamy dostep do
skrzynek pocztowych poprzez licznie zaimplementowane protokoly, my jednak zajmiemy sie tylko
jedna funkcja(ale jakze rozbudowana!).
Najprosciej wyslac maila mozemy pisza ponizsza linie:
mail("joecool@example.com", "Temat listu", "Linia 1\nLinia 2\nLinia 3");
mozemy wysylac maile rowniez z naglowkami, mozemy w ten sposob wysylac zalaczniki, wysylac
poczte w standardzie HTML, zmieniac kodowanie znakow etc. Prosty przyklad zlozonego maila.
/* adresaci */
$do = "Marysia <marysia@example.com>" . ", " ; // zwroc uwage na przecinek
$do .= "Kasia <kasia@example.com>";
/* temat */
$temat = "Przypomnienie o urodzinach w Sierpniu";
/* wiadomosc */
$wiadomosc = '
<html>
<head>
<title>Przypomnienie o urodzinach w Sierpniu</title>
</head>
<body>
<p>Te urodziny bedziemy swietowac w Sierpniu!</p>
<table>
<tr>
<th>Osoba</th><th>Dzien</th><th>Miesiac</th><th>Rok</th>
</tr>
<tr>
<td>Jan</td><td>3.</td><td>Sierpnia</td><td>1970</td>
</tr>
<tr>
<td>Szymon</td><td>17.</td><td>Sierpnia</td><td>1973</td>
</tr>
</table>
</body>
</html>
';
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 17 -
/* Aby wyslac e-mail w formacie HTML, nalezy ustawic naglowek Content-type.
*/
$naglowki = "MIME-Version: 1.0\r\n";
$naglowki .= "Content-type: text/html; charset=iso-8859-1\r\n";
/* dodatkowe naglowki */
$naglowki .= "From: Przypominacz o urodzinach <urodziny@example.com>\r\n";
$naglowki .= "Cc: archiwum_mailingu@example.com\r\n";
$naglowki .= "Bcc: kontrola_mailingu@example.com\r\n";
/* a teraz wyslij */
mail($do, $temat, $wiadomosc, $naglowki);
6. PHP i bazy danych
PHP wspolpracuje(w wersji 4.3.2 z 21 roznymi bazami danych). Omowie najczesciej wystepujace
polaczenie PHP + MySQL. Prawde mowiac, wszelkie roznice na poziomie technicznym sa
wyrownywane przez PHP, to PHP wzielo na swoje barki dopasowanie do bazy danych, uzytkownik,
tak naprawde uzywa tylko innych komend, ktore na dobra sprawe dzialaja podobnie – zwracaja te
same rezultaty.
PHP ulatwia wspolprace z baza danych, nie mniej jednak czesc rzeczy nalezy robic na piechote
uzywajac polecen jezyka SQL(np.: zakladanie tablic).
Pokaze krok po kroku, jak nalezy polaczyc sie z MySQL, stworzyc baze, tablice, umiescic rekord,
zmodyfikowac, wyszukac, pobrac, usunac rekord, usunac tablice, usunac baze, zamknac polaczenie z
serwerem.
$ok=mysql_connect($serwer,$user,$passwd);
mysql_create_db(budnik);
mysql_select_db(budnik);
$zapytanie = "CREATE TABLE x_dzis ( ".
"id int(11) DEFAULT '0' NOT NULL auto_increment, ".
"klucz blob NOT NULL, ".
"data DATETIME, ".
"rec int(11) NOT NULL, ".
"UNIQUE id (id), ".
"PRIMARY KEY (id) ".
")";
$wynik = mysql_query($zapytanie);
if($wynik) echo "Tabela <b>x_dzis</b> zalozona prawidlowo!<br>";
else echo "Blad! Tabela <b>x_dzis</b> nie zostala zalozona!<br>";
$zapytanie = "INSERT INTO x_dzis (klucz,data,rec) values
('pliki_max','',0)";
$wynik = mysql_query($zapytanie);
$zapytanie = "UPDATE x_dzis SET rec=29475 WHERE klucz='pliki_max'";
$wykonaj=mysql_query($zapytanie);
$zapytanie = "SELECT x_dzis.pliki_max as pobrania FROM x_dzis where klucz
like \"%$znajdz%\" ORDER BY pobrania DESC";
$wykonaj = mysql_query ($zapytanie);
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 18 -
$zapytanie = "SELECT x_dzis.pliki_max as pobrania FROM x_dzis ORDER BY
pobrania DESC";
$wykonaj = mysql_query ($zapytanie);
while($wiersz=mysql_fetch_array ($wykonaj)) {
echo "Moj rekord: ".$wiersz['pobrania']."<p>";
}
$zapytanie = "DELETE FROM x_dzis where id=$id_do_skasowania ";
$wykonaj = mysql_query ($zapytanie);
mysql_drop_table(x_dzis);
mysq_drop_db(budnik);
mysql_close($ok);
Przyklad kodu, ktory wyswietla, wersje systemu, serwera WWW, serwera MySQL, PHP oraz
Engine Zend(przyspieszajacy dzialanie skryptow)
<?
mysql_connect ("localhost","login_moj","***** ;D");
mysql_select_db (budnik);
$zapytanie = "select version() as wersja";
$wykonaj = mysql_query ($zapytanie);
while($wiersz=mysql_fetch_array ($wykonaj)) {
echo "MySQL version: ".$wiersz['wersja']."<p>";
}
echo "PHP version: " . phpversion()."<p>";
echo "Zend engine version: " . zend_version()."<p>";
echo "<p>Serwer: $_SERVER[SERVER_SOFTWARE]<br>";
?>
Osobom chcacym doglebnie poznac techniki wspolpracy PHP i aplikacji
internetowobazodanowych polecam ksiazke "PHP3 Internetowe aplikacje bazodanowe".
Zamieszczone powyzej przyklady nie sa w stanie ukazac wszystkich mozliwosci "tandemu" PHP-
MySQL. Polecam kurs MySQL Mateusza Dutkiewicza, autor nie posiada wlasnej strony domowej,
jednakze kurs jest dostepny miedzy innymi na stronie:
http://webmaster.gery.pl/
.
7. Naglowki HTTP
Kazda strona WWW wysylana przez serwer jest zaopatrzona w naglowki HTTP, z poziomu PHP
oczywiscie mozemy je modyfikowac, mozemy podlaczac nawet kody skryptow PHP do plikow
swf(animacja Flasha), ktore by np.: liczyly wyswietlenia banera, lub po cichu pobieral informacje o
uzytkowniku i wysylal nam raporty na poczte etc.
Do manipulowania naglowkami sluza funkcje: juz poznana setcookie oraz dwie zblizone do siebie
funkcje header i headers_sent. Pierwsza wysyla naglowki, a druga sprawdza czy naglowki juz zostaly
wyslane.
Zarowno naglowki jak i cookies musza byc wyslane jako pierwsze, jesli wypisalismy cos komenda
echo to juz nie wyslemy juz cookie lub innych naglowkow, poniewaz naglowki juz zostaly wyslane
przez serwer do uzytkownika.
Przyklad zastosowania header() do logowania.
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 19 -
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Tekst do wyslania, jesli uzytkownik wcisnie przycisk Anuluj';
exit;
} else {
echo "<p>Hej {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Twoje haslo to {$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>
Mozemy wysylac naglowki, blokujace dany plik, np.: nie chcemy aby jakas osoba miala dostep do
wybranego pliku, wystarczy zablokowac jego IP, poprzez wyswietlenie:
<?php
header("HTTP/1.0 404 Not Found");
?>
Nastepuje tutaj odwolanie do ErrorDocument’ow (wiecej na ich temat pod adresem: tkownika na
inny adres np.:
<?php
header("Location: http://www.example.com/"); /* Przekieruj przegladarke */
exit; /* Upewnij sie, ze kod ponizej nie zostanie wykonany
po przekierowaniu. */
?>
Skrypty PHP czesto sluza do generowania dynamiczej tresci, ktora nie moze byc buforowana
przez klienta czy serwer proxy. Pamiec cache (bufor) w wiekszosci tych urzadzen da sie wylaczyc
dzieki:
<?php
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // data w przeszlosci
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// ciagle
modyfikowany
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>
Na koniec przyklad pobrania pliku PDF z poziomu PHP. W ten sposob mozemy wlaczac rozne
typy plikow na strone WWW, co wiecej mozemy w ten sposob wykonac ukryte operacje, uzytkownik
bedzie przekonany, ze wczytuje zwykly dokument PDF, podczas gdy mozemy w tym czasie pobierac
numery jego portow z zapisem rekordow DNS, zwracanych po sprawdzeniu jego hosta.
Samo wczytanie to tylko trzy linie(nie liczac komentarzy i pustych linii):
<?php
// przesylamy plik PDF
header("Content-type: application/pdf");
// ustawiamy jego nazwe na downloaded.pdf
header("Content-Disposition: attachment; filename=downloaded.pdf");
// tresc znajduje sie w pliku original.pdf
readfile('original.pdf');
?>
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 20 -
8. Sesje, mechanizmy sledzenia sesji
Sesje to stosunkowo ‘nowy wynalazek’ – sesja mozna nazwac czas przegladania przez
uzytkownika strony WWW. Mechanizmy sesji sluza temu, aby uzytkownik po zalogowaniu sie do
systemu mogl swobodnie poruszac sie po wszystkich strona serwisu. Mozna nakladac na niego
wymogi czasowe lub udostepnic tylko kilka stron.
Ale po co to wszystko? Po pierwsze dla wygody, uzytkownik raz zalogowany moze poruszac sie
po calym serwisie(bez potrzeby co rusz ponownego logowania – np.: przy otwieranym nowym oknie
tego samego serwisu) po drugie mozemy zbierac informacje na temat ‘ruchow’ uzytkownika, po
trzecie mozemy umozliwic uzytkownikowi wplyw na ogladana strone.
Gdzie sie stosuje sesje? Rozbudowane systemy pocztowe, sklepy internetowe, nawet systemy
bankowosci internetowej.
Mechanizmy sesji sa skomplikowanymi mechanizmami rozpoznawania uzytkownika, zazwyczaj
lacza w sobie przekazywanie zmiennych ukrytych i cookies. PHP sam wybiera w jaki sposob ma
sledzic sesje. Najczesciej stosuje sie mechanizm bazujacy na cookie, jednakze starsze przegladarki
nie obsluguja tych plikow, lub np.: uzytkownik ma zablokowana opcje przyjmowania plikow cookie od
serwerow, w takim wypadku PHP uzywac bedzie mechanizmy opartego na ukrytych zmiennych.
Zalety mechanizmu cookie. Uzytkownik podczas sesji moze opuscic nasza strone i dopiero po
chwili na nia wrocic i wtedy sesja(o ile nie wygasla) bedzie bez problemu normalnie kontynuowana.
Mechanizm ukrytych zmiennych opiera sie na zmiennych POST i GET, wymaga, aby wszystkie
strony pod sesja do formularzy oraz do wszystkich adresow dopisywaly sesion_id(identyfikatory sesji).
Jest to bardzo niewygodne. Poza tym, jak juz wczesniej pisalem, jesli uzytkownik opusci nasz serwis,
to oczywiscie zmienne POST i GET zostana wyslane do innej strony, ale wracajac potem na nasza
strone stracimy sesje.
Powyzsze metody sluza do zapamietywania sesji, ale gdzie sa przechowywane dane i zmienne
sesji? Tu juz wystepuje tylko i wylacznie jeden mechanizm – z uzyciem GET i POST.
Pod koniec tego rozdzialu umiescilem w jaki sposob nalezy skonfigurowac PHP, aby obslugiwalo
poprawnie nasze sesje.
Zanim jednak przejdzmy do konkretnego przykladu omowie krotko funkcje sesji.
Najpierw trzeba rozpoczac sesje i przydzielic uzytkownikowi jego identyfikator sesji. Robi to
bezargumentowa funkcja
session_start()
. Stosuje sie takze funkcje session_register(), ktora
powoduje niejawne wywolanie session_start(). Jesli juz jest aktywna sesja, session_start odczytuje
zmienne sesji i zamienia je na zwykle zmienne lokalne. Zrobmy tu mala uwage, wlasciwie to dwie. Po
pierwsze zmienne sesji to zmienne super globalne. Sa przekazywane od strony do strony, w kazdej z
nich sa zmiennymi globalnymi. Po drugie kazda strona naszego serwisu, ktora ma obslugiwac sesje
powinna zawierac funkcje session_start(), mozemy jednak w pliku konfiguracyjnym php.ini wymusic na
PHP, aby automatycznie zaczynala sesje, dla wszystkich uzytkownikow, zaoszczedzi to nam fatygi.
Konfiguracja php.ini – pod koniec tego rozdzialu.
Zarejestrujmy zatem pierwsze zmienne w naszej sesji.
session_start();
print($zmienna);
session_register(‘zmienna’);
printt($zmienna);
$zmienna=123.321;
Co tak wlasciwie zrobilismy? Zalozmy, ze session_start() odczytalo juz otwarta sesje, zalozmy, ze
$zmienna zostala przekazane z poprzedniej strony.
Po wykonaniu session_start() zmienna $zmienna stala sie zwykla zmienna globalna, potem
jednak przy pomocy session_register() i podaniu w niej w nawiasach, zwanymi uszami, nazwy
ustawilismy ponownie ta zmienna na zmienna sesji – czyli ma byc przekazana kolejnym stronom, w
naszym przykladzie, zmienilismy jeszcze wartosc(oczywiscie, nowa wartosc zostanie zapamietana i
przekazana dalej). Jesli bysmy ponownie nie zarejestrowali zmiennej $zmienna to po przejsciu do
nowej strony stracilibysmy ja. Nalezy takze pamietac, o tym, ze PHP importuje wszystkie zmienne
jednoczesnie(wraz z wywolaniem session_start()), ale eksportowac musimy juz sami i tylko
pojedynczo(jesli mamy wiecej zmiennych, to oczywiscie musimy kilkukrotnie wywolac
session_registert() z odpowiednimi nazwami jako parametrem.
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 21 -
Przyjrzyjmy sie najwazniejszym funkcjom obslugujacym sesje.
funkcja
opis
session_start()
bezargumentowa, powoduje odczytanie
identyfikatora sesji lub jesli nie jest w stanie go
odszukac rozpoczyna nowa sesje
session_register()
rejestruje zmienna w danej sesji(jako parametr
podaje sie nazwe zmiennej)
session_unregister()
usuniecie zmiennej(nazwa podana jako parametr)
z biezacej sesji
session_is_registered()
sprawdza, czy dana zmienna(nazwa podawana
jako parametr) zostala juz zarejestrowana w
biezacej sesji, zwraca True lub False
session_destroy()
usuwa sesje, po przejsciu do nowej strony
stracone zostana wszystkie zmienne sesji(w
biezacym skrypcie beda jeszcze dostepne jako
zwykle zmienne globalne)
session_id()
zwraca ciag, ktory jest kluczem okreslajacy sesje
session_encode()
zwraca ciag z zakodowany stanem sesji, pozwala
to na pozniejsze odczytanie stany sesji i
kontynuowanie jej
session_decode()
funkcja rozkodowujaca stan sesji, zakodowany
funkcja session_encode()
Przytocze teraz prosty przyklad z ksiazki "PHP 4 Biblia".
<?php
session_start();
session_register('pagecount');
session_register('username');
if (IsSet($pagecount))
$pagecount++;
else
$pagecount = 1;
$pagecount_limit = 5;
?>
<HTML><HEAD><TITLE>Strona testowania sesji</TITLE>
</HEAD><BODY>
<H3>Testowanie sesji</H3>
Identyfikatorem sesji jest <?php print(session_id());?><BR>
Moze istniec wiecej innych identyfikatorow sesji, ale ta jest twoja.
<P>Nie zapisuj biezacego identyfikatora sesji.
Jest on tak naprawde tylko identyfikatorem technicznym.
PHP potrzebuje go do dzialania, ale ty prawdopodobnie nie.<BR>
<?php
if (IsSet($posted_username))
$username = $posted_username;
if (IsSet($username))
{
print("<P>Znamy twoje imie! To $username<BR>");
}
?>
<P>Liczba stron odwiedzonych w tej sesji: <?php print($pagecount);?>
<BR>
<?php if ($pagecount == 1)
print("Musiales dopiero zajrzec!<BR>"); ?>
Mozesz obejrzec tylko <?php print($pagecount_limit);?>
stron w czasie sesji.<BR>
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 22 -
<P>To jest lacze do
<A HREF="<?php echo $PHP_SELF;?>">tej samej strony</A>.<BR>
Przejscie tutaj zwieksza ilosc stron <BR>
odwiedzonych w czasie sesji, ale nie robi wiele wiecej.
<P>Tutaj jest formularz w ktorym jezeli chcesz mozesz podac
nam swoje imie.<BR>
Nie sprzedamy go nikomu.<BR>
<P><FORM METHOD=POST ACTION="<?php echo $PHP_SELF;?>" >
Nazywam sie:
<INPUT TYPE=TEXT SIZE=20 NAME=posted_username><BR>
<INPUT TYPE=SUBMIT NAME=SUBMIT VALUE="Zapamietaj mnie!">
</FORM>
</BODY></HTML>
<?php
if ($pagecount >= $pagecount_limit)
session_destroy();
?>
I jeszcze na koniec, tak jak obiecalem przyjrzyjmy sie plikowi konfiguracyjnemu(php.ini) pod kontem
obslugi sesji(najwazniejsze opcje).
zmienna
wartosc domyslna
opis
session.save_path
/tmp
sciezka do katalogu, w ktorym
PHP bedzie przetrzymywalo
tymczasowe pliki zwiazane z
obsluga sesji(przechowywanie
zmienny etc)
session.auto_start
0
opcja, o ktorej wspominalem
wczesniej, ustawiona na 1 kaze
PHP domyslnie uruchamiac
mechanizmy sesji na kazdej
stronie(ma to swoje plusy, ale i
minusy, np.: jesli tylko czesc
serwisu uzywa sesji, to nie ma
najmniejszego sensu zmieniac
te wartosc)
session.cookie_lifetime
0
tak ja pisalem wczesniej sesje
moga byc wazne "na kilka stron"
lub tez na okreslony czas, czasy
podaj sie w sekundach, przy
czym 0 oznacza, ze sesja
konczy sie w momencie
zamkniecia przegladarki
session.use_cookies
1
Wymusza na PHP podjecie
proby zapisu identyfikatora sesji
w pliku cookie, jesli jest
ustawiona na 0, PHP nie bedzie
nawet probowal(szczegoly
przenoszenia identyfikatorow
przez cookie i zmienne ukryte
zostaly wczesniej omowione)
To by bylo na tyle.
Zapraszam jeszcze raz wszystkich do blizszego zapoznania sie z dynamiczna technologia
PHP i dobrodziejstwami jakimi nas uzytkownikow i administratorow obdarza. Mam nadzieje, ze
argumenty przedstawione przez mnie w pierwszej czesci referatu zainteresowaly Was, a kurs, choc
© Lukasz Budnik, Wejherowo 2003
Tworzenie dynamicznych stron WWW – technologia PHP. Mozliwosci, zastosowanie.
- 23 -
krotki, lapidarny(przez co moze i troche trudny), utwierdzil Was w przekonaniu, iz naprawde warto
sprobowac.
Jesli macie jakiekolwiek pytania, watpliwosci, piszcie koniecznie! moj adres e-mailowy to:
mailto:admin@komputery-internet.net
, zapraszam takze do mojego serwisu:
http://www.komputery-
internet.net/
.
Lukasz Budnik
PG, ETI, sem. 02