Forum Z A P R A S Z A M Strona Główna
Zaloguj Rejestracja Profil Zaloguj się, by sprawdzić wiadomości FAQ Szukaj Użytkownicy Grupy
Kurs PHP

 
Napisz nowy temat   Odpowiedz do tematu    Forum Z A P R A S Z A M Strona Główna -> Webmastering
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 9:51, 14 Lip 2006    Temat postu: Kurs PHP

Skrypty PHP są to programy umieszczane w treści stron [link widoczny dla zalogowanych] Są one wykonywane przez serwer przed wysłaniem strony do użytkownika. Mają bardzo duże moliwości, ale mimo to są dość proste.
Bardzo łatwa jest obsługa formularzy za pomocą skryptów PHP.
Jedną z największych zalet skryptów PHP jest bardzo łatwa integracja z wieloma bazami danych.
--------------------------------------------------------------------------------
Ten kurs opisuje jedynie wykorzystanie bazy Postgres SQL, ale obsługa innych baz jest podobna. Oprócz tego skrypty PHP mają wiele innych ciekawych możliwości, jak dynamiczne tworzenie obrazków w formacie GIF, i możliwość łatwego wysyłania plików na serwer.
Dzięki temu skrypty PHP stanowią ciekawą alternatywę dla skryptów CGI pisanych w Perlu, czy innych językach.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 9:53, 14 Lip 2006    Temat postu: S K Ł A D N I A

Część 1 - Składnia języka

Jak umieścić skrypt PHP na stronie

Skrypt PHP można umieścić w pliku HTML o rozszerzeniu ustalonym przez administratora serwera. Zwykle są to pliki *.php3 dla wersji 3.0 i *.phtml dla wersji wcześniejszych.
Fragment dokumentu który ma zastać zinterpretowany jako skrypt można zaznaczyć na 4 sposoby:


1. <? (treść skryptu) ?>
2. <?php (treść skryptu) ?>
3. <script language="php"> (treść skryptu) </script>
4. <% (treść skryptu) %> (od wersji 3.0.4)

Wybór użytego sposobu może zależeć od innych rozszerzeń języka HTML, ewentualnie od ograniczeń zastosowanego do tworzenia strony edytora
(w tym wypadku zwykle używa się sposobu 3).



--------------------------------------------------------------------------------
Najprostszy skrypt

Na początku jedna uwaga: znaczniki <? i ?> można zastąpić dowolnymi wymienionymi wyżej.
W następnych przykładach będe je pomijał, podając jedynie treść skryptu.

<? echo("To jest prosty skrypt PHP"); ?>

W miejscu gdzie zostanie wstawiony ten skrypt powinien pojawić się napis To jest prosty skrypt PHP. Ten skrypt składa się tylko z jednej instrukcji.

Instrukcje w skryptach PHP są kończone średnikami. Znacznik końca skryptu także kończy instrukcję, więc średnika na końcu tej lini mogłoby nie być.
Dobrym zwyczajem jest jednak stawianie średnika także po ostatniej instrukcji. Pomaga to w unikaniu pomyłek - jeżeli teraz dopisze jakieś instrukcje na końcu skryptu wszystko będzie w porządku. Gdyby średnika nie było, pojawiłby się błąd.



--------------------------------------------------------------------------------
Komentarze

Komentarz to wstawiany w skrypcie kawałek tekstu który jest po prostu ignorowany.
Komentarze są przydatne zwłaszcza przy pisaniu dłuższych skryptów, w których nie widać na pierwszy rzut oka co który fragment robi.
Komentarze w skryptach PHP są oznaczane tak jak w języku C - znakami /* i */, np:
echo("Kawałek<BR>tekstu")
/* Poprzednia linia wyświetla w 2 liniach napis
"kawałek tekstu".
Nie jest to zbyt odkrywcze, ale w końcu
chodzi o przykład zastosowania komentarza Wink */

Jak widać komentarz może mieć na kilka lini.


--------------------------------------------------------------------------------
Wykorzystanie zmiennych

W skryptach PHP wykorzystanie zmiennych jest dużo prostsze niż w wielu innych językach.
Nazwy zmiennych zawsze zaczynają się od znaku $. Nie jest konieczne deklarowanie zmiennych, tak jak ma to miejsce w wielu innych językach.
Aby stworzyć zmienną wystarczy nadać jej jakąś wartość, np:
$a=7;
$b="Jakiś tekst";
$c=2.654;
$d=0.0

Jeszcze słowo wyjaśnienia na temat typów zmiennych. PHP obecnie obsługuje następujące typy zmiennych:

integer - liczba całkowita
double - liczba rzeczywista
string - tekst
array - tablica
object - złożone zmienne definiowane przez użytkownika
pdfdoc (Tylko przy włączonej obsłudze dokumentów PDF)
pdfinfo (Tylko przy włączonej obsłudze dokumentów PDF)
Typ zmiennej jest określany automatycznie na podstawie przypisywanej wartości.
I tak w powyższym przykładzie $a ma typ integer, $b ma typ string a $c i $d mają typ double
(0 jest co prawda liczbą całkowitą, zle każda liczba zawierająca kropkę jest traktowana jako rzeczywista).
Jak widać na powyższym przykładzie, tekst powinien być zawsze ujęty w cudzysłowy.
Jeżeli chcemy w tekście umieścić cudzysłów, należy poprzedzić go znakiem \.
To samo dotyczy znaku $. W celu umieszczenia wewnątrz tekstu znaku \ należy napisać \\.
Aby umieścić w tekście znaku nowej lini można użyć sekwencji \n. Wewnątrz tekstu można też użyć zdefiniowanych wcześniej zmiennych:
$a=3;
$b="Jakaś wartość";
$c="$a, $b";

Zmienna $c będzie miała wartość "3, Jakaś wartość".



--------------------------------------------------------------------------------
Tablice

