Konfiguracja środowiska testowego dla developera PHP pod Windows (część 1): serwer HTTP

Artykuł dodany: 25 sierpnia 2012. Ostatnia modyfikacja: 16 grudnia 2015.

Stopień trudności (1 - dla początkujących, 5 - dla ekspertów): 1

UWAGA! Przedstawiony w artykule Zend Server CE został przekształcony w wersję płatną. Zapraszam do przeczytania nowego tekstu, w którym opisałem jak wykonać instalację serwera Apache oraz PHP 7. Mimo tego, część informacji zawartych poniżej jest w dalszym ciągu aktualna i może również się przydać.

Przychodzi taki dzień w życiu człowieka że pisanie kodu HTML czy JavaScript już nie wystarcza – chciałby wskoczyć na wyższy poziom, wykorzystać jeden z dostępnych języków programowania a również rozpocząć naukę baz danych czyli języka SQL. Aby to osiągnąć niezbędna będzie instalacja odpowiednich serwerów. Pracując z czystym HTMLem mówimy o tak zwanych technologiach client-side. Polegają one na wykonaniu kodu po stronie klienta, zazwyczaj będzie to przeglądarka internetowa, choć mogą to być też oczywiście inne narzędzia. Kod taki jest jawny, każdy może go zobaczyć (źródło strony HTML wygląda dokładnie tak, jak zostało zapisane w edytorze). Z drugiej strony mamy technologię server-side. Kod strony napisany jest w jednym z dostępnych języków programowania (java, ruby, python, php itd), parser bądź kompilator wykonuje taki kod i wynik jego działania przesyła do przeglądarki co mamy okazję zobaczyć ponownie jako HTML/JS. Klient nie ma prawa uzyskać bezpośredniego dostępu do kodu źródłowego aplikacji, zapytań SQL czy plików konfiguracyjnych (nie uwzględniając oczywiście pomyślnej próby włamania na serwer wynikającej czy to z błędów w aplikacji, czy dziur w oprogramowaniu). Dzięki temu, Ty jako programista, jesteś w stanie robić takie rzeczy jak np. rejestracja użytkowników, generowanie formularzy z automatyczną walidacją, pobieranie danych z innych stron lub też dynamiczne odpowiedzi na zapytania XHR z JavaScriptu. W praktyce, gdy łączysz się ze stroną serwer HTTP przejmuje żądanie, przekazuje je do wykonania odpowiedniemu językowi i gdy ten skończy przetwarzanie zwraca odpowiedź czyli wynik działania do serwera, ten dalej do klienta. Uzbrojeni w tę wiedzę przejdźmy zatem do instalacji serwera. Zakładam że zdecydowałeś się na naukę bardzo popularnego i łatwo dostępnego języka PHP.

O serwerach HTTP słów kilka

Z całą pewnością nie można powiedzieć że ograniczeni jesteśmy przez jedno rozwiązanie. Serwerów HTTP (liczących się) jest na rynku kilka. Jednym z najstarszych i w dalszym ciągu najbardziej popularnym jest Apache, tworzony przez Apache Software Foundation i rozwijany na wolnej licencji. Oprogramowanie dostępne jest chyba na każdą platformę. Daleko, daleko w tyle znajduje się serwer IIS rozwijany przez Microsoft, dostępny wyłącznie w systemie Windows. Od pewnego czasu depcze mu mocno po piętach (w statystykach) wydajny, multiplatformowy serwer Nginx. Szczególnie szybki podczas serwowania plików statycznych. Nie ustępuje mu szybkością Lighttpd, bardzo przyjemny w konfiguracji, z dużą ilością modułów jednak nie mogący się jakoś przebić do głównego nurtu. Jest też LiteSpeed na licencji zarówno darmowej jak i komercyjnej. To tylko ułamek najczęściej stosowanych. Czym się różnią? Konfiguracją, szybkością działania, integracją z przeróżnymi technologiami, zużyciem pamięci. Część z nich powstała jako alternatywa do stosunkowo wolnego w działaniu serwera Apache. Który wybrać? Kwestia gustu, upodobań, narzucenia przez firmę utrzymującą naszą stronę. Kupując pakiet hostingowy z gotowym panelem (DirectAdmin, CPanel, Plesk) raczej na pewno całość będzie funkcjonowała na serwerze Apache. Decydować o instalacji oprogramowania można na serwerze dedykowanym lub VPS ale na początek raczej na pewno Twoja strona nie będzie generowała odpowiednio wysokiego ruchu aby tym problemem się zajmować. Warto jednak wiedzieć jakie są trendy.

