Introdução
Neste breve post, vou mostrar como resolver o problema do apc_fetch no php 7. Aqui na empresa trabalhamos agora com php 7 e ao fazer a instalação o doctrine recebemos a seguinte mensagem de erro:
[Symfony\Component\Debug\Exception\UndefinedFunctionException] Attempted to call function "apc_fetch" from namespace "Doctrine\Common\Cache".
Este problema aconteceu em instalações de php 7 e ubuntu 16.04 que fizemos. Pesquisando um pouco vemos que o suporte ao apc no php 7 foi descontinuado, por isso, se sua aplicação precisa usá-lo, você deve instalar o módulo de compatibilidade do apcu, chamado apcu_bc.
Solução
A solução completa consiste em 3 passos: Instalar o php-apcu, compilar APCu Backwards Compatibility Module e, por fim, configurar o apache para usar este módulo de compatibilidade.
Vamos aos passos:
1 – Instale o php_apcu:
$ sudo apt-get install php-apcu
2 – Compile o apcu_bc (modo de compatibilidade do apcu para o apc)
Este pacote está hospedado no github. Veja os passos para compilar:
$ git clone https://github.com/krakjoe/apcu-bc.git $ cd apcu-bc $ sudo apt install php7.0-dev $ phpize $ ./configure $ make $ sudo make install
A saída final do terminal deve ser:
Installing shared extensions: /usr/lib/php/20151012/
Ou seja, a instalação do módulo apc.so foi feita na pasta de módulos padrão do php em /usr/lib/php/20151012/
3 – Modifique o php.ini do Apache e do Cli
Para isso, adicione as seguintes linhas no php.ini em /etc/php/7.0/apache2/php.ini:
extension=apcu.so
extension=apc.so
Modifique também o php.ini do cli em /etc/php/7.0/cli/php.ini:
extension=apcu.so
extension=apc.so
Atenção: É fundamental carregar primeiro o apcu.so para somente depois carregar o apc.so
Resultado final
Reinicie o apache e voalá! Seu phpinfo() deve retornar algo parecido com isto:
E seu clearcache no symfony deve funcionar 100% agora.
É isto, espero que tenha sido útil.
Você é o salvador da pátria kkk PHP-7.0 funcionando com APC.
Campeão! Sensacional!