Budujemy pierwszą stronę aktywną sięgającą do bazy danych.
W naszym laboratorium programy w PHP są traktowane jak normalne programy CGI. Konsekwencje:
.cgi
''. Końcówka ,,.php
'' powoduje
błąd systemu. Plik ma mieć ustawione uprawnienie x
(wykonywalność) dla każdego. Uprawnienie w
może być
ustawione tylko dla właściciela pliku
Program musi rozpoczynać się zaklęciem
#!/usr/bin/php <?php echo("Content-type: text/html\n\n"); ?>gdzie ,,
<?php
'' oraz ,,?>
'' to poczatek
i koniec wstawki w PHP.
Pliki tekstowe poszczególnych systemów operacyjnych różnią się sposobem kończenia wiersza tekstu (linii), W Linuksie jest to pojedynczy znak LineFeed (zwany też Newline). W systemie MS-DOS (a zatem i w Microsoft Windows) wiersze kończyły się parą znaków: CarriageReturn + LineFeed.
Podobno CGI w PHP potrafi czasem po napotkaniu takich par przedwcześnie
zakończyć nagłówek, powodując błąd. Jak zakończone są wiersze w pliku
można sprawdzić poleceniem file
. Dla pliku Linuksowego
będzie tak
zbyszek@katastrofa6:~/work/proby$ file proba.cgi proba.cgi: PHP script, UTF-8 Unicode text executablenatomiast dla Windowsowego tak
zbyszek@katastrofa6:~/work/proby$ file formularz.cgi formularz.cgi: PHP script, UTF-8 Unicode text executable, with CRLF line terminatorsEwentualną konwersję robimy programem dos2unix
zbyszek@katastrofa6:~/work/proby$ dos2unix formularz.cgi dos2unix: konwersja pliku formularz.cgi do formatu uniksowego... zbyszek@katastrofa6:~/work/proby$ file formularz.cgi formularz.cgi: PHP script, UTF-8 Unicode text executable
W formularzach metoda POST
czasem z niewiadomego powodu
daje błąd: należy wtedy przejść na GET
.
Zmienne formularza przekazywane są jako lista par
imie=Jan&nazwisko=Sobieski
Odbieranie zmiennych z formularza zależy od metody:
GET
zmienne przekazywane są na zmiennej
$_SERVER["QUERY_STRING"]
(można ją zobaczyć w pasku
przeglądarki). Zmienne można przerzucić do tablicy asocjacyjnej
(indeksowanej ich nazwami) wywołaniem
parse_str($_SERVER["QUERY_STRING"], $tablica)i wtedy do konkretnej zmiennej odwołujemy się na przykład przez
$tablica["imie"]
POST
zmienne przekazywane są przez
standardowe wejście, do tablicy takiej przerzucamy je sekwencją
instrukcji
$fh = fopen('php://stdin', 'r'); $stdin = fgets($fh); parse_str($stdin, $form_data);
$_SERVER['REQUEST_METHOD']
, na przykład
if ($_SERVER['REQUEST_METHOD'] == 'POST') { ...
Opisy PHP i pisania aplikacji znajdujące się na stronie nie uwzględniają tych dziwolągów.
Na ćwiczeniach spróbujemy napisać początek aplikacji -- w praktyce oznacza to zaadaptowanie wersji z dokumentacji do nowych wymagań. Ma działać!