Symfony2: Instalacja APC dla PHP 5.3.10 (WampServer / Windows 7)

Symfony2

Jako, że jakiś czas temu w pracy na warsztat trafiła do mnie aplikacja oparta o Symfony (1.2), z którym nie miałem wcześniej do czynienia, musiałem trochę zgłębić temat i zaowocowało to tym, że spodobał mi się ten framework. Z kolei chyba stosunkowo niedawno ukazała się nowa wersja, więc chcąc zgłębić temat jeszcze bardziej, postanowiłem przygotować sobie środowisko spełniające wymagania Symfony2. I tu natrafiłem na problemy….

Już na starcie okazało się, że mam za niską wersję PHP (wymagana jest 5.3.2), więc trzeba było sięgnąć po bardziej aktualną. O ile instalacja nowej wersji WampServer 2.2 przebiegła bezproblemowo, jak również przeniesienie istniejących deklaracji wirtualnych hostów o dziwo poszło jak z płatka (no poza jednym błędem szybko wyłapanym dzięki C:\wamp_server\logs\apache_error.log), o tyle dołączony do Symfony2 skrypt sprawdzający kompatybilność z wymaganiami (symfony2/app/check.php) pokazał dodatkowo dwa ostrzeżenia. Jedno udało się wyeliminować błyskawicznie, wystarczyło włączyć rozszerzenie intl w PHP. Z drugim nie było tak łatwo.

Wprawdzie bez tego Symfony2 również by działało, ale taki komunikat:

[[WARNING]] Checking that a PHP accelerator is installed: FAILED
*** Install a PHP accelerator like APC (highly recommended) ***

a zwłaszcza „highly recommended” robi swoje ;) Podrażniło to moją ambicję i zabrzmiała nutka pedantyzmu ;) Ale do rzeczy.

APC nie jest standardowym rozszerzeniem dostarczanym z całym pakietem PHP, więc o jego zainstalowanie należy zadbać we własnym zakresie. Skoro APC jest rozszerzeniem PECL, to w oczywisty sposób na początek chciałem wykorzystać instalator dostarczany z PEAR. Jako, że na świeżym WampServerze jeszcze go nie miałem, to pobrałem stąd odpowiedni plik, odpaliłem go komendą php go-pear.phar i po całej (pomyślnie zakończonej) operacji oczekiwałem, że teraz instalacja APC to ostatni mały kroczek. Niestety, pecl install apc jedynie ściągało paczkę, ale przy próbie instalacji pojawiał się błąd „ERROR: The DSP APC.dsp does not exist.”. Po krótkim googlowaniu wyszło na to, że w środowisku Windows kompilacja rozszerzeń może być kłopotliwa, a że nawarstwianie problemów nie było tym, czego oczekiwałem o 1 w nocy, postanowiłem pójść na skróty i skorzystać z rady, by użyć prekompilowanego pliku dll. Skróty te były jednak wyjątkowo długie ;) Wiele wątków w Internecie prowadziło mnie tutaj, ale niestety żadna z tamtejszych wersji nie chciała u mnie działać (przy wykonywaniu php symfony2/app/check.php konsola wyrzucała komunikat, że php_apc.dll nie jest prawidłowym plikiem systemu Windows). W końcu po głębszym googlowaniu trafiłem na działającą wersję, która po wrzuceniu do C:\wamp_server\bin\php\php5.3.10\ext siedziała cicho jak mysz pod miotłą ;)

Ostatnim krokiem było włączenie rozszerzenia i jego konfiguracja. WampServer dzięki swojemu tray menu umożliwia proste zarządzanie rozszerzeniami, więc wystarczy parę ruchów/kliknięć myszki by włączyć np. omawiane APC. Jeśli na liście rozszerzeń nie ma APC należy dodać odpowiednią informację do pliku php.ini: extension=php_apc.dll tam gdzie pozostałe deklaracje rozszerzeń.

Włączyć php_apc Pasek powiadomień » WampServer » PHP » Rozszerzenia PHP

UWAGA: WampServer zawiera dwa różne php.ini – C:\wamp_server\bin\apache\Apache2.2.21\bin\php.ini (konfiguracja dla Apache’a) oraz C:\wamp_server\bin\php\php5.3.10\php.ini (PHP CLI, czyli linia poleceń). Tray menu korzysta z tego pierwszego pliku!

Ja osobiście nie odczuwam potrzeby zróżnicowania konfiguracji, więc utworzyłem sobie łącze symboliczne (z windowsowego wiersza poleceń cmd.exe):

C:\wamp_server\bin\apache\Apache2.2.21\bin>mklink php.ini C:\wamp_server\bin\php\php5.3.10\php.ini
łącze symboliczne utworzone dla php.ini <<===>> C:\wamp_server\bin\php\php5.3.10\php.ini

dzięki czemu edytując w jednym miejscu sprawiam, że zmiany dostępne są w obu środowiskach. O tej „dwuznaczności” informuje zresztą skrypt walidacyjny Symfony2 app/check.php: „The PHP CLI can use a different php.ini file than the one used with your web server (especially on the Windows platform). If this is the case, please ALSO launch this utility from your web server.” – co powinno uprzedzić zdziwione miny ludzi, którzy np. włączyli APC dla PHP CLI, a symfony2/web/config.php z poziomu www pokazuje, że wciąż go nie ma (dlatego warto sprawdzać poprzez phpinfo(); czy rozszerzenie jest aktywne).

Jeśli zaś chodzi o konfigurację APC, to do tego samego pliku php.ini wystarczy dodać:

[APC]
apc.enabled = 1
apc.shm_segments = 1
apc.shm_size = 64M
apc.max_file_size = 10M
apc.stat = 1

W sieci można spotkać tego typu konfiguracje, które mają apc.shm_size = 64 (brak M), co w konsoli wyświetla komunikat typu: „PHP Warning: PHP Startup: apc.shm_size now uses M/G suffixes, please update your ini files in … on line …”. Oczywiście zapewne zależne jest to od wersji APC, ale wiedzieć warto.

I tak oto po długiej walce php symfony2/app/check.php pokazuje OK, OK, OK, OK, OK, OK i tak z góry na dół ;) Nie pozostaje nic innego, jak wziąć się za tworzenie aplikacji.. Tylko najpierw warto zdobyć choćby podstawową wiedzę.

Komentarze do "Symfony2: Instalacja APC dla PHP 5.3.10 (WampServer / Windows 7)": (4)

  1. Witam

    Dobrze i czytelnie wszystko opisane dzięki. Mam nadzieje że będzie więcej wpisów może jakieś video :)

    • Jeśli tylko będzie taka konieczność, to może i wideo się trafi :) Na pewno nie wszystko da się wystarczająco dobrze opisać, więc kto wie? Cieszę się, że mogłem pomóc :)

  2. Dzięki za pomoc, przydało się. :)

  3. Dzieki chłopie :)

Skomentuj "Symfony2: Instalacja APC dla PHP 5.3.10 (WampServer / Windows 7)":

Musisz się zalogować, aby móc dodać komentarz.