O APC é compatível com PHP 5.4 ou PHP 5.5?

103

Não parece que o APC foi atualizado para coincidir com o lançamento do php 5.4 (gostaria que eles tivessem incluído o APC no núcleo do PHP como planejado originalmente).

Não consigo encontrar uma resposta definitiva para saber se o APC atual funciona com php 5.4+. Consegui encontrar pacotes do Ubuntu para php 5.4, mas os pacotes php-apc não instalam.

Greywire
fonte
2
Acho que você está fazendo uma instalação apt-get. Você já tentou uma instalação pecl?
Darragh Enright,
Sim, isso realmente funcionou. Obrigado. E, ao que parece, o APC funciona bem com o 5.4, em particular, ao usar a nova funcionalidade de características.
Greywire
1
@Darragh [Só para avisar] há uma grande recompensa por isso, você pode querer dar uma resposta.
Tiberiu-Ionuț Stan,
1
Não não é. Seu último lançamento foi em 2012 e que grosseiramente não é compatível com a versão mais recente do PHP
Abadis

Respostas:

163

Zend OPCache incluído no PHP 5.5

Em 21 de março de 2013, o PHP 5.5 beta 1 foi lançado, incluindo "Zend OPCache" - Parece que este será o substituto do APC, já que está incluído no núcleo do PHP e terá que ser mantido para cada novo liberação.

Eu pessoalmente aconselharia aqueles que dependem do APC para seu cache de opcode a testar seu código com o próximo cache de opcode embutido e fornecer feedback sobre quaisquer problemas encontrados para garantir uma versão final estável.

Não sei o que isso significa para o futuro da APC.

APC PARA PHP 5.4+ AINDA ESTÁ INDICADO COMO BETA

Isso significa que os desenvolvedores não o consideram completamente estável . Embora muitas pessoas não estejam tendo problemas com as versões atuais do SVN, ainda há relatos estranhos de casos extremos de pessoas sob certas configurações ou sob carga pesada.

Assim como com tudo que você deseja usar em um ambiente de produção, certifique-se de testar completamente qualquer versão (beta ou estável) em ambientes de desenvolvimento ou pré-produção primeiro . Isso inclui teste de carga!

A partir do lançamento 3.1.13, os commits para o repositório SVN ficaram um pouco lentos e a lista de bugs não tem muitas adições recentes. Faça disso o que quiser.

Em 10 de dezembro de 2012, 21:05, Rasmus Lerdorf escreveu:

O APC está no ponto agora para o 5.4 em que não acho que haja mais casos extremos do que temos no 5.3. Nenhum dos dois é perfeito, mas é próximo o suficiente para a maioria dos sites.

Qualquer pessoa com habilidades C / gdb e algum tempo livre deve passar por cima da lista de bugs e ver se eles podem consertar alguma coisa ou melhorar este produto de código aberto gratuito no qual todos nós confiamos.

Existem soluções alternativas, a Wikipedia fornece uma lista de aceleradores de PHP .

Em 13 de fevereiro de 2013, Zeev Suraski anunciou a disponibilidade do código fonte Zend Optimizer + .

Houve uma longa discussão sobre a integração do Zend Optimizer + no núcleo do PHP na próxima versão principal (a versão após 5.5). As pessoas podem querer se familiarizar com o Zend Optimizer + com antecedência, se for o caso.


Não use APC 3.1.14

APC 3.1.14 foi removido dos downloads PECL devido a alguns problemas de memória sérios que foram descobertos, mas ainda não foram rastreados.

Se você já estiver usando o 3.1.14, pode desejar fazer o downgrade até o lançamento do 3.1.15. Lembre-se, isso ainda é beta . Se você o estiver usando, estará usando por sua própria conta e risco.

2013-01-02 :
APC 3.1.14 está disponível , adicionando compatibilidade com PHP 5.5, além de resolver um bom número de outros bugs .

Ainda beta


2012-09-03 :
APC 3.1.13 está disponível, corrigindo uma série de segfaults .


16/08/2012 :
Uma tag APC 3.1.12 foi criada, mas ainda está marcada como beta , está disponível na página APC PECL , bem como no changelog .

Muitos bugs relacionados ao bin_dump corrigidos desta vez.


19/07/2012 :
An tag APC 3.1.11 foi criada, mas ainda está marcada como beta , está disponível na página APC PECL , bem como no changelog . Eu tenho seguido as listas de discussão relevantes, e elas ainda estão trabalhando ativamente para consertar bugs da APC, no entanto, é um módulo complexo e poucas pessoas parecem estar à altura da tarefa. Esta versão corrige os bugs stat = 0 desagradáveis ​​ao incluir arquivos.


11/04/2012 :
An tag APC 3.1.10 foi criada hoje, e uma versão beta do 3.1.10 foi colocada na página APC PECL.

O changelog declara:

  • Adicionar suporte a PHP 5.4 (Dmitry, Anatoliy, Pierre)
  • Bug # 22679 corrigido: Fix apc_bin_dump para constantes. Use IS_CONSTANT_TYPE_MASK para lidar com todas as constantes, incluindo as não qualificadas (em vez da verificação ~ IS_CONSTANT_INDEX)
  • Bug # 23822 corrigido, falha de php na reinicialização do apache