Instalacja środowiska Zend Server CE pod Windows

Istnieją dwa sposoby instalacji serwera. Ręczna – przez pobranie pakietu serwera, przejście całej konfiguracji, dopasowanie do swoich potrzeb, instalację zależności. Jednym słowem sprawienie że jako całość będzie to funkcjonowało. Jednak jest to metoda dla zaawansowanych użytkowników, którzy posiadają już odpowiednią wiedzę, wiedzą czego szukać i co ewentualnie poprawiać. Niewątpliwym plusem takiego sposobu instalacji jest duża porcja wiedzy jaką zyskujemy przy okazji. Dlatego na pewnym etapie zalecam wręcz aby przynajmniej raz spróbować przejść przez całą procedurę. Powiedziałbym nawet że nie może nazwać się zaawansowanym programistą osoba, która nigdy tego procesu nie ukończyła.

Dużo łatwiejsze, i to też zrobimy, jest instalacja całej paczki czyli serwera HTTP, interpretera PHP i opcjonalnie silnika bazy danych. Paczek takich jest kilka z czego dwie najbardziej znane to WampServer oraz XAMPP. Ja jednak chciałbym przedstawić inną opcję czyli Zend Server Community Edition. Przede wszystkim Zend to firma dzięki której istnieje całe PHP, z całą pewnością nie stracimy z dnia na dzień wsparcia i mamy pewność że nad projektem pracują wyłącznie odpowiedzialne osoby (niczego nie ujmując aktywnej społeczności pozostałych projektów). Pakiet można zaktualizować do wersji komercyjnej dzięki czemu zyskujemy dostęp do potężnych narzędzi analitycznych. Bardzo dobrze integruje się też z edytorem Zend Studio. W porównaniu do np. XAMPP nie instaluje zbędnego raczej w chwili obecnej pakietu języka Perl. A co dla nas ważne, nie zawiera w sobie instalatora silnika MySQL (chcemy przeprowadzić oddzielną instalację, poza tym nie każdy potrzebuje akurat tego rozwiązania). Pozostałe zalety to m.in:

  • - wsparcie dla Javy (nie mylić z JavaScript)
  • - bardzo dobra dokumentacja
  • - duża ilość dodatkowych rozszerzeń (extensions) PHP. Ich instalacja może czasami sprawić pod Windowsem bardzo dużo problemu (APC, Imagick, PostgreSQL) i wymaga ręcznej interwencji
  • - webowa konsola administratora
  • - dodatkowy akcelerator kodu (Zend Optimizer+)
  • - adaptery do baz SQL Server oraz Oracle

Całą paczkę dla systemów Windows/Linux/Mac OS X można pobrać ze strony Zenda. Dostępne są wersje PHP 5.2, 5.3 i 5.4. Po pobraniu pliku wykonywalnego .exe przechodzimy do instalacji. Zend Server umożliwia instalację oddzielnie serwera Apache, ale też jeżeli mamy taką potrzebę, możemy go zintegrować z dostępnym w systemie serwerem IIS.

Przedstawione w artykule zdjęcia pochodzą z deweloperskiej wersji Windows 8 w którym automatycznie instalowany jest serwer IIS w wersji 8. Ponieważ na 99% wykupując hosting masz pewność że serwer będzie działał na Linuksie i Apache, bardziej kształcącym będzie wybór właśnie tego środowiska. Trzeba jednak przyznać iż w nowej wersji okienek Microsoft bardzo ułatwił całą procedurę i np. dostępne jest narzędzie instalacji Visual Studio, MSSQL czy nawet z automatu bazy MySQL. Banalna jest też integracja z chmurą Azure. To jednak temat dla bardziej zaawansowanych użytkowników.

