Apache jest serwerem udostępniającym strony www. Dzięki serwerom www możliwe korzystanie jest z najbardziej popularnej usługi w Internecie, czyli stron World Wide Web. Oczywiście nie jest to jedyny serwer www dostępny dla Amigi. Dodatkowo dzięki PHP będziemy mogli tworzyć dynamiczne generowane strony www. Zakładając, że zainstalowaliśmy także bazę danych MySQL staniemy się posiadaczami wyrafinowanych narzędzi, które pozwolą nam na tworzenie złożonych aplikacji. Wtedy ani interfejs graficzny, ani złożone zapytania do bazy danych nie będą nam straszne. Osobiście stworzyłem aplikacje do prowadzenia księgowości, z której korzystam na codzień. Apache, MySQL i PHP możemy używać nieodpłatnie!
Apache dla Amigi znajduje się na Aminecie. Istnieją osobne wersje Apache dla AmigaOS 4.0 i MorphOS-a. Tekst powstał w oparciu o wersję 1.3.6.
Opis instalacji Geek Gadgets i MySQL znaleźć można w odrębnych artykułach na łamach PPA.
Swojego Apache zainstalowałem pod AmigaOS 3.1 na Amidze 1200 z procesorem 68040 40MHz i 64MB RAM-u. Informacja dla lubiących procesory taktowane w GHz: stwierdzam, że mój zestaw Apache+PHP+MySQL działa szybko. Serwował strony dla pc, który specjalnie sprowadziłem do testu. Moje aplikacje otwierały się z poziomu pc szybko i sprawnie, czyli normalnie. Również na samej Amidze strony serwowane przez Apacha otwierały się normalnie.
Zakładamy katalog, do którego rozpakujemy Apache. Ja założyłem na woluminie Work katalog Apache. Rozpakowałem następnie do niego archiwum z Apachem. Teraz w katalogu Work:Apache/bin/ zmieniamy nazwy programów, biorąc pod uwagę wersję naszego procesora. Dla procesora 68040 nazwy programów zmieniamy następująco: ab.040.php na ab, htdigest.040.php na htdigest. Analogicznie postąpiłem z nazwami programów htpasswd, httpd oraz suexec. Zatem z wszystkimi programami, które miały w nazwie wersję interesującego mnie procesora. Dlaczego dodatkowo wziąłem nazwy z końcówką php? Łatwo stwierdzić, że akurat te wersje będzie potrzebował interpreter języka PHP. Następnie, zgodnie ze wskazówkami autorów amigowej wersji Apache, ustawiłem bit protekcji s zbiorom starthttpd, stophttpd i FixDynamic. Natomiast plikowi httpd ustawiłem flagę p.
Przejdźmy do katalogu Work:Apache/conf/. Znowu zmieniłem nazwy plikom: http.conf-amiga-dist na http.conf. Podobnie uczyniłem z pozostałymi plikami w tym katalogu, obcinając końcówkę -amiga-dist.
Jeszcze jedna zmiana nazwy tym razem w katalogu Work:Apache/lib/. Nazwa php.ini-dist została zmodyfikowana na php.ini. Teraz należy dokonać zmian w stosie TCP/IP. Wypróbowałem AmiTCP i Miami. Obydwa działały bez problemów. Na codzień korzystam z AmiTCP. Konfiguracja stosu TCP/IP na potrzeby Apache wygląda w sposób podany w poniższych punktach. W nawiasach podaje odpowiednik czynności dla stosu Miami.
Na koniec do s:user-startup dopisujemy nowy przypis: assign Apache: Work:Apache add.
Restartujemy stos TCP/IP, aby uwzględnił wprowadzone przez nas zmiany w plikach konfiguracyjnych. Dla AmiTCP uruchamiamy kolejno skrypty stopnet i startnet. W wersji dla Miami wciskamy gadżety Offline, a następnie Online. Wydajemy też polecenie assign Apache: Work:Apache add.
Cały powyższy akapit można załatwić metodą siłową, czyli zrestartować maszynę. Jednak serwerów (nasza Amiga właśnie awansowała do miana serwera) nie powinno się w tak dramatyczny sposób pobudzać do życia.
Podnieśmy wreszcie nasz świeżo zainstalowany serwer przez polecenie shella:
run sh -c "/work/apache/bin/apachectl start"
Uruchamiamy naszą ulubioną przeglądarkę stron www. Wpisujemy jako adres strony localhost, dokładniej http://localhost i powinna pokazać się strona domyślna (powitalna) serwera Apacha. Dokładniej został wyświetlony plik Apache:htdocs/index.html.en.
Strona startowa serwera Apache.
Jeśli pokazała się powyższa strona, to możemy sobie gratulować poprawnej instalacji serwera www!
Wiemy jak startować Apache, ale jak zatrzymać serwis stron www? Zatrzymujemy go poleceniem z poziomu shella sh:
/work/apache/bin/apachectl stopDziała po uruchomieniu Apache przez /work/apache/bin/apachectl start także z poziomu shella sh. Natomiast po uruchomieniu Apacha przez:
sh -c "/work/apache/bin/apachectl start"z poziomu ToolsDaemona zastopowałem Apache przez
/work/apache/bin/apachectl stopz poziomu shella sh i ponadto wykonałem skrypt stopnet (przeciwieństwo skryptu startnet - patrz opis instalacji AmiTCP) wyłaczający stos TCP/IP. Po zatrzymaniu pracy stosu TCP/IP trzeba go naturalnie przywrócić do życia zanim uruchomimy ponownie serwis www Apache. Aby sprawdzić czy faktycznie zatrzymaliśmy Apache, wydajmy w shellu polecenie status. Nie powinno być procesów httpd.
Procesy httpd świadczą o tym, że
serwer Apache jest aktywny.
Widać także na belce Workbencha przyrost zwróconej pamięci RAM. U mnie z 35 MB wolnego RAM przy uruchomionym Apache i MySQL, po ich zabiciu ilość wolnego RAM-u wzrasta do 55 MB, a po wydaniu polecenia avail flush przybywa kolejny MB. Polecenie systemu AmigaOS avail flush oczyszcza pamięć RAM z np. niezamkniętych bibliotek czy innych niewykorzystywanych już w systemie struktur.
Wypróbujmy interpreter PHP. Stwórzymy systemowym Ed-em (lub innym edytorem tekstu) plik index.php:
ed work:apache/htdocs/index.phpo następującej zawartości:
<?PHP phpinfo(); ?>Zapisujemy ów plik. Teraz w przeglądarce wpiszmy adres: http://localhost/index.php. Powinna pokazać nam się strona z ustawieniami dla PHP.
Wyświetlenie konfiguracji PHP.
Możemy podejrzeć tutaj wiele istotnych ustawień PHP. Przydadzą się one w miarę zagłębiania się w świat PHP.
Na stronach startowych serwisów www nie podaje się adresów typu www.strona.pl/index.html, ale po prostu www.strona.pl. Nauczmy więc nasz serwer www by potrafił domyślnie rozpoznać plik index.php jako domyślny plik w katalogu. W tym celu otwieramy tekstowy plik konfiguracyjny Apache Work:Apache/conf/httpd.conf i szukamy wiersza DirectoryIndex index.shtml index.html i zmieniamy go na DirectoryIndex index.php index.shtml index.html. Zapisujemy plik httpd.conf. Restartujemy Apache, czyli zatrzymujemy i startujemy go. Teraz w przeglądarce wystarczy wpisać: http://localhost albo po prostu localhost, aby otworzyć plik index.php. Ponadto istotna jest kolejność wskazanych plików domyślnych po dyrektywie DirectoryIndex. Oznacza to, że jeśli w katalogu z plikiem index.php znajdzie się także plik index.html to tylko index.php zostanie wyświetlony, czyli zgodnie z kolejnością ustaloną po DirectoryIndex.
Jedna z dyrektyw naszego PHP, a mianowicie "register_globals", ustawiona jest domyślnie na wartość "On". Wyłączmy ją ze względów bezpieczeństwa. W pliku Apache:lib/php.ini register_globals ustawiamy na Off. Restartujemy serwer www by zauważył zmianę. Możemy uruchomić wcześniej opisywany plik z funkcją phpinfo() by sprawdzić czy faktycznie zmiana została dokonana.
Modyfikacja domyślnego portu Apache również może się przydać. Na portach nasłuchują różne usługi sieciowe. W naszym przypadku na porcie 80 serwer www przyjmuje żądania z przeglądaki internetowej. Zmieńmy domyślny port Apache z nr 80 na np. 8090. Należy w tym celu dokonać dwóch zmian. W pliku http.conf po dyrektywie Port oraz zapis w services stosu TCP/IP. O services była mowa w podpunkcie dotyczącym instalacji. Tym razem oprócz Apache restartujemy także stos TCP/IP, aby zmiany zostały uwzględnione.
Pamietajmy! Uruchamiając usługę na naszej maszynie wpiętej w sieć należy pamiętać, że do serwowanych zasobów mogą mieć dostęp osoby postronne. Należy więc się odpowiednio zabezpieczyć! Ustawienia firewalla na naszym domowym routerze są kluczową sprawą. Zadbajmy o to! Temat bezpieczeństwa danych jest przeogromny. Nie oznacza to, że sami nie mamy szans na dobre zabezpieczenie własnych zasobów. Polecam lekturę. Na początek może być Internet, aby się oswoić z tematem.
W naszym konkretnym przypadku (mam na myśli stworzenie bazy danych w PHP i MySQL) należy zadbać przede wszystkim o nadanie odpowiednich praw do tabel bazy danych oraz zabezpieczenie hasła przez jego zaszyfrowanie. Nie będę o tym pisał. Wykracza to poza ramy tego tekstu, który skupia się na instalacji Apache + PHP + MySQL i sprawdzeniu poprawności ich funkcjonowania w środowisku systemu operacyjnego AmigaOS.
Startujemy demona MySQL przez uruchomienie skryptu startmysqld (patrz artykuł Instalacja MySQL pod AmigaOS). Stwórzmy bazę danych "ludzie". Możemy tego dokonać np. przez program mysqladmin, a więc:
mysql:bin/mysqladmin -u root -p create ludzieJako hasło naciskamy enter. Otwieramy klienta bazy, czyli
mysql:bin/mysql -u rootWybieramy bazę:
use ludzie;Prawidłową odpowiedzią MySQL jest:
Database changed.Tworzymy następnie tabelę o nazwie "czlowiek" bazy danych "ludzie". Niech tabela składa się z dwóch pól: "imie" i "nazwisko":
CREATE TABLE czlowiek (imie VARCHAR(15), nazwisko VARCHAR(30));Tutaj prawidłową odpowiedzią serwera jest:
Query OK. 0 rows affected (czas tej operacji).Słów kluczowych: CREATE TABLE, VARCHAR nie musimy pisać dużymi literami, to tylko przyjęty zwyczaj. Uwaga ogólna: nie należy stosować polskich znaków w nazwach zmiennych i plików. Nawet jeśli dane języki programowania czy systemy plików umożliwiają stosowanie narodowych znaków w zmiennych. Przyczyną tych obostrzeń jest ewentualne przenoszenie plików do innego systemu. Zapewne pojawiłyby się w tej materii problemy. Co jakiś czas jesteśmy zaskakiwani przez co raz to nowsze "standardy" znaków narodowych: Amiga-pl, ISO, utf8, utfx. To zapewne nie koniec, więc darujmy sobie polskie znaki. Warto od razu przestawić się na angielskie nazewnictwo, bo to jedyny uniwersalny język. Szczególnie w informatyce.
Jednak jeśli aplikacja ma obsługiwać język narodowy, to należy go stosować w całym jego pięknie, czyli również ze specyficznymi dla niego znakami. MySQL, którego zainstalowaliśmy pod AmigaOS umożliwia stosowanie znaków narodowch w konkretnych wartościach pól bazy. Dodajmy zatem pierwszy wiersz danych do naszej bazy "ludzie":
INSERT INTO czlowiek (imie, nazwisko) VALUES ('Piotr', 'Kowalski');
Zakładanie bazy i wprowadzanie danych.
Dopisaliśmy dane do tabeli. Sprawdzmy czy faktycznie tam są:
SELECT * FROM ludzie;Powinna wyświetlić się tabelka z wpisanymi przez nas danymi. Niestety ręczne wpisywanie danych z wiersza poleceń MySQL nie jest wygodne ani efektywne. Od tego mamy PHP i formularze HTML dostępne z poziomu przeglądarki internetowej. Wróćmy do pliku index.php. Wpiszmy do niego następujące wiersze:
<HTML> <BODY> <H3>Hello!</h3> <?PHP $db = mysql_connect ("localhost", "root", ""); // łączenie się z serwerem mysql mysql_select_db ("ludzie"); $q = "SELECT * FROM czlowiek"; $r = mysql_query($q); if ($row = mysql_fetch_array($r)) { $imie1=$row['imie']; } echo $imie; mysql_close ($db); ?> </body> </html>
Oto trywialny przykład obsługi naszej bazy danych "ludzie" przez PHP. W miarę zdobywania doświadczenia zdziwicie się ile rzeczy można zrobić za pomocą dwóch, trzech tabel bazy danych (związanych odpowiednimi relacjami) oraz kilku prostych skryptów. Napisanie własnego forum nie jest specjalnie trudnym wyzwaniem jeśli dysponujemy MySQL i PHP.
Kluczem do zrozumienia SQL w ogólności jest uświadomienie sobie, że to RELACYJNA BAZA DANYCH, a więc kolejność w bazach tego typu nie jest istotna. W internecie znajdziecie podstawowe i bardziej zaawansowane artykuły traktujące o MySQL i PHP.
Wspomnę tylko, że funkcja mysql_fetch_array odczytuje z tabeli wiersz danych i zapisuje go w tablicy $row. Dzięki $imie1 = $row['imie']; odczytujemy z wiersza pole o danej nazwie - tutaj "imie". echo $imie; drukuje daną zmienną, którą możemy już obejrzeć w przeglądarce:
Wynik działania skryptu index.php.
Zazwyczaj funkcję mysql_fetch_array zawiera się w pętli, aby odczytać wszystkie wiersze z tabeli.
Apache z PHP i MySQL daje jedno z najbardziej konfigurowalnych narzędzi. Mamy możliwość w łatwy sposób tworzenia dowolnej bazy danych. Interfejs z poziomu przeglądaki, dopasowany do utworzonej bazy, możemy szybko ukształtować, według własnych potrzeb. Co więcej? Naszą aplikację możemy kojarzyć z innymi elementami systemu AmigaOS, chociażby z systemem składu dokumentów TeX. Dzięki temu mamy możliwość obejrzenia danych z bazy w formie przejrzystych i ładnie sformatowanych dokumentów. Zastosowania baz danych są rozmaite. Podam chociażby następujące: zbiór artykułów, zestaw dokumentów księgowych, zestaw postów z forum. Ze zbioru artykułów tworzymy książkę. Źródłowe dokumenty księgowe stanowią podstawę do wszelkiego rodzaju rozliczeń: księga przychodów i rozchodów, różnej maści rejestry, znane rozliczenia pit. Wszystko odbywa się według prostej zasady. Po pierwsze relacyjna baza danych. Po drugie przetwarzanie rekordów bazy według określonych reguł, np. przepisów prawnych. Ostatni etap, to produkcja wyników i publikowanie ich w formie dokumentów. Wystarczy uważnie popatrzeć, a znajdziemy zastosowania, które ułatwią nam codzienne zadania. Wtedy docenimy jeszcze bardziej nasz komputer.