Instalujemy PHP: sudo apt-get install php libapache2-mod-php Robimy pliczek testowy PHP gdzie wywołujemy funkcje wyświetlającą informacje na temat PHP w naszym systemie: sudo nano /var/www/html/info.php restartujemy Apacha i testujemy: sudo systemctl restart apache2 Ustawienie, żeby pierwszym otwieranym plikiem był index.php a nie index.html sudo nano /etc/apache2/mods-enabled/dir.conf przestawiamy index.php na pierwszą pozycję w tej sekcji: DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm Tworzymy w katalogu strony domyślnej Apache pliczek index.php nano /var/www/html/index.php i wpisujemy taką zawartość: Po zapisaniu możemy przetestować – mimo że w katalogu są teraz dwa pliki index: to po wpisaniu adresu serwera zamiast tej strony domyślnej Ubuntu powinien się wyświetlić nasz pliczek PHP Włączenie katalogów użytkowników – użytkownicy będą mogli umieszczać strony WWW w swoich katalogach Włączamy mod do Apache2 odpowiedzialny za tą funkcję sudo a2enmod userdir Nie trudno się domyślić, ze konfiguracja tego moda znajduje się w katalogu mods-enabled, jak zajrzymy tam, to widać, że strony żytkowników beą przechowywane w ich katalogach domowych w podkatalogu public_html nano /etc/apache2/mods-enabled/userdir.conf Jeżeli byśmy chcieli żeby na przykład podkatalog na strony to był np.: user_sites, to oczywiście w powyższy pliku można by to przekonfigurować – my zostawiamy tak jak jest Przelogujmy się na zwykłego użytkownika, np. zsme (storzcie sobie usera inazwisko i robcie to z jego konta) i stwórzmy katalog public_html w jego katalogu domowym mkdir ~/public_html Zróbmy index.html i sprawdzamy czy działa (ukradnijmy z któregoś hosta wirtualnego z poprzedniego ćwiczenia ): cp /var/www/zsme.local/html/index.html /home/zsme/public_html/index.html Edytujemy ten pliczek do takiej postaci: teraz po wpisaniu adresu naszego serwera w ten sposób http://192.168.1.200/~zsme/index.html powinna się zgłosić strona danego usera (w naszym przypadku to będzie user zsme) PHP z katalogów użytkowników: Domyślnie obsługa PHP w katalogach użytkowników jest wyłączona – jeżeli użytkownik zrobi jakiś plik PHP w swoim katalogu public_html i spróbuje go wywołać, ten po prostu nie zadziała. Żeby włączyć tą obsługę musimy wyedytować ustawienia moda php, jak wszystkie inne mody znajdują się one oczywiście w katalogu mods-enabled w ustawieniach Apache: nano /etc/apache2/mods-enabled/ php7.2.conf Zgodnie z informacją z komentarza komentujemy 5 linijek, zapisujemy plik i restartujemy Apache. Teraz otwieramy sobie drugą konsolę (Ctrl+Alt+F2) i logujemy się na zsme (wy oczywiście na swojego usera inazwisko) i robimy pliczek testowy php o nazwie index.php z pętlą: nano ~/public_html/index.php "; } ?> Po wpisaniu w przeglądarkę adresu strony użytkownika zsme zgodnie z wcześniejsza konfiguracją pierwszy powinien zostać otwarty plik index.php i interpreter PHP powinien wykonać naszą pętle: Wyświetlanie błędów w plikach PHP Domyślnie PHP ma wyłączone wyświetlanie komunikatów o błędach które zrobimy w plikach php, zamiast nich wyświetla pustą stronę - na serwerze produkcyjnym to podejście jest jak najbardziej w porządku ze względu na bezpieczeństwo naszej strony (po co ktoś ma znać nazwy naszych zmiennych itd.). Jako użytkownik zsme skopiuję sobie nasz plik index.php i nazwe kopie blad.php cp ~/public_html/index.php ~/public_html/blad.php Zróbmy teraz w naszym pliku blad.php specjalnego popularnego błędom – usuńmy średnik Spróbujmy wyświetlić ta stronę: Strona po prostu się nie wyświetla (w innych przeglądarkach może to być pusta strona). Natomiast dla naszej wygody, jako że to środowisko służące tylko do ćwiczeń, dobrze sobie włączyć obsługę wyświetlania błędów. Musimy włączyć wyświetlanie komunikatów przez PHP w pliku php.ini nano /etc/php/7.2/apache2/php.ini Szukamy w pliku sekcji dotyczące błędów (sam plik jest mocno rozbudowany) I poniżej ustawiamy zmienną display_errors = On Zapisujemy, restartujemy Apache i sprawdzamy jak teraz działa Jak widać, teraz widzimy dokładną informacje o błędzie – w naszym przypadku braku średnika na końcu 5 linijki.