Symfony2: Instalacja APC dla PHP 5.3.10 (WampServer / Windows 7)
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:
*** 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ń.
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):
łą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.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ę.
Kategoria:Użyteczne
Przekaż dalej:
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 🙂
Dzięki za pomoc, przydało się. 🙂
Dzieki chłopie 🙂