PHP Kurs

background image

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

background image

© 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>&nbsp;</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">

background image

© 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>

background image

© 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.

background image

© 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

background image

© 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.

background image

© 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);

background image

© 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.

background image

© 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";

background image

© 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

background image

© 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");

background image

© 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.

background image

© 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

background image

© 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)

background image

© 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);

background image

© 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>
';

background image

© 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);

background image

© 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'])) {

background image

© 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');
?>

background image

© 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.

background image

© 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>

background image

© 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

background image

© 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


Wyszukiwarka

Podobne podstrony:
PHP kurs 2
PHP kurs
Kurs PHP v1
Kurs PHP & MYSQL
Kurs PHP dla początkujących
kurs php fusion 7T67UCH4LSQRCFDFBO5SKMNWJWRZN7MOTXXZWSA
KURS PHP, Informatyka
Kurs Php & Mysql, Informatyka, ● PHP, MySQL, ORACLE
Kurs PHP v2
Ajax Kurs od podstaw Część 3 Ajax, PHP i pliki tekstowe
Kurs Php & Mysql(1)
PHP 5 Praktyczny kurs Wydanie II
PHP 5 Praktyczny kurs Wydanie II 2

więcej podobnych podstron