Czy APC jest kompatybilne z PHP 5.4 lub PHP 5.5?

103

Wygląda na to, że APC nie został zaktualizowany, aby pokrywał się z wydaniem php 5.4 (żałuję, że nie włączyli APC do rdzenia PHP, jak pierwotnie planowano).

Nie mogę znaleźć żadnej ostatecznej odpowiedzi na pytanie, czy obecny APC działa z php 5.4+. Udało mi się znaleźć pakiety Ubuntu dla php 5.4, ale pakiety php-apc nie zostaną zainstalowane.

Greywire
źródło
2
Rozumiem, że robisz instalację apt-get. Czy próbowałeś zainstalować pecl?
Darragh Enright
Tak, to faktycznie zadziałało. Dziękuję Ci. I jak się okazuje, APC działa dobrze z 5.4, w szczególności, gdy korzysta z nowych funkcji cech.
Greywire
1
@Darragh [Po prostu daję ci znać] jest za to duża nagroda, może zechcesz udzielić odpowiedzi.
Tiberiu-Ionuț Stan
1
Nie, nie jest. Jego ostatnie wydanie miało miejsce w 2012 roku i z
pewnością

Odpowiedzi:

163

Zend OPCache zawarty w PHP 5.5

21 marca 2013 wydano PHP 5.5 beta 1, w tym „Zend OPCache” - wygląda na to, że będzie to następca APC w przyszłości, ponieważ jest on zawarty w rdzeniu PHP i będzie musiał być utrzymywany dla każdego nowego wydanie.

Osobiście radziłbym tym, którzy polegają na APC w zakresie buforowania kodu operacyjnego, aby przetestowali swój kod za pomocą nadchodzącej wbudowanej pamięci podręcznej kodu operacyjnego i zwrócili wszelkie napotkane problemy, aby zapewnić stabilne wydanie końcowe.

Nie wiem, co to oznacza dla przyszłości APC.

APC DLA PHP 5.4+ JEST WCIĄŻ FLAGOWANY JAKO BETA

Oznacza to, że programiści nie uważają go za całkowicie stabilny . Chociaż wiele osób nie ma żadnych problemów z obecnymi wersjami SVN, nadal istnieje dziwny raport o przypadkach skrajnych od ludzi w pewnych konfiguracjach lub pod dużym obciążeniem.

Jak ze wszystkim, co chcesz używać w środowisku produkcyjnym, upewnij się, że dokładnie przetestować każde uwolnienie (beta lub stabilnej) w rozwoju lub przedprodukcyjnej środowisk pierwszy . Obejmuje to testowanie obciążenia!

Począwszy od wersji 3.1.13, zmiany w repozytorium SVN nieco spowolniły, a lista błędów nie zawiera tak wielu ostatnich dodatków. Rób z tego, co chcesz.

10 grudnia 2012 21:05 Rasmus Lerdorf napisał:

APC jest teraz w punkcie 5.4, w którym nie sądzę, aby było więcej przypadków skrajnych niż w 5.3. Żaden z nich nie jest doskonały, ale dla większości witryn jest wystarczająco blisko.

Każdy, kto ma umiejętności C / gdb i ma trochę wolnego czasu, powinien przejrzeć listę błędów i sprawdzić, czy może coś naprawić lub ulepszyć ten darmowy produkt open source , na którym wszyscy polegamy.

Istnieją alternatywne rozwiązania, Wikipedia udostępnia listę akceleratorów PHP .

13 lutego 2013 roku Zeev Suraski ogłosił dostępność kodu źródłowego Zend Optimizer + .

Odbyła się dość długa dyskusja na temat integracji Zend Optimizer + z rdzeniem PHP w następnej głównej wersji (wersja po 5.5). W takim przypadku ludzie mogą chcieć zapoznać się z Zend Optimizer + z wyprzedzeniem.


Nie używaj APC 3.1.14

APC 3.1.14 został usunięty z pobierania PECL z powodu poważnych problemów z pamięcią, które zostały wykryte, ale nie zostały jeszcze wyśledzone.

Jeśli używasz już wersji 3.1.14, możesz chcieć obniżyć wersję do wersji 3.1.15. Pamiętaj, to wciąż jest wersja beta . Jeśli w ogóle go używasz, używasz go na własne ryzyko.

2013-01-02 :
Dostępny jest APC 3.1.14 , dodający kompatybilność z PHP 5.5, a także naprawiający wiele innych błędów .

Wciąż beta


2012-09-03 : Dostępny jest
APC 3.1.13 , naprawiający szereg błędów segfault .