Tablica to wiele zmiennych ułożonych kolejno, do których można dostać się za pomocą indeksu. Tak samo jak w przypadku zwykłych zmiennych, aby stworzyć tablicę wystarczy przypisać wartość któremuś z jej pól:
$tablica[0]="wartość pola 0";
$tablica[1]="wartość pola 1";
$tablica[2]="wartość pola 2";
$tablica[3]="wartość pola 3";
$tablica[4]="wartość pola 4";

Jako indeksu można użyć innej zmiennej, np.

$indeks=3;
$tablica[$indeks]=27;



--------------------------------------------------------------------------------
Operatory i wyrażenia

Poprzedni przykład ograniczał się tylko do przypisania kilku zmiennym wartości. Oczywiście można na nich wykonywać działania:
$a=5;
$b=$a+2; /* $b ma wartość 7 */
$b=$b+3; /* teraz $b ma wartość 10 */
$b+=3; /* to ma efekt taki sam jak $b=$b+3, z tym że
jest wyraźniejsze w zapisiei szybciej działa */
$c=2*$a+3*($b-$a); /* tego już chyba nie musze wyjaśniać */

W jednej lini można umieścić kilka przypisań, np:


$a=$b=5;

Przypisania są obliczane od prawej strony (w tym wypadku najpierw zmiennej $b przypisywana jest wartość 5, potem zmiennej $a wartość zmiennej $b).

PHP obsługuje kilka typów porównań. Porównanie ma wartość 1 jeżeli warunek jest spełniony, lub 0 gdy nie jest.

$a==$b - spełnione gdy $a i $b są równe. Należy pamiętać że $a=$b jest operacją przypisanie - zmiennej $a jest przypisywana wartość $b, i całe wyrażenie ma wartość $b.
$a>$b - spełnione gdy $a jest większe od $b
$a>=$b - spełnione gdy $a jest większe lub równe $b
$a<$b - spełnione gdy $a jest mniejsze od $b
$a<=$b - spełnione gdy $a jest mniejsze lub równe $b

--------------------------------------------------------------------------------
Tworzenie funkcji

W programach przykładowych były już użyte funkcje, chociaż nie było o tym mowy. Konkretnie była użyta funkcja echo. Jest to przykład funkcji zdefiniowanej przez twórców języka PHP. Ale można też stworzyć własną funkcję.
Wygląda to tak:

Function f($a, $b)
{
$a+=$b;
echo($a);
}

f(7, 2); /* teraz wykonają się komendy
zawarte w treści funkcji. Zmienna
$a będzie miała wartość 7, $b 2 */

Jak widać deklaracja funkcji zaczyna się od słowa Function. Następnie podaje się nazwę funkcji i w nawiasie listę parametrów oddzielonych przecinkami.
Potem w nawiasach klamrowych należy podać treść funkcji. W celu wywołania funkcji podaje się jej nazwę i w nawiasach listę wartości parametrów.
Jeżeli nie przekazuje się żadnych parametrów, i tak należy po nazwie funkcji umieścić pusty nawias.
Funkcji należy używać, gdy dany fragment kodu musi zostać wykonany w wielu miejscach. Dobrze jest też dłuższe fragmenty skryptów umieścić w kilku funkcjach w celu zwiększenia przejżystości.



--------------------------------------------------------------------------------
Zmienne w funkcjach

Kiedy zmienna jest zadeklarowana poza funkcją, jej wartość nie będzie widoczna w funkcji. Ilustruje to przykład:
$a=5;

Function f()
{
echo($a);
}

f();

Wykonanie powyższego kodu nie spowoduje, jak mogłoby się wydawać, wyświetlenia liczby 5. Żeby zmienna globalna (w tym wypacku $a) była widoczna wewnątrz funkcji, należy użyć polecenia global:

$a=5;

Function f()
{
global $a;
echo($a);
}

f();

Po wykonaniu powyższego kodu w dokumencie pojawi się liczba 5.
Jeżeli stworzymy zmienną wewnątrz funkcji, jej wartość będzie za każdym wywołaniem ustawiana od początku:

Function f()
{
$a=2;
echo($a);
$a++;
}

f();
f();


Wykonanie tego kodu spowoduje pojawienie się dwa razy tego samego. Jeżeli chcemy, żeby zmienna nie raciła wartości po zakończeniu funkcji, należy użyć polecenia static:

Function f()
{
static $a=2;
echo($a);
$a++;
}

f();
f();

Teraz w dokumencie pojawi się najpierw liczba 2, potem 3.


--------------------------------------------------------------------------------
Zwracanie wartości

Funkcja może zwrócić wartość. używa się do tego polecenia return:
Function f($p)
{
return 3*$p;
}

$a=f(7);
echo($a); /* $a ma wartość 21 */
/* można też od razu echo(f(7)); */

Ten skrypt wyświetli liczbę 21.
Po zwróceniu wartości kończy się wykonanie funkcji:


Function f()
{
return 3;
echo("Ten tekst się nie wyświetli");
}

Po wykonaniu polecenia return kończy się działanie funkcji i funkcja echo nie jest wywoływana.


Post został pochwalony 0 razy

Ostatnio zmieniony przez obrzyn1986 dnia Pią 9:54, 14 Lip 2006, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 9:54, 14 Lip 2006    Temat postu: W A R U N K I

Część 2 - Warunki i pętle


Instrukcja warunkowa if/else

Czasem chcemy, żeby fragment kodu wykonał się tylko pod jakimś warunkiem. Stosuje się wtedy instrukcję if:
if($a>$b)
echo("$a jest większe od $b");

Jeżeli wartość $a jest większa od $b wyświetli się napis "$a jest większe od $b".
Warunek jest spełniony, jeżeli wyrażenie w nawiasie ma wartość różną od zera.
Jeżeli będzie to np. pusta zmienna warunek nie jest spełniony. Polecenie w następnej lini zostanie wykonane, jeżeli warunek jest spełniony. Aby warunek objął kilka poleceń, stosuje się nawiasy klamrowe:

if($a>$b)
{
echo("$a jest większe od $b");
$a++;
}