Leigh
fonte
1
apenas digite: "pecl install apc-3.1.10" e então tive que recompilar o php para que ele atualizasse libphp5.so
targnation
Tenho usado desde outubro de 2012 via Apt-get no ubuntu 12. Limpo e estável!
JustinP
dê uma olhada neste artigo relacionado a Zend OpCache e APC blogs.oracle.com/opal/entry/using_php_5_5_s e este tópico bugs.php.net/bug.php?id=64625
riotera
10

A partir do PHP 5.4.7 e APC 3.1.13 (e até mesmo do tronco SVN da APC em 19/09/2012), embora seja "compatível", não é estável em servidores com carga pesada, particularmente se você estiver usando PHP- FPM e $ GLOBALS. Algumas das discussões de desenvolvedores na APC falam sobre casos marginais não resolvidos .

Estou respondendo a essa pergunta 6 meses depois que ela foi feita porque o problema ainda é predominante, e encontrar esse tópico sem uma resposta como a minha foi o que me fez pular para o PHP 5.4 com APC e me queimar. Esperançosamente, isso ajudará as pessoas a evitar um pouco de dor.

Eric Caron
fonte
5

Não, APC 1.3.9 (e neste momento, até mesmo o tronco svn) não é compatível com php 5.4.0, eu sei porque acabei de passar horas tentando fazê-lo funcionar (testei vários svn / php. configurações do ini / sinalizadores do compilador / você escolhe).

Isso é simplesmente ridículo, o APC é uma das extensões PHP mais populares e você esperaria que depois de semanas passando por 8 PHP 5.4 RC, eles teriam tempo para fazer o APC trabalhar junto com ele.

Patético.