16.08.2012 :
Utworzono tag APC 3.1.12 , ale nadal jest oznaczony jako beta , jest dostępny na stronie APC PECL , a także w dzienniku zmian .

Wiele błędów związanych z bin_dump zostało naprawionych tym razem.


2012-07-19 :
Utworzono tag APC 3.1.11 , ale jest on nadal oznaczony jako beta i jest dostępny na stronie APC PECL , a także w dzienniku zmian . Śledziłem odpowiednie listy mailingowe i nadal aktywnie pracują nad naprawieniem błędów APC, jednak jest to złożony moduł i niewiele osób wydaje się być na stanie sprostać temu zadaniu. To wydanie naprawia nieprzyjemne błędy stat = 0 podczas dołączania plików.


2012-04-11 : APC 3.1.10 tag powstał dzisiaj, a wersja beta 3.1.10 został umieszczony na stronie APC PECL

W changelog stanowi:

  • Dodaj obsługę PHP 5.4 (Dmitry, Anatoliy, Pierre)
  • Naprawiono błąd nr 22679: Naprawiono apc_bin_dump dla stałych. Użyj IS_CONSTANT_TYPE_MASK do obsługi wszystkich stałych, w tym niekwalifikowanych (zamiast sprawdzania ~ IS_CONSTANT_INDEX)
  • Naprawiono błąd # 23822, zawieszanie się PHP podczas restartu Apache
Leigh
źródło
1
po prostu wpisz: „pecl install apc-3.1.10”, a następnie musiałem ponownie skompilować php, aby zaktualizował libphp5.so
targnation
Używam go od października 2012 r. Przez Apt-get na ubuntu 12. Czysto i stabilnie!
JustinP,
spójrz na ten artykuł dotyczący Zend OpCache i APC blogs.oracle.com/opal/entry/using_php_5_5_s oraz ten wątek bugs.php.net/bug.php?id=64625
riotera
10

Od PHP 5.4.7 i APC 3.1.13 (a nawet łącza trunk APC SVN od 2012-09-19), chociaż jest „kompatybilny”, nie jest stabilny na serwerach z dużym obciążeniem, szczególnie jeśli używasz PHP- FPM i $ GLOBALS. Niektóre dyskusje deweloperów na temat APC dotyczą nierozwiązanych spraw dodatkowych .

Odpowiadam na to pytanie 6 miesięcy po tym, jak zostało to zadane, ponieważ problem nadal występuje, a napotkanie tego wątku bez odpowiedzi takiej jak moja jest tym, co sprawiło, że przeskoczyłem do PHP 5.4 z APC i się spaliłem. Miejmy nadzieję, że pomoże to ludziom uniknąć bólu.

Eric Caron
źródło
6

Wygląda na to, że błąd „mógł” zostać naprawiony w najnowszej wersji pnia. Teraz działa z PHP 5.4.0.

svn co http://svn.php.net/repository/pecl/apc/trunk/ apc-trunk

cd apc-trunk

phpize

./configure

robić

dokonać instalacji

Szymon
źródło
apc nie znajduje się już w svn.php.net/repository/pecl. Repozytorium zostało przekonwertowane na Git i można je teraz przeglądać pod adresem git.php.net/?p=pecl/caching/apc.git
Dereckson
5

Nie, APC 1.3.9 (a od tego momentu nawet trunk svn) nie jest kompatybilny z php 5.4.0, wiem, ponieważ spędziłem godziny, próbując go uruchomić (testowałem różne svn / php. ini settings / compiler flags / you name it).

To po prostu śmieszne, APC jest jednym z najpopularniejszych rozszerzeń PHP i można by się spodziewać, że po tygodniach przeglądania 8 PHP 5.4 RC będą mieli czas, aby APC działało razem z nim.

Żałosne.

