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
917923333.001.png 917923333.002.png
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
917923333.003.png
Zgłoś jeśli naruszono regulamin