Jeżeli chcemy wykonać inny fragment kodu gdy warunek nie jest spełniony, stosujemy instrukcję else:

if($a>$b)
echo("$a jest większe od $b");
else
echo("$a jest mniejsze lubrówne $b");

Aby uzyskać bardziej złożony warunek można zastosować operatory logiczne i (&) oraz lub (|):

if($a>$b|$a<2)
echo("$a jest większe od $b, lub mniejsze od 2");



--------------------------------------------------------------------------------
Operatory logiczne

Aby połączyć kilka warunków można użyć specjalnych operatorów logicznych. Są to:
|| - alternatywa (lub)
&& - koniunkcja (i)
! - negacja (zaprzeczenie)
Przykład:

$a=1;
$a=3;

if($a==1&&$b==2) echo("A");
if($a==1||$b==2) echo("B");
if(!($a==1&&$b==2)) echo("C");

Wynikiem tego skryptu będzie napis "BC". Operator zaprzeczenia można też dla wygody połączyć z operatorem porównania, np:

$a=1;
if($a!=2) echo("Warunek spełniony");



--------------------------------------------------------------------------------
Pętla while

Aby fragment kodu wykonać wiele razy stosuje się pętle. PHP obsługuje 3 rodzaje pętli: while, do..while i for. Najprostszą z nich jest pętla while:
$a=0;
while($a<5)
{
echo("$a ");
$a++;
}

W pętli while najpierw sprawdzany jest warunek (w tym wypadku $a<5).
Jeżeli jest spełniony, pętla wykonuje się i wraca do sprawdzenia warunku. Jeżeli warunek nie jest spełniony, wykonanie pętli kończy się. Powyższy skrypt wyświetli liczby od 0 do 4.


--------------------------------------------------------------------------------
Pętla do..while


$a=0;
do
{
echo("$a ");
$a++;
}while($a<5);

Pętla do..while różni się od pętli shile tym, że najpierw wykonuje się pętla, a dopiero potem sprawdzany jest warunek. Oznacza to, że pętla zawsze wykona się co najmniej 1 raz.
Powyższy skrypt zadziała tak samo jak poprzedni. Różnica będzie widoczna w poniższych pętlach:

$a=6;
do
{
echo("$a ");
$a++;
}while($a<5); /* ta pętla wykona się 1 raz */

$a=6;
while($a<5)
{
echo("$a ");
$a++;
} /* instrukcje w tej pętli nie zostaną wykonane */



--------------------------------------------------------------------------------
Pętla for

Wykonanie pętli for:
for($a=0;$a<5;$a++)
{
echo("$a ");
}

Odpowiada wykonaniu pętli:

$a=0;
while($a<5)
{
echo($a);
$a++;
}

Można to też zapisać jako

for($a=0;$a<5;echo("$a "), $a++);



--------------------------------------------------------------------------------
Instrukcje break i continue

Wykonanie pętli można w każdym momencie zakończyć. Służy do tego instrukcja break:
$a=0;
while($a<10)
{
$a++;
if($a==3)
break;
}

Ta pętla nie wykona się 10 razy - gdy $a osiągnie wartość 3, wykonanie pętli zostanie przerwane. Można też przejść do następnego powtórzenia - służy do tego instrukcja continue:

$a=0;
while($a<10)
{
$a++;
if($a==3)
continue;
echo("aaa"); /* ta instrukcja wykona
się tylko gdy $a nie jest równe 3 */
}



--------------------------------------------------------------------------------
Instrukcja switch

Czasem zmienna może mieć jedną z kilku wartości, w zależności odktórych należy podjąć odpowiednią akcję. Można to zrobić stosując instrukcję if:
if($a==1)
{
echo("a jest równe 1");
}

if($a==3)
{
echo("a jest równe 3");
}

if($a==11)
{
echo("a jest równe 11");
}

Dużo wygodniejsze jest zastosowanie instrukcji switch:


switch($a)
{
case 1:
echo("a jest równe 1");
break;

case 3:
echo("a jest równe 3");
break;

case 11:
echo("a jest równe 11");
break;
}


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 9:57, 14 Lip 2006    Temat postu: F O R M U L A R Z E

Część 3 - Formularze i poczta

Obsługa formularzy

Skryptu PHP można użyć do obsługi formularza. Aby tego dokonać, należy najpierw odpowiednio przygotować formularz.
W znaczniku FORM w parametrze ACTION należy podać adres dokumentu PHP mającego obsłużyć ten formularz. Parametr METHOD może mieć wartość POST lub GET - obie metody są obsługiwane przez PHP.
Jednak należy pamiętać, że formularze wysyłane przez GET mają dość ograniczoną długość. Ich zaletą jest za to, że użytkownik może zrobić sobie zakładkę do wyników formularza, co nie jest możliwe w przypadku formularzy POST.
Należy pamiętać o zdefiowaniu nazw wszystkich pól formularza z których skrypt ma skorzystać. Przykład:
<FORM ACTION=skrypt.php3 METHOD=POST>
<INPUT TYPE=TEXT NAME=tekst>
</FORM>


Napisanie skryptu obsługującego formularz jest bardzo proste. Właściwie większość pracy wykonuje za nas PHP - po prostu w skrypcie od razu będą dostępne zmienne o nazwach takich jak nazwy pól formularza, zawierające ich wartości:

echo($tekst); /* ta linia wyświetli zawartość
pola tekst z formularza */


W przypadku pola tekstowego będzie to po prostu wpisany przez użytkownika tekst. Jeżeli pole jest typu CHECKBOX wartością będzie "on" jeżeli pole jest zaznaczone, lub zmienna będzie pusta jeżeli pole nie zostało zaznaczone.
Jeżeli w polu typu CHECKBOX podamy parametr VALUE, będzie on użyty zamiast "on". Tak samo wygląda obsługa pola typu RADIO.
Wartością pola SELECT będzie wartość parametru VALUE zdefiniowanego w znaczniku OPTION.


--------------------------------------------------------------------------------
Wysyłanie poczty

