{"id":87,"date":"2007-01-18T22:24:54","date_gmt":"2007-01-18T21:24:54","guid":{"rendered":"http:\/\/eriz.pc-inside.org\/weblog\/instalacja-i-konfiguracja-apache-22-z-php-5x-pod-windows-xp-87.html"},"modified":"2008-12-27T18:15:58","modified_gmt":"2008-12-27T17:15:58","slug":"instalacja-i-konfiguracja-apache-22-z-php-5x-pod-windows-xp","status":"publish","type":"post","link":"https:\/\/eriz.pcinside.pl\/weblog\/instalacja-i-konfiguracja-apache-22-z-php-5x-pod-windows-xp-87.html","title":{"rendered":"Instalacja i konfiguracja Apache 2.2 z PHP 5.x pod Windows XP"},"content":{"rendered":"<p>\nInstalowanie PHP 5 pod Apache 2.0 do bardzo trudnych nie nale\u017cy. W zwi\u0105zku z tym, i\u017c moje biurko dopala\u0142 Indianin 2.0 z Tresowanym S\u0142oniem czwartej generacji, postanowi\u0142em troch\u0119 od\u015bwie\u017cy\u0107 paczki, bo chyba si\u0119 troch\u0119 zasta\u0142em.\n<\/p>\n<p>OK, pora na meritum. Najpierw musimy zaopatrzy\u0107 si\u0119 w niezb\u0119dne paczki:<\/p>\n<ul>\n<li><a href=\"http:\/\/httpd.apache.org\">Apache<\/a><\/li>\n<li><a href=\"http:\/\/php.net\/downloads\">PHP 5.2<\/a><\/li>\n<\/ul>\n<p>W przypadku Apache&#8217;a \u015bci\u0105gamy najnowsze dost\u0119pne binarki dla Windows (plik .msi; na stronie dost\u0119pne jest stabilne wydanie). PHP \u015bci\u0105gamy w postaci paczki ZIP.<\/p>\n<p>Zaloguj si\u0119 jako administrator (no, mo\u017cna jeszcze na ograniczonym, ale nie jest to takie wygodne) i&#8230; instalujemy.<\/p>\n<p><!--more--><\/p>\n<h3>Zapraszamy Indianina do tipi<\/h3>\n<p>Zaczynamy od Apache&#8217;a. Po \u015bci\u0105gni\u0119ciu pliku <em>apache_2.2.x-win32-x86-no_ssl.msi<\/em> (albo -ssl; w naszym przypadku b\u0119dzie to wersja bez SSL-a) uruchamiamy go dwuklikiem. Instruujemy instalatora najcz\u0119\u015bciej za pomoc\u0105 przycisku <em>next<\/em>\/<em>install<\/em>, z dwoma wyj\u0105tkami: przy wpisywaniu danych serwera (w &#8222;domowych&#8221; warunkach wpisujesz cokolwiek) oraz&#8230; przy zako\u0144czeniu (przecie\u017c tam <em>next<\/em> ju\u017c nie ma ;P).<\/p>\n<p>Podczas instalacji b\u0119dziemy mieli mo\u017cliwo\u015b\u0107 zmiany katalogu, w kt\u00f3rym zostan\u0105 umieszczone pliki serwera. Ustawmy \u015bcie\u017ck\u0119 na np. <em>C:\\serwer\\apache<\/em>. Potem popychamy tylko instalatora przyciskiem <em>next<\/em>. &#8222;Mrugnie&#8221; par\u0119 okienek (oznaczaj\u0105 one startowanie us\u0142ugi serwera) i w mi\u0119dzyczasie firewall spyta (mam nadziej\u0119, \u017ce masz :P), czy zezwoli\u0107 na nas\u0142uchiwanie na porcie :80. Odpowiadamy twierdz\u0105co.<\/p>\n<p>Otwieramy swoj\u0105 ulubion\u0105 przegl\u0105dark\u0119 (mam nadziej\u0119, \u017ce jest to <a href=\"http:\/\/opera.com\">Opera<\/a> ;)) i wpisujemy <em>127.0.0.1<\/em>. Powinna otworzy\u0107 nam si\u0119 strona informuj\u0105ca o poprawnej instalacji Indianina.<\/p>\n<p><strong>UWAGA:<\/strong> mo\u017ce si\u0119 zdarzy\u0107, i\u017c firewall nie zapyta o zezwolenie na nas\u0142uch i nie uda si\u0119 otworzy\u0107 strony w przegl\u0105darce. Taka sytuacja wyst\u0119puje dosy\u0107 cz\u0119sto przy w\u0142\u0105czonym Skype podczas instalacji. Wystarczy go wy\u0142\u0105czy\u0107 i uruchomi\u0107 us\u0142ug\u0119 poprzez komend\u0119 <em>net start apache2<\/em> wpisan\u0105 w Start-Uruchom. Je\u015bli pomimo to strona nie chce si\u0119 otworzy\u0107, mo\u017ce to oznacza\u0107, \u017ce jaka\u015b inna aplikacja blokuje port. W\u00f3wczas musisz sprawdzi\u0107 ustawienia wszystkich aplikacji, kt\u00f3re mog\u0105 blokowa\u0107 port. Pomocne mo\u017ce si\u0119 przyda\u0107 polecenie <em>netstat -ab<\/em>.<\/p>\n<h3>&#8230;sprowadzamy S\u0142onia<\/h3>\n<p>\nZak\u0142adam, \u017ce wszystko jest w porz\u0105dku. Zatrzymujemy Apache za pomoc\u0105 polecenia <em>net stop apache2<\/em>. Pora teraz rozpakowa\u0107 pliki z PHP. Utw\u00f3rz sobie folder <em>C:\\serwer\\php<\/em> i rozpakuj tam ZIP-a. Do <em>C:\\Windows\\system32\\<\/em> skopiuj nast\u0119puj\u0105ce pliki:\n<\/p>\n<ul>\n<li>php5ts.dll<\/li>\n<li>ntwdblib.dll (je\u015bli chcesz korzysta\u0107 z MS SQL; w przypadku wersji 2005 Express musisz skopiowa\u0107 <a href=\"http:\/\/webzila.com\/dll\/1\/ntwdblib.zip\">nowsz\u0105 wersj\u0119<\/a>)<\/li>\n<\/ul>\n<p>Nast\u0119pnie zmie\u0144 nazw\u0119 pliku <em>php.ini-recommended<\/em> na <em>php.ini<\/em> i kopiujemy go do katalogu systemowego.<\/p>\n<h3>Tresujemy S\u0142onia<\/h3>\n<p>Teoretycznie mogliby\u015bmy ju\u017c przyst\u0105pi\u0107 do podpi\u0119cia PHP w Apache&#8217;u jednak wcze\u015bniej zatrzymam si\u0119 na konfiguracji S\u0142onika. W tym celu dwuklikiem edytujemy plik <em>php.ini<\/em>, o kt\u00f3rym ju\u017c wspomnia\u0142em<\/p>\n<p>Plik jest dosy\u0107 dobrze opisany, wi\u0119c osoby obeznane z technicznym angielskim nie b\u0119d\u0105 mia\u0142y problem\u00f3w z jego edycj\u0105. Dla pozosta\u0142ych om\u00f3wi\u0119 najwa\u017cniejsze, moim zdaniem, sekcje:<\/p>\n<ul>\n<li><strong>display_errors = Off<\/strong>\n<p>Dyrektywa ta odpowiada za wy\u015bwietlanie b\u0142\u0119d\u00f3w przy parsowaniu skrypt\u00f3w. Domy\u015blnie jest ustawiona na ukrywanie (ze wzgl\u0119d\u00f3w bezpiecze\u0144stwa), ale uniemo\u017cliwi nam poprawianie b\u0142\u0119d\u00f3w. Zapewne b\u0119dziesz tworzy\u0107 w\u0142asne skrypty, wi\u0119c utrudni to tylko prac\u0119. Zmie\u0144 <em>Off<\/em> na <em>On<\/em>.<\/p>\n<\/li>\n<li><strong>;error_log = filename<\/strong>\n<p>Opcja ta umo\u017cliwia zapisywanie wszystkich komunikat\u00f3w o b\u0142\u0119dach do pliku. Wbrew pozorom, naprawd\u0119 u\u0142atwia \u017cycie, poniewa\u017c w niekt\u00f3rych wypadkach w og\u00f3le nie zobaczymy b\u0142\u0119d\u00f3w (np. podczas przekierowa\u0144). Usu\u0144 \u015brednik na pocz\u0105tku linijki i zamie\u0144 <em>filename<\/em> na \u015bcie\u017ck\u0119 do pliku, w kt\u00f3rym maj\u0105 by\u0107 zapisywane &#8222;buraki&#8221; (np. <em>&#8222;C:\/serwer\/bledy.php.log&#8221;<\/em>)<\/p>\n<\/li>\n<li><strong>extension_dir = &#8222;.\/&#8221;<\/strong>\n<p>Wa\u017cne, o ile najwa\u017cniejsze ustawienie. Definiuje ono, w kt\u00f3rym katalogu znajduj\u0105 si\u0119 rozszerzenia. Zazwyczaj domy\u015blna \u015bcie\u017cka nie b\u0119dzie zgadza\u0142a si\u0119 z tym, co mamy na dysku, wi\u0119c zmie\u0144 j\u0105 na <em>&#8222;C:\/serwer\/php\/ext\/&#8221;<\/em><\/p>\n<\/li>\n<li><strong>;extension=php_mbstring.dll&#8230;<\/strong>\n<p>Wpisy te okre\u015blaj\u0105, kt\u00f3re rozszerzenia s\u0105 w\u0142\u0105czone. Domy\u015blnie, wszystkie s\u0105 wy\u0142\u0105czone. Nie ma sensu w\u0142\u0105czania wszystkich, poniewa\u017c s\u0105 one \u0142adowane przy startowaniu kompa. W\u0142\u0105czymy tylko kilka z nich: <em>php_mbstring<\/em>, <em>php_bz2<\/em>, <em>php_gd2<\/em>, <em>php_imap<\/em> (je\u015bli chcesz obs\u0142ugiwa\u0107 odbieranie poczty e-mail w swoich skryptach), <em>php_mysql<\/em> (je\u015bli b\u0119dziesz korzysta\u0107 z <a href=\"http:\/\/mysql.org\">MySQL<\/a>; <strong>wymagane jest r\u00f3wnie\u017c zainstalowanie samej bazy<\/strong>). Ka\u017cde rozszerzenie aktywujesz poprzez usuni\u0119cie \u015brednika na pocz\u0105tku linijki.<\/p>\n<\/li>\n<\/ul>\n<p>Zapisz zmiany w pliku.<\/p>\n<h3>Sprowadzamy S\u0142onia do tipi<\/h3>\n<p>Mo\u017cemy to zrobi\u0107 na dwa sposoby: w trybie ISAPI b\u0105d\u017a CGI. Upraszczaj\u0105c, ISAPI oznacza za\u0142adowanie PHP jako w\u0105tek Apache&#8217;a. W trybie CGI PHP dzia\u0142a jako osobna aplikacja. Ma to znaczenie dla bezpiecze\u0144stwa, kt\u00f3re w przypadku CGI jest wi\u0119ksze (proces nie zawiesi ca\u0142ego serwera). Natomiast, w przypadku ISAPI generowanie stron jest du\u017co szybsze. W zastosowaniach &#8222;domowych&#8221; polecam u\u017cycie trybu ISAPI. Opisz\u0119 oba:<\/p>\n<h4>ISAPI<\/h4>\n<p>Najpierw skopiuj plik <em>php5apache2_2.dll<\/em> z katalogu PHP do folderu <em>bin<\/em> Apache&#8217;a. Wejd\u017a do katalogu <em>conf<\/em> i zapomoc\u0105 notatnika otw\u00f3rz plik <em>httpd.conf<\/em><\/p>\n<p>Musimy teraz nakaza\u0107 Apache&#8217;owi przetwarzanie plik\u00f3w z rozszerzeniem <em>.php<\/em> przez odpowiedni modu\u0142. W celu zachowania porz\u0105dku, znajd\u017a sekcj\u0119 zaczynaj\u0105c\u0105 si\u0119 od:<\/p>\n<p><code>#<br \/>\n# Dynamic Shared Object (DSO) Support<br \/>\n#<\/code><\/p>\n<p>i na jej ko\u0144cu dopisz:<\/p>\n<p><code>LoadModule php5_module \"bin\/php5apache2_2.dll\"<br \/>\nAddType application\/x-httpd-php .php<br \/>\n#PHPINIDir D:\/konfiguracja<br \/>\n<\/code><\/p>\n<p>Je\u015bli wygodniejszym rozwi\u0105zaniem jest dla Ciebie przechowywanie pliku <em>php.ini<\/em> w katalogu innym ni\u017c systemowy, odkomentuj ostatni\u0105 linijk\u0119 powy\u017cszego listingu i podaj \u015bcie\u017ck\u0119 wg wzoru.<\/p>\n<h4>CGI<\/h4>\n<p>Wpisz w tym samym miejscu, co dla ISAPI linijki:<\/p>\n<p><code>ScriptAlias \/php\/ \"c:\/serwer\/php\/\"<br \/>\nAddType application\/x-httpd-php .php<br \/>\nAction application\/x-httpd-php \"\/php\/php-cgi.exe\"<br \/>\n<\/code><\/p>\n<p>Nast\u0119pnie znajd\u017a lini\u0119:<\/p>\n<p><code>Options Indexes FollowSymLinks<\/code><\/p>\n<p>i dopisz na jej ko\u0144cu <em>ExecCGI<\/em><\/p>\n<p><code>Options Indexes FollowSymLinks ExecCGI<\/code><\/p>\n<h3>Zmieniamy toporek<\/h3>\n<p>W\u0142a\u015bciwie, to by by\u0142o na tyle &#8211; mo\u017cna by by\u0142o ju\u017c wystartowa\u0107 Apache&#8217;a, ale domy\u015blne opcje s\u0105 troch\u0119 &#8222;niewygodne&#8221;.<\/p>\n<p>Maj\u0105c otwarty plik <em>httpd.conf<\/em> szukamy:<\/p>\n<ul>\n<li><strong>Listen 80<\/strong>, <strong>ServerName &lt;nazwa&gt;:80<\/strong>\n<p>Tym ustawiamy port, na kt\u00f3rym Apache ma oczekiwa\u0107 na po\u0142\u0105czenia. Je\u015bli co\u015b nam nie pasuje, to zmieniamy <em>80<\/em> na inn\u0105 liczb\u0119. W wi\u0119kszo\u015bci wypadk\u00f3w nie b\u0119dzie to jednak potrzebne. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<\/li>\n<li><strong>#LoadModule rewrite_module modules\/mod_rewrite.so<\/strong>\n<p>\nOd tego wpisu zale\u017cy, czy b\u0119dziemy mogli skorzysta\u0107 z tzw. &#8222;Przyjaznych URL-i&#8221;, np. <em>http:\/\/serwer\/strona\/dzial-86<\/em>. To temat na osobny wpis, wi\u0119cej <a href=\"http:\/\/httpd.apache.org\/docs\/1.3\/mod\/mod_rewrite.html\">na stronie projektu Apache<\/a> i po polsku <a href=\"http:\/\/home.pl\/pomoc\/funkcje\/htaccess\/rewrite\">na home.pl<\/a>. Usu\u0144 <em>#<\/em> rozpoczynaj\u0105cy linijk\u0119.<\/p>\n<\/li>\n<li><strong>DocumentRoot &#8222;C:\/serwer\/apache\/htdocs&#8221;<\/strong>\n<p>Tutaj ustawiamy, w kt\u00f3rym katalogu maj\u0105 znajdowa\u0107 si\u0119 tworzone przez nas strony. IMHO, lokalizacja niewygodna, wi\u0119c zmieniamy, np. <em>C:\/serwer\/strony<\/em>.<\/p>\n<\/li>\n<li><strong>DirectoryIndex index.html<\/strong>\n<p>Dyrektywa okre\u015bla, kt\u00f3re pliki mog\u0105 by\u0107 stronami g\u0142\u00f3wnymi. Domy\u015blna warto\u015b\u0107 uniemo\u017cliwi nam otwieranie stron napisanych w PHP bez wklepywania <em>index.php<\/em> na pasku adresu. Proponuj\u0119 ustawi\u0107: <em>DirectoryIndex index.html index.htm default.html default.htm index.php<\/em><\/p>\n<\/li>\n<\/ul>\n<p>Zapisz zmiany i umie\u015b\u0107 pliki swojej strony w odpowiednim folderze (w naszym przypadku, <em>C:\\serwer\\strony<\/em>). Na koniec budzimy Indianina (<em>net start apache2<\/em>) i odwiedzamy <a href=\"http:\/\/127.0.0.1\">127.0.0.1<\/a>. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_smile.png\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p><strong>PS.<\/strong> Razem z Apache dostajemy program s\u0142u\u017c\u0105cy do monitorowania stanu serwera. Za jego pomoc\u0105 mo\u017cemy wystartowa\u0107\/zatrzyma\u0107\/zrestartowa\u0107 us\u0142ug\u0119 poprzez &#8222;wyklikanie&#8221;. Ca\u0142y czas rezyduje obok zegarka w postaci ikonki Apache.<\/p>\n<p><small>Prze\u0142o\u017cy\u0142em na ch\u0142opski rozum z <a href=\"http:\/\/pl2.php.net\/manual\/en\/install.windows.apache2.php\">manuala<\/a> i doda\u0142em co\u015b od siebie. <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_wink.png\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Instalowanie PHP 5 pod Apache 2.0 do bardzo trudnych nie nale\u017cy. W zwi\u0105zku z tym, i\u017c moje biurko dopala\u0142 Indianin 2.0 z Tresowanym S\u0142oniem czwartej generacji, postanowi\u0142em troch\u0119 od\u015bwie\u017cy\u0107 paczki, bo chyba si\u0119 troch\u0119 zasta\u0142em. OK, pora na meritum. Najpierw musimy zaopatrzy\u0107 si\u0119 w niezb\u0119dne paczki: Apache PHP 5.2 W przypadku Apache&#8217;a \u015bci\u0105gamy najnowsze dost\u0119pne [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,12],"tags":[31,32,30,29],"_links":{"self":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/87"}],"collection":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":0,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}