Jaki typ instalacji wybrać? Lepiej samemu zdecydować jakie pakiety będziemy potrzebować niż zdawać się na pełną instalację. Na początek pewnie nie będzie potrzebny Java connector ani Zend Framework(ZF). Ten drugi to zaawansowany framework programistyczny czyli baza do budowania aplikacji MVC. ZF lepiej pobrać oddzielnie i osadzić w naszym projekcie.

Gdzie zainstalować serwer? Jeżeli posiadamy podział dysku na kilka partycji (albo dwa lub więcej dysków) pakiet Zenda możemy instalować na dysku C: a dane hostów (za chwilę wytłumaczę o co chodzi) na drugiej partycji/dysku. Dobrze jest sobie utworzyć np. folder d:\Server na którym przechowywane są dane dotyczące serwera a w przypadku konieczności reinstalacji systemu pozostają nieruszone.

Porty na jakich nasłuchuje serwer. Domyślnie odwiedzając strony internetowe łączysz się zawsze na porcie 80 czyli adres wygląda np.: http://google.pl:80 przy czym deklaracja portu jest pomijana. Dla stron szyfrowanych jest to port 443. Warto taki port zostawić chyba że mamy inną aplikację która już na tym porcie pracuje. Panel administracyjny ZS pracuje na innym porcie i jako ciekawostkę powiem że korzysta z serwera Lighttpd.

Możemy zakończyć instalację. Pozostanie nam jeszcze wybór hasła jakim logujemy się do panelu administracyjnego.

Do tej pory jeżeli pisałeś coś w HTMLu wystarczyło otworzyć plik w przeglądarce i działało. Aby korzystać z możliwości programowania server-side treść musi przejść przez serwer. Domyślnie na każdym komputerze istnieje coś takiego jak pętla zwrotna. Ma ona adres http://localhost albo IP http://127.0.0.1. Jeżeli posiadasz działający serwer będzie on dostępny właśnie na tych dwóch adresach. Wpisz go w przeglądarce.

Powinieneś zobaczyć stronę testową. To znaczy że wszystko działa. Gdyby coś jednak poszło źle trzeba przeanalizować logi dostępne w folderze instalacji Program Files (x86)/Zend/Apache2/logs/ i tutaj już użyć ulubionej wyszukiwarki w celu analizy problemu i naprawy błędu.

Możesz też zalogować się do panelu administracyjnego który wygląda jak na zdjęciu poniżej:

I w zakładce “Monitor”->“Logs” znaleźć przyczynę niepowodzenia. To też powód dlaczego instalowane są dwa serwery. W razie problemów z Apachem przeznaczonym do serwowania stron w dalszym ciągu działa panel administracyjny. Poprzez panel jesteśmy w stanie włączać/wyłączać funkcje i rozszerzenia oraz restartować serwer. Restart serwera możliwy jest również przez ikonę widoczną w zasobniku systemowym (tray’u).

Hosty wirtualne

Wspomniałem wcześniej że sam Zend Server można zainstalować w dowolnej lokalizacji a dla ułatwienia hosty przenieść na drugi dysk lub partycję np d:\Server. Czym są hosty, wirtualne hosty albo vhosts? To nic innego jak domeny takie jak google.pl, wp.pl czy wwwgo.pl. Ale w tym momencie należy zaczerpnąć odrobinę podstaw czyli zrozumieć jak działa DNS. W sieci dostępne są dwa rodzaje adresów. Adres IP (wersja 4 protokołu ma postać 123.001.255.321, wersja 6 mogąca zaadresować znacznie więcej adresów – 0:0:0:0:0:0:0:1) albo nazwa domeny. Nazwami domen posługujemy się my, ludzie, ze względu na ich łatwiejszą do zapamiętania konstrukcję. Adresów IP używają maszyny. W chwili gdy wpisujesz w przeglądarce adres domeny, dla przykładu wp.pl, Twój komputer stara się odnaleźć do niego trasę, zlokalizować gdzieś w globalnej sieci. Podobnie jak listonosz. Używa kodu pocztowego, nazwy miasta, ulicy, numeru posesji coraz dokładniej ustalając gdzie przebywasz nawet jeśli list pochodzi z drugiego końca kraju. Komputer w tym celu odpytuje lokalny cache, jeżeli wcześniej nie odwiedzałeś domen *.pl rejestr domen pl i tak zwane root serwery. Są to rozproszone po całym świecie maszyny (bardziej centra danych), kontrolowane przez państwowe instytucje o potężnych łączach i doskonale zabezpieczone. Adresy root serwerów wpisane są na sztywno w konfiguracji komputera. Struktura DNS ma charakter hierarchiczny. Czyli kolejność odpytywania wygląda tak: ROOT Server -> rejestr domen pl -> właściwa domena pl -> subdomena. W DNS zapisane jest również mapowanie domena -> adres IP. Dla przykładowej Wirtualnej Polski wpis taki będzie wyglądał:

wp.pl IN A 212.77.100.101

Rekord A oznacza adres IPv4. Po co to wszystko? Na jednej maszynie może być dowolna ilość domen (w ramach możliwości sprzętowych – łącza, pamięć, procesor zdolne podołać wyświetlaniu) czyli właśnie tych wirtualnych hostów. Typowe dla hostingów współdzielonych. Po tym jak wpisałeś w pasku adresu wp.pl, zostały odpytane wszystkie niezbędne serwery aby ustalić gdzie szukać strony i wiadomo już teraz że trzeba skierować się do adresu 212.77.100.101. Twoja przeglądarka puka grzecznie do serwera Apache nasłuchującego na tym adresie na domyślnym porcie 80 z pytaniem “Hej, mamy tu host wp.pl?”. Apache lub inny serwer HTTP przegląda swoją konfigurację i w zależności od tego co znajdzie zwraca właściwą stronę albo często spotykany komunikat 404 Not Found (niestety nikt taki tu nie mieszka).

Co się w takim razie dzieje gdy wpisujemy http://localhost? Zapytanie nie wychodzi nigdzie na zewnątrz, wpis o pętli zwrotnej zapisany jest w konfiguracji komputera. Serwer nasłuchujący lokalnie zwraca od razu odpowiedź odczytując swoją konfigurację. Skąd bierze się taka ładna strona domyślna? Tu już trzeba zajrzeć w konfigurację Zend Server a konkretnie właśnie serwera Apache. Pod adresem /Program Files (x86)/Zend/Apache2/conf/ znajduje się główny plik konfiguracyjny httpd.conf. A w nim:

DocumentRoot "C:\Program Files (x86)\Zend\Apache2/htdocs"
<IfModule dir_module>
  DirectoryIndex index.php index.html
</IfModule>

Główny katalog serwera to “C:\Program Files (x86)\Zend\Apache2/htdocs”. Jeśli zajrzysz do tego katalogu znajdziesz plik index.html który jest właśnie tym plikiem który wyświetla się pod adresem http://localhost. DirectoryIndex oznacza kolejność w jakiej pliki są wczytywane oraz główny plik wczytywany automatycznie (stąd nie podajemy http://localhost/index.html). Gdyby w katalogu znalazły się pliki index.html i index.php to jako główny wczytany zostanie index.php. Tu spostrzegawczy czytelnicy zauważą że serwer może również zwracać statyczne pliki, nie tylko przetwarzane przez języki programowania.

Umieszczanie stron wyłącznie statycznych w strukturze serwera ma również zaletę. W narzędziach programistycznych jak Firebug aktywna stanie się zakładka “Sieć”. Umożliwia śledzenie zapytań do serwera, tym samym błędów i stron nieodnalezionych (404) lub z innym kodem.

W konfiguracji możemy również odnaleźć linię:

Include "C:\Program Files (x86)\Zend\ZendServer/etc/sites.d/vhost_*.conf"