Ze skryptu PHP można bardzo łatwo wysłać e-maila. Służy do tego funkcja mail. Pobiera ona 4 parametry.
Pierwszy z nich to lista adresatów oddzielonych spacjami.
Następny to temat wiadomości.
Trzeci parametr to treść wiadomości, a czwarty może zawierać dodatkowe pola nagówka wiadomości (jest dopisywany na końcu nagłówka).
Przykłąd:
mail("ty@twoj.serwer",
"Wiadmość testowa",
"Tutaj można wpisać tresć wiadomości.");


Ten przykład wyśle wiadomość na adres [link widoczny dla zalogowanych].


--------------------------------------------------------------------------------
Wysyłanie formularza pocztą

Mając powyższe wiadomości wysłanie formularza pocztą nie powinno stanowić problemu.
Najpierw trzeba zdefiniować formularz:
<FORM ACTION=skrypt.php3 METHOD=POST>
<INPUT TYPE=TEXT NAME=email><BR>
<TEXTAREA NAME=tresc></TEXTAREA><BR>
<INPUT TYPE=SUBMIT>
</FORM>


Teraz skrypt który wyśle dane pocztą:

mail("ty@twoj.serwer", "Formularz", $tresc, "Reply-To: $email");

Jedna linijka i gotowe.
Widać tutaj jedno z ważniejszych zastosowań 4 parametru funkcji mail: można podać adres zwrotny listu.
Jeżeli teraz użytkownik wpisze do formularza swój e-mail, będzie można odpowiedzieć używając funkcji reply programu pocztowego.

Uwaga: nie każdy serwer pozwoli na wysłanie wiadomości z polem Reply-To zawierającej adres na innym serwerze.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 9:59, 14 Lip 2006    Temat postu: D O S T Ę P

Część 4 - Dostęp do plików

Uprawnienia

Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie, jak użytkownik który go umieścił.
Może też mieć uprawnienia użytkownika nobody - wtedy żeby móc ze skryptu zmodyfikować jakiś plik, trzeba nadać prawo zapisu wszystkim użytkownikom.
Dokładne inforacje na ten temat powinien dostarczyć administrator serwera na którym umieszczamy skrypty.
--------------------------------------------------------------------------------
Otwieranie plików

Przed wykonaniem jakiejkolwiek operacji na pliku, należy go otworzyć. Służy do tego funkcja fopen. Pobiera ona 2 argumenty - pierwszy to nazwa pliku który chcemy otworzyć.
Drugi parametr może mieć następujące wartości:
r - otwiera plik do odczytu
r+ - otwiera plik do odczytu i zapisu
w - kasuje zawartość pliku i otwiera go do zapisu
w+ - kasuje zawartość pliku i otwiera go do zapisu i odczytu
a - otwiera plik do dopisywania
a+ - otwiera plik do dopisywania i odczytu
Co ciekawe, funkcja fopen może otworzyć plik na innym serwerze przez protokół http (tylko odczyt), lub ftp (odczyt lub zapis, ale nie jednocześnie). fopen zwraca liczbę, która służy do identyfikowania otwartego pliku.
Przykład:
$file=fopen("file.txt", "r"); /* otwiera plik file.txt do odczytu */
$file=fopen("file.txt", "w"); /* otwiera plik do zapisu. Jeżeli plik
nie istnieje, zostanie utworzony */
$file=fopen("ftp://adres.serwera/plik", "r"); /* otwiera plik przez
protokół ftp */

Po zakończeniu operacji na pliku, należy go zamknąć funkcją fclose, np:

$file=fopen("file.txt", "r");
fclose($file);



--------------------------------------------------------------------------------
Odczyt z pliku

Jest kilka funkcji służących do odczytu z pliku. Zacznę może od funkcji fgetc - odczytuje ona 1 znak z pliku:
$znak=getc($file);

Jeśli funkcja napotka koniec pliku, zwróci wartość FALSE. Po odczytaniu znaku, pozycja w pliku jest przesuwana o 1 do przodu. Dzięki temu, po kolejnym wywołaniu funkcji getc otrzymamy kolejny znak, a nie jeszcze raz ten sam.
Kolejną funkcją jest funkcja fgets:

$linia=fgets($file, $maxLen);

Drugi parametr określa ile znaków funkcja może odczytać. Trzecią funkcją do odczytu z pliku jest fread.
Działa ona podobnie do fgets, z tym że nie przerywa czytania gdy natrafi na znak nowej lini.


--------------------------------------------------------------------------------
Zapis do pliku

Do zapisywania w pliku służy funkcja fwrite:
fwrite($file, $tekst, $maxLen);

Funkcja ta zapisuje tekst podany jako 2 parametr do pliku identyfikowanego przez $file. 3 parametr jest opcjonalny i określa maksymalną długość tekstu, jaka może zostać zapisana.
Jest jeszcze funkcja fputs, ale działa ona dokładnie tak samo.
W PHP często występują identyczne funkcje pod innymi nazwami - ułatwia to życie osobom przyzwyczajonym do innych języków.


--------------------------------------------------------------------------------
Blokowanie plików

Jak dotąd wszystko wydaje się proste. Co jednak stanie się, jeżeli jednocześnie zostaną uruchomione dwie kopie skryptu, i obie będą próbowały zmienić ten sam plik?
Sytuacja taka jak łatwo się domyślić, może miec przykre konsekwencje. Aby rozwiązać ten problem należy użyć blokowania plików.
Służy do tego funkcja flock:
flock($file, mode);

Pierwszy argument funkcji flock to identyfikator otwartego pliku. Argument mode określa typ dostępu, jaki chcemy uzyskać.
Może mieć następujące wartości:

1 - dostęp do odczytu
2 - dostęp do zapisu
3 - zwolnienie blokady
Jeżeli chcemy uzyskać dostęp do zapisu, najpierw wszystkie inne blokady muszą być zwolnione.
Do uzyskania dostępu do odczytu wystarczy, ze plik nie będzie zablokowany do zapisu - w ten sposób wiele skryptów może jednocześnie czytać z pliku, ale tylko jeden może do niego zapisywać.
Dodatkowo w trakcie zapisu żaden inny skrypt nie może odczytywać z pliku - dzięki temu nie natrafi na niekompletne dane.