JohnSmith
fonte
Talvez seja por isso que o APC não foi incluído com o PHP 5.4 como planejado originalmente. Pareceu funcionar quando eu testei, mas, eu apenas testei traços e nenhum dos outros recursos do PHP 5.4.
Greywire
2
Parece que o único compilador de cache / bytecode viável para php 5.4 é o pacote de servidor zend do próprio Zend. PHP 5.4 me deixou meio animado, mas sem APC ou XCache ou algo assim, é inútil. E esta tem sido a história do PHP por anos e anos .. sempre esperando, esperando .. Estou começando a pensar seriamente em adotar alguma outra linguagem .. mas não tenho certeza do que ..
Greywire
Verdade, o bug de segfault foi relatado em dezembro do ano passado, e 3 meses depois ele ainda não foi corrigido, wtf é o ponto de lançar uma 'grande atualização' se ele nem mesmo funcionar nas condições mais comuns. [Bug # 60462 When APC is enabled segfault - Enviado: 2011-12-07] bugs.php.net/bug.php?id=60462&edit=1
JohnSmith
5

Bem, estou tentando nos últimos dias, e não há como fazer um opcode cacher funcionar com o php 5.4. O Xcache não compila e o apc não reconhece certas classes quando armazenadas em cache. Acho que esse é o erro de que Simon está falando.

Ouvi dizer que ocorreram algumas correções no tronco, mas também tentei as fontes de tronco mais recentes, mas os mesmos erros continuam voltando. Eu acho que php sem um opcode cacher (não há nenhum disponível agora) não é digno de produção. Espero que o pessoal da apc conserte isso o mais rápido possível.

ATUALIZAR!!!

Xcache 2.0.0-rc1 foi lançado e é compatível com o php 5.4. Aproveitar!

Michiel Thalen
fonte
4

Estou usando AMPPS com PHP versão 5.5.19. Há algum tempo, exatamente a partir do lançamento do PHP 5.5 - o APC foi substituído pelo Zend OPCache que está incluído no PHP 5.5 e superior. Agora tudo o que você precisa fazer para habilitar o "APC" (atualmente "OPcache") é editar o seu php.ini. Antes da seção [XDebug], adicione as linhas fluidas:

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

...

Observe que precisamos ter duas instâncias de:

zend_extension =

Um na seção [OPcache] e um na seção [XDebug]. O Xdebug geralmente não é fornecido como padrão na instalação do servidor xampp / ampps / easyPHP. Você pode se encontrar em uma situação em que precisará baixar a extensão Xdebug. Você pode fazer isso facilmente usando um aplicativo online que define o Xdebug certo para o seu php. Visite http://xdebug.org/wizard.php e siga suas instruções simples. Depois de baixar a versão correta do Xdebug para a sua versão php - edite o link do seu zend_extension na seção [XDebug].

...

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

Observe! que você tem que adicionar a seção OPcache antes de XDebug em seu arquivo php.ini !!! Se você me seguir corretamente, deverá ter duas instâncias de zend_extension em seu arquivo php.ini (uma no OPcache e outra na seção Xdebug).

Isso funciona perfeitamente para Symfony2 framework e elimina a mensagem de recomendação para instalar e habilitar o APC para seu PHP e Xdebug.

Mensagem para aqueles que executaram o symfony 2 e removeram a mensagem de aviso de "web / config.php", mas ainda encontram um problema ao executar a partir da linha de comando "php app / check.php". Se isso acontecer, significa que seu console está usando um arquivo php.ini diferente. Mude a variável PATH do sistema - faça com que ela aponte para o diretório php correto (onde você tem o arquivo php.exe e que é usado pelo seu servidor local).

Se você precisar de uma explicação mais detalhada, deixe-me saber no comentário abaixo. Saudações.

DevWL
fonte
1
Eu recomendo fortemente que as instruções desta resposta sejam mescladas com a resposta principal, para que todos que desejam implementar o OpCache saibam exatamente como fazê-lo.
Joe,
Se você comentar o xdebug "zend_extension", você o desativará - não é necessário. Adicionar a seção [OPcache] com "zend_extension" não colide com o mesmo parâmetro da seção [XDebug]. Além disso, a ordem dessas seções realmente não importa.
Marek
Nota: [fonte: php.net/manual/en/opcache.installation.php] Se você deseja usar o OPcache com »Xdebug, você deve carregar o OPcache antes do Xdebug.
DevWL
3

Parece que ainda há alguns problemas a serem resolvidos. Verifique os bugs e você poderá descobrir qual é a solução para seu problema específico.

Eu lidei com um desses erros algumas horas atrás e descobri que usar o APC do tronco SVN era o caminho a percorrer. Espero que isto ajude!

Roberto
fonte
Bem, até agora, parece estar funcionando bem. Isso está no Ubuntu 10.04 (dispositivo LAMP pronto para uso) com pacotes PHP 5.4 de launchpad.net/~ondrej/+archive/php5 . Mas se surgir algo, verificarei a lista de bugs. obrigado!
Greywire
3

Descobri que você precisa limpar o cache de opcode em cada solicitação de página, caso contrário, as classes que implementam interfaces falham ao carregar. Este foi compilado a partir do último tronco svn, Apache 2.4.1, PHP 5.4.0.

Simon
fonte
@ michiel-thalen, você percebeu, esse é o problema de que eu estava falando. É uma pena realmente ... Embora eu ainda tenha visto um pequeno benefício no desempenho, mesmo com a redefinição do opcode em cada carregamento. O cache do usuário ainda funciona conforme o esperado (em meus testes até agora).
Simon
2

APC - não recomendado
Pessoalmente, não usei APC com PHP 5.4 ou PHP 5.5, mas o último APC estável não é compatível com o PHP 5.4, o último beta APC pode ser usado com o 5.4, mas está escrito que ainda tem problemas negativos com o APC.

Se você tem PHP 5.5,
basta usar Zend Opcache . Está pronto para uso, então os problemas são mínimos.

Se você tem PHP 5.4,
eu recomendo o XCache . É totalmente compatível com PHP 5.4 e 5.5. Desenvolvido ativamente. A última versão estável foi lançada há 3,5 meses (10 de outubro de 2013). Ele melhora o desempenho, mesmo se você usar fastcgi.

trante
fonte
1

Zend OPCache está incluído no PHP 5.5 sob o nome php_opcache.dll no diretório php / ext. Para ativá-lo:

  • Adicione o arquivo php_opcahe.dll como uma extensão zend em seu arquivo de configuração php.ini .
  • Use o formato zend_extension = path / to / php / ext / php_opcache.dll .
  • Coloque o zend_extension antes do xDebug zend_extension na sua configuração do php.ini .
  • Salve o arquivo de configuração php.ini e reinicie o servidor.
RAIZ
fonte
0

APC tem uma nova versão: 3.1.14 desde 2 de janeiro, que resolve alguns bugs: http://pecl.php.net/package/APC

No entanto, tenho executado o PHP 5.4.x com APC 3.1.13 do repositório dotdeb sem nenhum problema até agora, então para mim eu diria que é estável. O dotdeb também me informou que incluirá o APC atualizado na próxima versão do PHP, que deve ser 5.4.11.

Steven De Groote
fonte
Se você estiver usando o APC 3.1.14, recomendo que você volte para o APC 3.1.13 temporariamente. Alguns erros graves relacionados à memória foram descobertos, o que resultou na liberação do 3.1.14 da seção de downloads.
Leigh
Na verdade, descobri que o pacote lançado pelo dotdeb para PHP 5.4.11 inicialmente incluía APC 3.1.14, mas isso foi revertido para evitar os bugs.
Steven De Groote
0

Estamos experimentando erros de memória livre (segfault do apache) com PHP 5.4.26 e APC 3.1.9. Há um bug aberto para APC no PHP 5.4.X: https://bugs.php.net/bug.php?id=61934

Eu recomendo não usar este plugin em PHP> 5.3.

dAm2K
fonte
0

No XAMPP versão 5.6.3 (PHP 5.6.3), tudo o que você precisa fazer em seu ini.php é o seguinte:

[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"

Configuração para o framework symfony2.

DevWL
fonte