Przyjęło się że jeden host powinien mieć jeden plik konfiguracji ze względu na łatwiejszą kontrolę nad domenami. Gwiazdka oznacza dowolną nazwę. Możemy oczywiście utworzyć nowy folder C:\Program Files (x86)\Zend\Apache2/htdocs/test wrzucić do niego jakieś pliki i inne katalogi np. serwer.html i wczytać je przez http://localhost/test/serwer.html ale to powoduje bałagan. Pierwszym krokiem jaki podejmiesz będzie pewnie zakup domeny i dobrze by było mieć odwzorowanie tego lokalnie.

Załóżmy że posiadasz domenę test.pl, zamierzasz pod tym adresem prowadzić blog oparty o Wordpress, ale przed wrzuceniem całości na serwer docelowy w firmie hostingowej chcesz sprawdzać wszystko lokalnie. Dla rozróżnienia domena miałaby znaleźć się pod adresem test.local. We własnym systemie operacyjnym jesteś w stanie ustalać dowolnie relacje IP->domena. Nie będzie to miało żadnego wpływu na to jak inni z zewnątrz rozwiązują DNS ale Tobie może się bardzo przydać. Należy zmodyfikować plik
C:\Windows\System32\drivers\etc\hosts

Może się zdarzyć że nie będziesz posiadał uprawnień do zapisu. Wtedy najlepiej skopiować plik np. na pulpit, zmienić zawartość i skopiować ponownie do katalogu docelowego.

W pliku widzisz też dwa zakomentowane wpisy dla hostów lokalnych, dla adresów IPv4 i IPv6. Reguła jest bardzo prosta. Podajemy adres IP a następnie nazwę domeny. Po zapisaniu jeżeli wpiszesz w przeglądarce http://test.local wszystkie wywołania będą kierowane do adresu pętli zwrotnej.

Serwer Apache nie wie jeszcze że powinien obsłużyć domenę (vhost) test.local. W zasadzie zgodnie z konfiguracją będzie kierował wszystkie requesty do głównego katalogu, czyli tego samego co dla domeny localhost. Aby to zmienić należy utworzyć plik konfiguracji
C:\Program Files (x86)\Zend\ZendServer/etc/sites.d/vhost_test.local.conf

<VirtualHost *:80>
  ServerName test.local  
  DocumentRoot "d:/Server/test.local"
  <Directory "d:/Server/test.local">
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>

Aby sprawdzić czy działa nam domena a zarazem interpreter PHP można utworzyć nowy plik:
d:/Server/test.local/index.php

<?php
phpinfo();

Tym samym skonfigurowaliśmy sobie działające środowisko developerskie z mapowaniem na domeny lokalne. Bardzo ważne jest aby zapamiętać, iż serwer na Windows nie rozróżnia wielkości liter w nazwach. Zarówno pliki index.php jak i InDeX.php są formalnie identyczne. Odwrotnie jest w systemach uniksowych w których to będą dwa różne pliki. Tworząc stronę pamiętaj o tym.

Na zdjęciu wyżej widzimy dyrektywę Loaded Configuration File. Wiele osób miewa problemy z modyfikacją właściwego pliku php.ini. Należy go szukać dokładnie w ścieżce opisanej jako wartość opcji.

Serwer Apache posiada opcję wprowadzania indywidualnej konfiguracji. Zmiany dokonuje się poprzez plik .htaccess (kropka na początku w systemie uniksowym oznacza plik ukryty). W artykule nie będę pokazywał jak z niego korzystać gdyż to kwestia indywidualnych potrzeb, ale warto wiedzieć że np. plikiem tym można włączyć mod_rewrite czyli ładne adresy URL. Pełna dokumentacja znajduje się na stronach fundacji Apache.

Podsumowanie części pierwszej

Myślę że w podstawowym zakresie przedstawiłem najważniejsze kroki jakie początkujący adept programowania musi podjąć aby skonfigurować lokalny serwer HTTP. Jest to temat tak szeroki, że można spokojnie napisać kilka opasłych tomów. Skorzystanie z pakietu Zend Server w znaczącym stopniu przyśpieszyło wkroczenie w ten świat. W kolejnej części postaram się przybliżyć zawiłości instalacji serwerów MySQL i PostgreSQL.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.