Jeżeli określony rodzaj dostępu nie może być w danej chwili uzyskany, wykonanie skryptu zostanie wstrzymane do czasu, gdy będzie to możliwe.
Plik powinien być blokowany na jak najkrótszy czas, aby nie wstrzymywać niepotrzebnie innych operacji.
Jeżeli chcemy tylko sprawdzić, czy plik jest zablokowany, do argumentu mode należy dodać 4 - wtedy funkcja zwróci wartość TRUE jeżeli plik nie jest zablokowany, lub FALSE gdy jest.
Przykład:
$file1=fopen("jakis.plik", "r"); /* otwiera 2 razy ten sam plik */
$file2=fopen("jakis.plik", "r");

flock($file1, 2); /* blokuje pierwszą kopie */

if(flock($file2, 6)) /* funkcja flock zwróci false, ponieważ plik */
{ /* jest już zablokowany */
echo("Plik nie zablokowany");
}else{
echo("Plik zablokowany");
}

flock($file, 3); /* odblokowuje plik */



--------------------------------------------------------------------------------
Inne funkcje

PHP zawiera wiele funkcji służących do obsługi plików. Oto niektóre z nich:
file_exists(nazwa) - sprawdza, czy istnieje plik o podanej nazwie
filegroup(nazwa) - zwraca identyfikator grupy, do której należy plik
fileowner(nazwa) - zwraca identyfikator właściciela pliku
filesize(nazwa) - zwraca rozmiar pliku o podanej nazwie
ftell($file) - zwraca pozycję w otwartym pliku
is_readable(nazwa) - sprawdza, czy skrypt ma uprawnienia do odczytania pliku
is_writeable(nazwa) - sprawdza, czy skrypt może zapisać do pliku
mkdir(nazwa) - tworzy katalog o podanej nazwie
readfile(nazwa) - wyświetla zawartość pliku

--------------------------------------------------------------------------------
Prosty licznik tekstowy

Licznik tekstowy posłuży jako praktyczny przykład wykorzystania dostępu do plików:
if(file_exists("counter.n")) /* sprawdza, czy plik istnieje */
{ $file=fopen("counter.n", "r"); /* otwiera plik */
flock($file, 1); /* blokuje plik */

$ile=fgets($file, 100); /* odczytuje wartość */

flock($file, 3); /* odblokowuje plik */
fclose($file); /* zamyka plik */

$ile++; /* zwiększa wartość o 1 */
}
else
$ile=1; /* jeśli plik nie istnieje, wyświetli się 1 */

$file=fopen("counter.n", "w"); /* otwiera plik do zapisu */
flock($file, 2); /* blokuje do zapisu */

fwrite($file, $ile); /* zapisuje wartość */

flock($file, 3); /* odblokowuje plik */
fclose($file); /* zamyka plik */

echo($ile); /* wyświetla wartość */

Ten skrypt odczytuje z pliku wartość, zwiększa ją o 1, a następnie wyświetla na stronie.
Jeżeli plik counter.n nie istnieje, skrypt spróbuje go utworzyć.
Ten licznik zwiększy się za każdym razem gry użytkownik wejdzie na stronę, lub ją odświeży. Licznik odporny na odświeżanie pokaże w części 5.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 10:00, 14 Lip 2006    Temat postu: G R A F I K A

Część 5 - Obsługa grafiki, HTTP cookies

HTTP Cookies

Czasem przydatna jest możliwość zapisania jakiejś informacji na komputerze klienta.
Do tego właśnie stworzony został mechanizm Cookies - skrypt może zapisać na komputerze użytkownika krótką informacje, a następnie po ponownym odwiedzeniu strony pobrać ją. W ten sposób skrypt może zidentyfikować użytkownika, który już wchodził na stronę.
--------------------------------------------------------------------------------
W tym rozdziale pokażę przykład zastosowania cookie do stworzenia licznika odwiedzin zliczającego każdą osobę tylko raz, niezależnie od tego, ile razy wyświetli stronę.

Do zapisywania cookie na komputerze klienta służy funkcja setcookie:
setcookie(name, value, expire, path, domain, secure)

Wszystkie parametry oprócz name są opcjonalne. W tym kursie omówię tylko parametry name, value oraz expire:

name - nazwa. Jeżeli jest jedynym parametrem, cookie o podanej nzwie zostanie usunięte z komputera użytkownika.
value - wartość która otrzyma cookie.
expire - data do której cookie będzie przechowywane na komputerze użytkownika, wyrażona w sekundach od 1 stycznia 1970 roku.
Kiedy użytkownik z zapisanym cookie otworzy stronę zawiwerającą skrypt, zostanie utworzona zmienna o nazwie takiej jak podana w parametrze name, zawierająca wartość cookie.
Przykład, tym razem zacytuję całą treść strony:
<?
$iloscWejsc++;
setcookie("iloscWejsc", $iloscWejsc);
?>
<HTML>
<BODY>
Odwiedzasz tą stronę już po raz
<?
echo($iloscWejsc);
?>
</BODY>
</HTML>


Ten skrypt będzie zliczał kolejne wejścia danego użytkownika na stronę.
Ponieważ informacja jest przechowywana na komputerze użytkownika, każdy odwiedzający stronę będzie miał oddzielny licznik. Bardzo ważne jest umieszczenie komendy setcookie przed tagiem <HTML>, ponieważ cookies są wysyłane do przeglądarki użytkownika wraz z nagłówkiem strony. Po tagu <HTML> nagłówek jest już wysłany, więc jest za późno na wysłanie cookie.


--------------------------------------------------------------------------------
Licznik tekstowy odporny na odświeżanie

Teraz pokażę, jak zmodyfikować licznik z poprzedniego rozdziału, aby nie naliczał kolejnych wejść tego samego użytkownika:
<?
setcookie("visited", "1", time()+3600*3);
/* wysyła cookie na komputer użytkownika */
?>