John Smith
źródło
Może dlatego APC nie został dołączony do PHP 5.4, jak pierwotnie planowano. Wydawało się, że działa, kiedy go testowałem, ale testowałem tylko cechy, a nie inne funkcje php 5.4.
Greywire
2
Wygląda na to, że jedynym możliwym kompilatorem pamięci podręcznej / kodu bajtowego dla php 5.4 jest własny pakiet serwera Zend. PHP 5.4 podekscytował mnie, ale bez APC, XCache czy czegoś w tym rodzaju, jest bezużyteczny. I to jest historia PHP od lat… zawsze czekam, czekam… zaczynam poważnie myśleć o zajęciu się innym językiem… tylko nie wiem co…
Greywire
To prawda, że ​​błąd segfault został zgłoszony w grudniu zeszłego roku, a 3 miesiące później nadal nie jest naprawiony, wtf jest celem wydania „poważnej aktualizacji”, jeśli nie działa nawet w najbardziej typowych warunkach. [Błąd # 60462 Gdy APC jest włączony segfault - zgłoszono: 2011-12-07] bugs.php.net/bug.php?id=60462&edit=1
JohnSmith
5

Cóż, próbuję przez ostatnie kilka dni i nie ma sposobu, abym mógł zmusić pamięć podręczną opcode do pracy z php 5.4. Xcache nie skompiluje się, a apc nie rozpozna niektórych klas po buforowaniu. Myślę, że to jest błąd, o którym mówi Simon.

Słyszałem, że w bagażniku było kilka poprawek, ale wypróbowałem także najnowsze źródła magistrali, ale te same błędy wracają. Myślę, że php bez pamięci podręcznej opcode (obecnie nie jest dostępna) nie jest godny produkcji. Mam nadzieję, że pracownicy apc naprawią to jak najszybciej.

AKTUALIZACJA!!!

Xcache 2.0.0-rc1 jest obecnie kompatybilny z php 5.4. Cieszyć się!

Michiel Thalen
źródło
4

Używam AMPPS z PHP w wersji 5.5.19. Od pewnego czasu dokładnie od wydania PHP 5.5 - APC jest zastępowane przez Zend OPCache, który jest zawarty w PHP 5.5 i nowszych. Teraz wszystko, co musisz zrobić, aby włączyć „APC” (obecnie „OPcache”), to edytować plik php.ini. Przed sekcją [XDebug] dodaj ciągłe wiersze:

php.ini

...

[OPcache]

zend_extension=php_opcache.dll

opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=24
opcache.max_accelerated_files=4000
opcache.revalidate_freq=3
opcache.fast_shutdown=1

...

Pamiętaj, że musimy mieć dwa wystąpienia :

zend_extension =

Jeden w sekcji [OPcache] i jeden w sekcji [XDebug]. Xdebug często nie jest dostarczany jako domyślny w instalacji serwera xampp / ampps / easyPHP. Możesz znaleźć się w sytuacji, w której będziesz musiał pobrać rozszerzenie Xdebug. Możesz to łatwo zrobić, używając aplikacji online, która definiuje właściwy Xdebug dla twojego php. Odwiedź http://xdebug.org/wizard.php i postępuj zgodnie z ich prostymi instrukcjami. Po pobraniu odpowiedniej wersji Xdebug dla Twojej wersji php - edytuj link do swojego zend_extension w sekcji [XDebug].

...

[XDebug]
zend_extension = "C:\Program Files (x86)\Ampps\php\ext\php_xdebug-2.2.6-5.5-vc11.dll"
......

Proszę zanotować! że musisz dodać sekcję OPcache przed XDebug w swoim pliku php.ini !!! Jeśli podążasz za mną poprawnie, powinieneś mieć dwie instancje zend_extension w swoim pliku php.ini (jedną w sekcji OPcache i jedną w sekcji Xdebug).

Działa to doskonale dla frameworka Symfony2 i eliminuje komunikat z zaleceniem instalacji i włączenia APC dla twojego PHP i Xdebug.

Wiadomość do tych, którzy uruchomili symfony 2 i usunęli ostrzeżenie z "web / config.php", ale nadal napotykają problem, uruchamiając z linii poleceń "php app / check.php". Jeśli tak się stanie, oznacza to, że Twoja konsola używa innego pliku php.ini. Zmień zmienną systemową PATH - wskaż właściwy katalog php (gdzie masz plik php.exe i który jest używany przez twój lokalny serwer).

Jeśli potrzebujesz głębszego wyjaśnienia, daj mi znać w komentarzu poniżej. Pozdrowienia.

DevWL
źródło
1
Gorąco zachęcam, aby instrukcje tej odpowiedzi zostały połączone z pierwszą odpowiedzią, tak aby każdy, kto chce wdrożyć OpCache, wiedział dokładnie, jak to zrobić.
Joe
Jeśli skomentujesz xdebug "zend_extension", wyłączysz go - nie jest to konieczne. Dodanie sekcji [OPcache] z "zend_extension" nie koliduje z tym samym parametrem z sekcji [XDebug]. Również kolejność tych sekcji nie ma znaczenia.
Marek
Uwaga: [źródło: php.net/manual/en/opcache.installation.php] Jeśli chcesz używać OPcache z »Xdebug, musisz załadować OPcache przed Xdebug.
DevWL
3

Wydaje się, że jest jeszcze kilka problemów do rozwiązania. Sprawdź błędy, a być może będziesz w stanie dowiedzieć się, jakie jest rozwiązanie Twojego konkretnego problemu.

Miałem do czynienia z jednym takim błędem kilka godzin temu i okazało się, że użycie APC z pnia SVN było najlepszym rozwiązaniem. Mam nadzieję że to pomoże!

Roberto
źródło
Jak dotąd wydaje się, że działa dobrze. To jest na Ubuntu 10.04 (urządzenie pod klucz LAMP) z pakietami PHP 5.4 z launchpad.net/~ondrej/+archive/php5 . Ale jeśli coś się pojawi, sprawdzę listę błędów. dzięki!
Greywire
3

Odkryłem, że musisz wyczyścić pamięć podręczną kodu operacji na każdym żądaniu strony, w przeciwnym razie klasy, które implementują interfejsy, nie ładują się. Zostało to skompilowane z najnowszego łącza svn, Apache 2.4.1, PHP 5.4.0.

Szymon
źródło
@ michiel-thalen, jesteś na miejscu, to jest problem, o którym mówiłem. Naprawdę szkoda ... Chociaż nadal widziałem niewielką poprawę wydajności, nawet przy resetowaniu kodu operacyjnego przy każdym ładowaniu. Pamięć podręczna użytkownika nadal działa zgodnie z przeznaczeniem (w moich dotychczasowych testach).
Simon
2

APC - niezalecane
Osobiście nie używałem APC z PHP 5.4 lub PHP 5.5, ale najnowszy stabilny APC nie jest kompatybilny z PHP 5.4, najnowsza beta APC może być używana z 5.4, ale napisano, że nadal ma negatywne problemy z APC.

Jeśli masz PHP 5.5,
po prostu użyj Zend Opcache . Jest po wyjęciu z pudełka, więc problemy są minimalne.

Jeśli masz PHP 5.4
, polecam XCache . Jest w pełni kompatybilny z PHP 5.4 i 5.5. Aktywnie rozwijany. Ostatnia stabilna wersja została wydana 3,5 miesiąca temu (10 października 2013). Poprawia wydajność, nawet jeśli używasz fastcgi.

trante
źródło
1

Zend OPCache jest zawarty w PHP 5.5 pod nazwą php_opcache.dll w katalogu php / ext. Aby go aktywować:

  • Dodaj plik php_opcahe.dll jako rozszerzenie zend w pliku konfiguracyjnym php.ini .
  • Użyj formatu zend_extension = ścieżka / do / php / ext / php_opcache.dll .
  • Umieść zend_extension przed xDebug zend_extension w konfiguracji php.ini .
  • Zapisz plik konfiguracyjny php.ini i zrestartuj serwer.
KORZEŃ
źródło
0

APC ma nową wersję: 3.1.14 od 2 stycznia, która rozwiązuje niektóre błędy: http://pecl.php.net/package/APC

Jednak używałem PHP 5.4.x z APC 3.1.13 z repozytorium dotdeb bez żadnych problemów do tej pory, więc powiedziałbym, że jest stabilny. dotdeb poinformował mnie również, że zaktualizowaną wersję APC dołączą do następnej wersji PHP, która ma być 5.4.11.

Steven De Groote
źródło
Jeśli używasz APC 3.1.14, radzę tymczasowo powrócić do APC 3.1.13. Wykryto kilka poważnych błędów związanych z pamięcią, które spowodowały pobranie wersji 3.1.14 z sekcji pobierania.
Leigh
Rzeczywiście, odkryłem, że pakiet wydany przez dotdeb dla PHP 5.4.11 początkowo zawierał APC 3.1.14, ale został on przywrócony, aby uniknąć błędów.
Steven De Groote
0

Eksperymentujemy z błędami bez pamięci (segfault apache) w PHP 5.4.26 i APC 3.1.9. W PHP 5.4.X jest otwarty błąd dla APC: https://bugs.php.net/bug.php?id=61934

Nie polecam używania tej wtyczki na PHP> 5.3.

dAm2K
źródło
0

W XAMPP w wersji 5.6.3 (PHP 5.6.3) wszystko, co musisz zrobić w swoim ini.php, to:

[OPcache]

zend_extension = php_opcache.dll
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=24
opcache.max_accelerated_files=4000
opcache.revalidate_freq=3
opcache.fast_shutdown=1

[XDebug]

zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.max_nesting_level = 200
xdebug.profiler_append = 1
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
;xdebug.remote_enable = 0
;xdebug.remote_handler = "dbgp"
;xdebug.remote_host = "127.0.0.1"
;xdebug.trace_output_dir = "C:\xampp\tmp"

Konfiguracja frameworka symfony2.

DevWL
źródło