JAO-php-lab3.pdf
(
388 KB
)
Pobierz
18.11.2009 14:05:36
Języki Automaty Obliczenia
Programowanie sterowane zdarzeniami
1. Cel ćwiczenia
Celem ćwiczenia jest utworzenie graficznego interfejsu użytkownika (GUI) do programu, który liczy
iloczyn kartezjański N zbiorów. Program został opracowany w trakcie poprzednich zajęć.
2. Wstęp
GUI do programu opracowane zostanie w języku HTML i będzie uruchomione na serwerze WWW.
2.1. Formularze HTML
Należy przypomnieć sobie z lekcji w gimnazjum tworzenie formularzy w języku HTML, które
zawierają przyciski i pola tekstowe.
2.2. Błyskawiczny kurs CGI
2.2.1. Metody GET i POST
Kiedy przeglądarka wysyła do serwera WWW żądanie dostarczenia zasobu:
http://materialy.prz-rzeszow.pl/index.php?
doc
=
inz_opr.pdf
&
user
=
student
&
passwd
=
haslo
serwer WWW uruchamia skrypt o nazwie
index.php
i przekazuje do skryptu parametry:
1.
doc = inz_opr.pdf
2.
user = student
3.
passwd = haslo
Skrypt może odczytać wartości tych parametrów i na ich podstawie podjąć pewne działania.
Mówimy, że parametry zostały przekazane metodą GET. Inny sposób przekazywania parametrów to
metoda POST:
<form action='index.php' method='
post
'>
<input type='text' name='
doc
' value='
inz_opr.pdf
'/>
<input type='text' name='
user
' value='
student
'/>
<input type='hidden' name='
passwd
' value='
haslo
'/>
<input type='submit' name='
send
' value='
Wyślij
'/>
</form>
Metoda POST różni się w pewien sposób od metody GET, ale z punktu widzenia skryptu jest to
różnica mało istotna, ponieważ serwer WWW także utworzy odpowiednie parametry
[1]
.
W formularzu powyżej, kliknięcie przycisku
Wyślij
spowoduje uruchomienie na serwerze WWW
skryptu
index.php
i przekazanie do niego parametrów takich, jak opisano wyżej (dodatkowo
ustawiany jest parametr
send='Wyślij'
).
2.2.2. Przesłanie danych z formularza do serwera
Żeby przeglądarka przesłała dane z formularza po kliknięciu w przycisk, przycisk musi być
elementem
input
typu
submit
:
1
<form action='index.php' method='
post
'>
<input type='text' name='doc' value='inz_opr.pdf'/>
<input type='text' name='user' value='student'/>
<input type='hidden' name='passwd' value='haslo'/>
<input type='
submit
' name='send' value='Wyślij'/>
</form>
Przycisk powstanie także jeżeli użyjemy typu
button
, lecz nie będzie on wtedy automatycznie
przesyłał danych z formularza.
2.2.3. Przesłanie pliku do serwera
Jeżeli chcemy, żeby przeglądarka przesłała do serwera plik z komputera lokalnego, formularz musi
mieć określony sposób kodowania i posiadać pole wyboru pliku:
<form action='index.php' method='
post
' enctype="
multipart/form-data
">
<input type='
file
' name='doc' value=''/>
<input type='text' name='user' value='student'/>
<input type='hidden' name='passwd' value='haslo'/>
<input type='
submit
' name='send' value='Wyślij'/>
</form>
W linii 1 zaznaczono, że formularz będzie przesyłał pliki, tekst wykraczający poza kodowanie ASCII,
dane binarne. Linia 2 utworzy pole wyboru pliku.
2.2.4. Odczyt parametrów przez skrypt PHP
Skrypt PHP uzyskuje dostęp do zmiennych z formularza za pomocą zmiennej
_REQUEST
. W celu
sprawdzenia, czy wciśnięto przycisk
Wyślij
na formularzu z punktu
2.2.3.,
użyjemy kodu:
if(isset($_REQUEST['send'])) { .... }
W przykładzie powyżej sprawdzamy, czy ustawiony jest element o indeksie
send
w tablicy
_REQUEST
. Jeżeli jest, i prawdziwy jest warunek
$_REQUEST['send'] == 'Wyślij'
to znaczy, że wciśnięto przycisk
Wyślij
. Używamy indeksu
'send'
tablicy
_REQUEST
, dlatego że
atrybut
name
przycisku
Wyślij
w punkcie
2.2.3.
ma wartość
send
.
2.2.5. Odczyt pliku przesłanego na serwer
W przykładzie w punkcie
2.2.3.
pokazano formularz, którego pole o nazwie
doc
służy do przesłania
pliku na serwer. W języku PHP w celu uzyskania dostępu do tego pliku, użyjemy kodu:
$nazwaPliku = $_FILES["
doc
"]["tmp_name"];
Indeks
doc
tablicy
_FILES
zawiera informacje o pliku przesłanym przez element
input
typu
file
o nazwie
doc
:
<input type='file' name='
doc
' value=''/>
Zmienna
$nazwaPliku
zawiera pełną ścieżkę do pliku przesłanego na serwer i może być użyta
bezpośrednio w funkcji
fopen
lub podobnej.
2.2.6. Zmienne globalne aplikacji WWW
Kiedy kończy się wykonywać skrypt określony w atrybucie action formularza, usuwane są wszystkie
zmienne utworzone przez ten skrypt. Jeżeli chcemy, żeby aplikacja zapamiętała wartość pewnej
zmiennej pomiędzy kolejnymi wywołaniami skryptu, należy zastosować zmienne sesyjne:
session_start(); // rozpoczęcie sesji serwera WWW
$zbiory = $_SESSION['zbiory']; // odczyt zmiennej sesyjnej
$wynik = oblicz($zbiory);
$_SESSION['wynik'] = $wynik; // zapisanie zmiennej sesyjnej
Pierwsza linia włącza mechanizm sesji serwera. Kolejne linie pokazują, w jaki sposób zapamiętać
zmienną w sesji i odczytać ją. Tablica
$_SESSION
zawiera zmienne, których wartości przechowywane
2
są pomiędzy kolejnymi wywołaniami skryptów.
2.3. PHP – zastępowanie tekstu w pliku
W trakcie ćwiczenia wykorzystane zostaną funkcje języka PHP, przy pomocy których można
zastępować zawartość pliku.
Załóżmy, że w pliku
wynik.xhtml
mamy pole tekstowe, w którym chcemy prezentować wynik
obliczeń:
<textarea id="wynik" name="wynik" rows="20" cols="40" readonly="readonly">
:wynik:
</textarea>
W miejscu znacznika
:wynik:
ma się pojawić wynik obliczeń. W programie w języku PHP możemy
podstawić za znacznik
:wynik:
wartość pewnej zmiennej:
$wynikObliczen = print_r($wynik, TRUE); // przygotowuję zmienną z wynikiem
$html = file_get_contents("wynik.xhtml"); // pobieram plik z szablonem
$search = array(":wynik:"); // co ma być wyszukiwane w szablonie
$replace = array($wynikObliczeń); // czym zastąpić $search
$html = str_replace($search, $replace, $html); // zastępuję elementy $search
echo $html; // wyświetlam
Funkcja
print_r
użyta w sposób pokazany wyżej nie wysyła nic do bufora wyjściowego, tylko
zwraca reprezentację zmiennej czytelną dla człowieka.
Jeżeli chcemy wykonać kilka zastąpień tekstu jednocześnie, to należy rozbudować tablice:
$search = array(":wynik:", ":daneWejsciowe:", ":komunikat:");
$replace = array($wynikObliczeń, $daneWejsciowe, $komunikat);
3
3. Konfiguracja serwera Apache
3.1. Pakiet xampplite w systemie Windows
W laboratorium w sali D104 nie wykonujemy punktu 1, ponieważ uprawnienia są ustawione
prawidłowo.
1. Sprawdź, czy użytkownik, na koncie którego pracujesz w systemie, ma uprawnienia do
modyfikowania zawartości następujących folderów:
•
c:\xampplite\temp
•
c:\xampplite\apache\logs
•
c:\xampplite\htdocs
2. Uruchom konsolę i wpisz następujące polecenia:
3. W panelu sterowania
xampp
kliknij przycisk
start
przy module Apache.
4
4. Jeżeli przy module Apache nie pojawiła się zielona etykieta
Running
, sprawdź punkt 1 oraz
komunikaty serwera:
3.2. Pakiet httpd w systemach Unix
W laboratorium w sali D10a nie trzeba nic robić, wszystko działa.
1. Sprawdź, czy użytkownik (lub grupa użytkowników) na koncie którego pracujesz w systemie,
ma uprawnienia do modyfikowania zawartości katalogu z zasobami serwera WWW:
Na rysunku jest to katalog
html
, grupa
users
ma uprawnienia do zapisu, a wszyscy do
odczytu i przeglądania.
2. Upewnij się, że serwer WWW pracuje:
service httpd restart
3. W przypadku wystąpienia błędów, sprawdź log serwera:
cat /var/log/httpd/error_log
4. Jeżeli twój system to nie Red Hat Linux, sprawdź w dokumentacji systemu jak nazywa się
pakiet serwera WWW, gdzie jest katalog z jego zasobami, jak zarządzać serwerem i gdzie są
pliki jego logów.
5
Plik z chomika:
czarny0803
Inne pliki z tego folderu:
JAO-php-lab1.pdf
(589 KB)
JAO-php-lab2.pdf
(248 KB)
JAO-php-lab3.pdf
(388 KB)
JAO-php-lab5.pdf
(163 KB)
JAO-php-lab6.pdf
(196 KB)
Inne foldery tego chomika:
Zgłoś jeśli
naruszono regulamin