<HTML>
<BODY>
<?
if(file_exists("counter.n"))
{ /* sprawdza, czy plik istnieje */
$file=fopen("counter.n", "r"); /* otwiera plik */
flock($file, 1); /* blokuje plik */

$ile=fgets($file, 100); /* odczytuje wartość */

flock($file, 3); /* odblokowuje plik */
fclose($file); /* zamyka plik */

if($visited!="1") /* sprawdza, czy
użytkownik już odwiedzał stronę */
{
$ile++; /* zwiększa wartość
o 1 tylko po pierwszym wejściu */
}
}
else
{
$ile=1; /* jeśli plik nie istnieje, wyświetli się 1 */
}

$file=fopen("counter.n", "w"); /* otwiera plik do zapisu */
flock($file, 2); /* blokuje do zapisu */

fwrite($file, $ile); /* zapisuje wartość */

flock($file, 3); /* odblokowuje plik */
fclose($file); /* zamyka plik */

echo($ile); /* wyświetla wartość */
?>
</BODY>
</HTML>

Skrypt wysyła do użytkownika cookie. Następnie zwiększa licznik tylko jeżeli wartość cookie nie jest równa "1".
Funkcja time() użyta w 3 parametrze funkcji setcookie zwraca aktualny czas, liczony w sekundach od 1 stycznie 1970 roku.


--------------------------------------------------------------------------------
Obrazki w formacie GIF

PHP zawiera funkcje służące do obsługi obrazków w formacie GIF.
Do załadowania obrazka używa się funkcji ImageCreateFromGif("nazwa.pliku.gif"). Aby zapisać obrazek należy użyć funkcji ImageGif(obrazek, "nazwa.pliku.gif").
Parametr określający nazwę pliku może zostać pominięty - wtedy zawartość pliku zostanie bezpośrednio wysłana do przeglądarki. Dzieki temu mozna utworzyc skrypt 'udający' obrazek:
<?
header("Content-type: image/gif");
$image=ImageCreateFromGif("obrazek.gif");
ImageGif($image);
?>

Użyta tutaj funkcja header służy do wysłania do przeglądarki pola nagłówka. W tym wypadku określa, że zostanie wysłany obrazek w formacie GIF. W pliku nie powinny znajdować się żadne komendy HTMLa.
Kolejną funkcją związaną z obsługą obrazków jest ImageCreate(width, height) - tworzy ona obrazek o podanej szerokości i wysokości.

Do kopiowania fragmentów obrazków używa się funkcji magecopyresized(dst_im, src_im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH). Jej parametry oznaczają:

dst_im - obrazek docelowy
src_im - obrazek źródłowy
dstX, dstY - współrzędne lewego górnego rogu obszarudo którego zostanie skopiowany obrazek. Punkt (0, 0) to lewy górny róg obrazka (oś pionowa jest numerowana z góry do dołu).
dstW, dstH - szerokość i wysokość obszaru docelowego
srcX, srcY, srcW, srcH - tak samo jak dstX, dstY, dstW i dstH dla obszaru źródłowego.

--------------------------------------------------------------------------------
Licznik graficzny

Dzięki tym funkcjom możliwe staje się stworzenie licznika graficznego. Poniższy fragment kodu wymaga pliku graficznego cyfr.
<?
if(file_exists("c"))
{
$file=fopen("c", "r");
$ile=fgets($file, 1000);
$ile++;
fclose($file);
}
else
{
$ile=1;
}
/* usunąłem blokowanie plików i sprawdzanie
przeładowań, żeby uprościć kod */

$file=fopen("c", "w");
fwrite($file, $ile);
fclose($file);

header("Content-type: image/gif");
/* informuje przeglądarkę, że zostanie
wysłany obrazek w formacie GIF */

$image=ImageCreate(20*strlen($ile), 20);
/* tworzy pusty obrazek */

$cyfry=ImageCreateFromGif("cyfry.gif");
/* ładuje obrazek z cyframi */

for($i=0;$i {
ImageCopyResized($image, $cyfry, 20*$i, 0,
20*substr($ile, $i, 1),
0, 20, 20, 20, 20); /* rysuje kolejne cyfry */
}

ImageGif($image); /* wysyła przygotowany obrazek */
?>

W skrypcie użyłem jeszcze dwóch nowych funkcji:

strlen($napis) - zwraca długość napisu
substr($napis, $poczatek, $n) - wycina $n znaków z napisu, zaczynając od pozycji $poczatek
Skrypt najpierw zlicza odwiedziny tak jak liczniki tekstowe z poprzednich rozdziałów. Następnie tworzy obrazek, na którym będą rysowane kolejne cyfry.
Później ze zmiennej zawierającej ilość odwiedzin wycina poszczególne cyfry, i kopiuje do nowego obrazka odpowiednie fragmenty obrazka cyfry.gif. Tak otrzymany obrazek wysyła do przeglądarki. Odwołanie do skryptu można wstawić na stronie komendą <IMG SRC=licznik.php3>.


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
obrzyn1986
Administrator



Dołączył: 24 Maj 2006
Posty: 131
Przeczytał: 0 tematów

Ostrzeżeń: 0/3
Skąd: Mazury

PostWysłany: Pią 10:01, 14 Lip 2006    Temat postu: P R Z Y K Ł A D

Część 6 - Prosty chat

Ogólny zarys skryptu

W tym rozdziale opiszę krok po kroku tworzenie skryptu obsługującego prostego chata.
Okno przeglądarki podzielimy ramkami na dwie części. W dolnej będzie znajdował się formularz, zawierający jedno pole do wpisywania tekstu, w górnej będzie wyświetlać się treść rozmowy. Aby uniknąć użycia Javy w górnej ramce umieścimy znacznik META powodujący odświeżenie zawartości co 1 sekundę. Skrypt obsługujący formularz umieścimy w tym samym pliku, co formularz. Dięki temu użytkownik po wpisaniu linijki tekstu będzie mógł od razu zacząć pisać następną.
--------------------------------------------------------------------------------
Użyte pliki HTML

Nasz skrypt będzie potrzebował 4 plików. Będą to:
index.html - plik zawierający definicję ramek
gora.php3 - górna ramka, zawierająca skrypt wyświetlający rozmowę
dol.php3 - dolna ramka, zawierająca formularz i skrypt do jego obsługi
chat.txt - plik w którym będzie przechowywana treść rozmowy
Skrypt w pliku dol.php3 musi mieć możliwość zapisu do pliku chat.txt. Teraz przedstawię początkową zawartość tych plików:

index.html:
=============
<HTML>
<HEAD>
<TITLE>YGREG - Chat</TITLE>
</HEAD>

<FRAMESET ROWS="*, 60" FRAMEBORDER=0 FRAMESPACING=0 BORDER=0>
<FRAME SRC=gora.php3 NAME="gora">
<FRAME SRC=dol.php3 NAME="dol" SCROLLING=NO>
</FRAMESET>
</HTML>


gora.php3:
============
<HTML>

<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
<META HTTP-EQUIV="REFRESH" CONTENT="1">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>

<TABLE BORDER=1 CELLPADDING=5 CELLSPACING=0 WIDTH=500 HEIGHT=400>
<TR><TD VALIGN=TOP>

<FONT CLASS=text>
<?
// tutaj umieścimy skrypt wyświetlający treść
?>
</FONT>

</TR></TD></TABLE>

</BODY>
</HTML>


dol.php3:
===========
<HTML>
<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM METHOD=GET ACTION=dol.php3 NAME=formularz>
<INPUT TYPE=HIDDEN NAME=ACTION VALUE=add>
<INPUT TYPE=TEXT SIZE=80 MAXLENGTH=80 NAME=TEKST>

<?
// tutaj umieścimy skrypt obsługujący formularz
?>

</FORM>

</BODY>
</HTML>



Dla zwiększenia czytelności skryptów pola formularza będe zawsze nazywał dużymi literami. Jak widać w powyższym pliku będą potrzebne 2 skrypty - wyświetlający treść rozmowy i dodający nową linię.


--------------------------------------------------------------------------------
Wyświetlanie treści rozmowy

Zaczniemy od skryptu wyświetlającego treść rozmowy w pliku gora.php3. Będzie on czytał kolejne linie z pliku chat.txt i wyświetlał je, rozdzielając tagami <BR>:
<?
$file=fopen("chat.txt", "r");
flock($file, 1);

while($linia=fgets($file, 81))
{
echo($linia);
echo("<BR>");
}

flock($file, 3);
fclose($file);
?>



--------------------------------------------------------------------------------
Dodawanie nowej linii

Teraz pora na skrypt dodający do pliku linię. Ten będzie już bardziej skomplikowany. Oprócz dodania nowej lini na końcu, trzeba będzie usunąć pierwszą linię pliku, jeżeli stanie się on zbyt długi:
<?
if($ACTION=="add") // jeśli użytkownik dopiero wszedł
// na stronę, zmienna $ACTION będzie pusta
{
$file=fopen("chat.txt", "r");
flock($file, 1);

for($lineNr=1;true;$lineNr++)
{
$linia=fgets($file, 81); // odczytuje kolejną linię z pliku

if(!$linia)
break; // kończy pętle, jeśli natrafi na koniec pliku

$linie[$lineNr]=$linia; // dopisuje linię do tablicy $linie
}

flock($file, 3);
fclose($file);

$nLines=$lineNr; // zapisuje ilość lini w zmiennej $nLines

$file=fopen("chat.txt", "w");
flock($file, 2);

if($nLines<16) // jeżeli lini jest mniej niż 16 zapisywanie
$lineNr=1; // do pliku zacznie się od pierwszej lini
else // jeżeli 16 lub więcej, zapisywanie
$lineNr=2; // zaczyna się od 2 lini

for(;$lineNr<$nLines;$lineNr++) // zapisuje kolejne linie
fwrite($file, $linie[$lineNr]);

fwrite($file, $TEKST); // dopisuje linię podaną przez użytkownika
fwrite($file, "\n");

flock($file, 3);
fclose($file);
} ?>

Teraz można już przetestować pierwszą, najprostszą wersję skryptu. Najbardziej rażącą niedogodnością jest to, że po wysłaniu formularza pole do wpisywania tekstu nie jest aktywne i trzeba użyć myszy, żeby wpisać kolejną linię. Można temu zaradzić stosując bardzo prosty skrypt Javy:

<SCRIPT LANGUAGE="JavaScript">
<!--

document.formularz.TEKST.focus();

// -->
</SCRIPT>

Skrypt ten należy dopisać pod formularzem w pliku dol.php3. Teraz po załadowaniu strony dol.php3 pole formularza uaktywnia się automatycznie.


--------------------------------------------------------------------------------
Rozróżnianie użytkowników

Chociaż skrypt działa już całkiem nieźle, ciężko będzie się w nim dogadać z więcej niż jedną osobą. Trzeba dodać możliwość wpisania imienia. Ale po wpisaniu imienia, trzeba je gdzieś zapamiętać. Można użyć 2 sposobów - skorzystać z Cookie, lub ukrytego pola w formularzu.
W tym przypadku lepsze będzie ukryte pole - dzięki takiemu rozwiązaniu użytkownik będzie mógł przy ponownym wejściu na stronę podać inne imię. Ze strony będą też mogły skorzystać osoby, których przeglądarki nie obsługują cookies (jest ich już bardzo mało, ale może jakaś się trafi).

Musimy więc stworzyć nowy plik, zawierający formularz do wpisania imienia. Plik imie.htm należy wpisać w pliku index.html jako źródło dolnej ramki (zamiast dol.php3).
imie.htm
==========
<HTML>
<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM METHOD=GET ACTION=dol.php3>
Wpisz swoje imię:
<INPUT TYPE=TEXT SIZE=80 MAXLENGTH=80 NAME=IMIE>
</FORM>
</BODY>
</HTML>


Konieczne będzie też dokonanie zmian w pliku dol.php3. Na końcu skryptu obsługującego formularz trzeba dopisać linię:

echo("<INPUT TYPE=HIDDEN NAME=IMIE VALUE=$IMIE>");

Spowoduje ona wprowadzanie do formularza ukrytego pola, zawierającego imię użytkownika. Należy teakże zmienić linię dodającą nowy tekst do pliku na:

fwrite($file, "$IMIE> $TEKST");

Teraz można już swobodnie rozmawiać.


--------------------------------------------------------------------------------
Kolory

Każdy użytkownik ma już swoje imię, po którym można go odróżnić od innych.
Może jeszcze pozwolić mu na wybór koloru, jakim będzie wyświetlane to imię? Nie będzie z tym zbyt dużo kłopotu. Wystarczy na końcu skryptu w pliku dol.php3 dodać poniższy fragment kodu:
$kolory[0]="black";
$opisy[0]="Czarny";
$kolory[1]="blue";
$opisy[1]="Niebieski";
$kolory[2]="red";
$opisy[2]="Czerwony";
$kolory[3]="green";
$opisy[3]="Zielony";

if($KOLOR=="")
$KOLOR="black";

echo("<SELECT NAME=KOLOR>");
for($i=0;$i<4;$i++)
{
echo("<OPTION VALUE=$kolory[$i]");
if($kolory[$i]==$KOLOR)
echo(" SELECTED");
echo(">$opisy[$i]</OPTION>");
}
echo("</SELECT>");


A linię wpisującą do pliku nowy tekst zmienić na

fwrite($file, "<FONT COLOR=$KOLOR>$IMIE></FONT> $TEKST");

W ten sposób zostanie utworzone pole wyboru, zawierające 4 kolory. Po wysłaniu formularza domyślnie zaznaczony będzie ostatnio wybrany kolor.


--------------------------------------------------------------------------------
Gotowy skrypt

Ostatecznie chat składa się z następujących plików: index.html, imie.htm, dol.php3, gora.php3 i chat.txt. W pliku chat.txt jest zapisywana rozmowa. Pozostałe pliki w ostatecznej formie:
index.html
============ <HTML>
<HEAD>
<TITLE>YGREG - Chat</TITLE>
</HEAD>
<FRAMESET ROWS="*, 60" FRAMEBORDER=0 FRAMESPACING=0 BORDER=0>
<FRAME SRC=gora.php3 NAME="gora">
<FRAME SRC=imie.htm NAME="dol" SCROLLING=NO>
</FRAMESET>
</HTML>


imie.htm
========== <HTML>
<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM METHOD=GET ACTION=dol.php3>
Wpisz swoje imię: <INPUT TYPE=TEXT SIZE=80 MAXLENGTH=80 NAME=IMIE>
</FORM>
</BODY>
</HTML>


dol.php3
==========
<HTML>
<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM METHOD=GET ACTION=dol.php3 NAME=formularz>
<INPUT TYPE=HIDDEN NAME=ACTION VALUE=add>
<INPUT TYPE=TEXT SIZE=80 MAXLENGTH=80 NAME=TEKST>

<?
if($ACTION=="add")
{
$file=fopen("chat.txt", "r");
flock($file, 1);

for($lineNr=1;true;$lineNr++)
{
$linia=fgets($file, 81);

if(!$linia)
break;

$linie[$lineNr]=$linia;
}

flock($file, 3);
fclose($file);

$nLines=$lineNr;

$file=fopen("chat.txt", "w");
flock($file, 2);

if($nLines<16)
$lineNr=1;
else
$lineNr=2;

for(;$lineNr<$nLines;$lineNr++)
fwrite($file, $linie[$lineNr]);

fwrite($file, "<FONT COLOR=$KOLOR>$IMIE></FONT> $TEKST");
fwrite($file, "\n");

flock($file, 3);
fclose($file);
}

echo("<INPUT TYPE=HIDDEN NAME=IMIE VALUE=$IMIE>");

$kolory[0]="black";
$opisy[0]="Czarny";
$kolory[1]="blue";
$opisy[1]="Niebieski";
$kolory[2]="red";
$opisy[2]="Czerwony";
$kolory[3]="green";
$opisy[3]="Zielony";

if($KOLOR=="")
$KOLOR="black";

echo("<SELECT NAME=KOLOR>");
for($i=0;$i<4;$i++)
{
echo("<OPTION VALUE=$kolory[$i]");
if($kolory[$i]==$KOLOR)
echo(" SELECTED");
echo(">$opisy[$i]</OPTION>");
}
echo("</SELECT>");

?>

</FORM>

<SCRIPT LANGUAGE="JavaScript">
<!--

document.formularz.TEKST.focus();

// -->
</SCRIPT>

</BODY>
</HTML>


gora.php3
===========
<HTML>

<HEAD>
<META http-equiv="Content-type"
content="text/html; charset=iso-8859-2">
<META HTTP-EQUIV="REFRESH" CONTENT="1">
</HEAD>

<BODY BGCOLOR=WHITE TEXT=BLACK>

<TABLE BORDER=1 CELLPADDING=5 CELLSPACING=0 WIDTH=500 HEIGHT=400>
<TR><TD VALIGN=TOP>

<FONT CLASS=text>
<?
$file=fopen("chat.txt", "r");
flock($file, 1);

while($linia=fgets($file, 81))
{
echo($linia);
echo("<BR>");
}

flock($file, 3);
fclose($file);
?>
</FONT>

</TR></TD></TABLE>

</BODY>
</HTML>




--------------------------------------------------------------------------------


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
buz




Dołączył: 01 Maj 2010
Posty: 5
Przeczytał: 0 tematów

Ostrzeżeń: 0/3

PostWysłany: Pią 10:22, 07 Maj 2010    Temat postu:

przydatny kurs

Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Z A P R A S Z A M Strona Główna -> Webmastering Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group, Theme by GhostNr1