¿APC es compatible con PHP 5.4 o PHP 5.5?

103

No parece que APC se haya actualizado para coincidir con la versión de php 5.4 (desearía que hubieran incluido APC en el núcleo de PHP como se planeó originalmente).

Parece que no puedo encontrar una respuesta definitiva sobre si el APC actual funciona con php 5.4+. Me las arreglé para encontrar paquetes de Ubuntu para php 5.4, pero los paquetes de php-apc no se instalarán.

Greywire
fuente
2
Supongo que está haciendo una instalación de apt-get. ¿Has probado una instalación de pecl?
Darragh Enright
Sí, esto realmente funcionó. Gracias. Y resulta que APC funciona bien con 5.4, en particular, cuando se usa la nueva funcionalidad de rasgos.
Greywire
1
@Darragh [Solo te hago saber que] hay una gran recompensa por esto, quizás quieras dar una respuesta.
Tiberiu-Ionuț Stan
1
No, no es. Su último lanzamiento fue en 2012 y eso no es compatible con la versión más nueva de PHP
Abadis

Respuestas:

163

Zend OPCache incluido en PHP 5.5

El 21 de marzo de 2013, se lanzó PHP 5.5 beta 1 que incluye "Zend OPCache" . Parece firmemente que será el reemplazo de APC en el futuro, ya que está incluido en el núcleo de PHP, y tendrá que mantenerse para cada nuevo lanzamiento.

Personalmente, recomendaría a aquellos que dependen de APC para su almacenamiento en caché de código de operación que prueben su código con la próxima caché de código de operación incorporada, y retroalimenten cualquier problema encontrado para garantizar una versión final estable.

No sé qué significa esto para el futuro de APC.

APC PARA PHP 5.4+ AÚN SE MARCA COMO BETA

Esto significa que los desarrolladores no lo consideran completamente estable. . Si bien muchas personas no experimentan ningún problema con las versiones actuales de SVN, todavía hay informes extraños de casos extremos de personas con ciertas configuraciones o con una carga pesada.

Como con todo lo que le gustaría usar en un entorno de producción, asegúrese de probar a fondo cualquier versión (beta o estable) en entornos de desarrollo o preproducción primero . ¡Esto incluye pruebas de carga!

A partir de la versión 3.1.13, las confirmaciones con el repositorio SVN se han ralentizado un poco y la lista de errores no tiene tantas adiciones recientes. Haga de eso lo que quiera.

El 10 de diciembre de 2012 a las 21:05, Rasmus Lerdorf escribió:

APC está ahora en el punto de 5.4, donde no creo que haya más casos extremos de los que tenemos en 5.3. Ninguno de los dos es perfecto, pero está lo suficientemente cerca para la mayoría de los sitios.

Cualquier persona con conocimientos de C / gdb y algo de tiempo libre debe pasar por alto la lista de errores y ver si pueden arreglar algo o mejorar este producto de código abierto gratuito en el que todos confiamos.

Existen soluciones alternativas, Wikipedia proporciona una lista de aceleradores de PHP .

El 13 de febrero de 2013, Zeev Suraski anunció la disponibilidad del código fuente de Zend Optimizer + .

Ha habido bastante discusión larga sobre la integración de Zend Optimizer + en el núcleo de PHP en la próxima versión principal (la versión posterior a la 5.5). Es posible que las personas deseen familiarizarse con Zend Optimizer + con anticipación, si este fuera el caso.


No utilice APC 3.1.14

APC 3.1.14 se ha eliminado de PECL descargas de debido a algunos problemas de memoria graves que se han descubierto pero que aún no se han localizado.

Si ya está utilizando 3.1.14, es posible que desee degradar hasta que se publique 3.1.15. Recuerda, esto todavía es beta. . Si lo está usando, lo está usando bajo su propio riesgo.

2013-01-02 :
APC 3.1.14 está disponible , agregando compatibilidad con PHP 5.5, además de resolver un buen número de otros errores .

Todavía beta


2012-09-03 :
APC 3.1.13 está disponible, solucionando una serie de segfaults .


2012-08-16 :
Se ha creado una etiqueta APC 3.1.12 , pero aún está marcada como beta , está disponible en la página APC PECL , así como en el registro de cambios .

En esta ocasión, se solucionaron muchos errores relacionados con bin_dump.


2012-07-19 :
Se ha creado una etiqueta APC 3.1.11 , pero aún está marcada como beta , está disponible en la página APC PECL , así como en el registro de cambios . He estado siguiendo las listas de correo relevantes y todavía están trabajando activamente para corregir los errores de APC; sin embargo, es un módulo complejo y no muchas personas parecen estar a la altura de la tarea. Esta versión corrige los desagradables errores stat = 0 al incluir archivos.


2012-04-11 :
Un APC 3.1.10 etiqueta fue creada hoy, y una versión beta de 3.1.10 fue colocado en la página de APC PECL

Los changelog estados:

  • Agregue soporte PHP 5.4 (Dmitry, Anatoliy, Pierre)
  • Error corregido # 22679: Corregido apc_bin_dump para constantes. Utilice IS_CONSTANT_TYPE_MASK para manejar todas las constantes, incluidas las no calificadas (en lugar de la comprobación ~ IS_CONSTANT_INDEX)
  • Error solucionado # 23822, php se bloquea al reiniciar apache
Leigh
fuente
1
simplemente escriba: "pecl install apc-3.1.10" y luego tuve que recompilar php para que actualizara libphp5.so
targnation
Lo he estado usando desde octubre de 2012 a través de Apt-get en ubuntu 12. ¡Limpio y estable!
JustinP
eche un vistazo a este artículo relacionado con Zend OpCache y APC blogs.oracle.com/opal/entry/using_php_5_5_s y este hilo bugs.php.net/bug.php?id=64625
riotera
10

A partir de PHP 5.4.7 y APC 3.1.13 (e incluso el tronco SVN de APC a partir del 19 de septiembre de 2012), aunque es "compatible", no es estable en servidores con mucha carga, especialmente si está utilizando PHP. FPM y $ GLOBALS. Algunas de las discusiones de los desarrolladores sobre APC hablan de casos marginales no resueltos .

Estoy respondiendo esta pregunta 6 meses después de que me la hicieron porque el problema aún es frecuente, y encontrar este hilo sin una respuesta como la mía es lo que me hizo dar el salto a PHP 5.4 con APC y quemarme. Con suerte, esto ayudará a las personas a evitar algo de dolor.

Eric Caron
fuente
5

No, APC 1.3.9 (y a partir de este momento, incluso el tronco svn) no es compatible con php 5.4.0, lo sé porque acabo de pasar horas tratando de que funcione (probé varios archivos svn / php. ini settings / compiler flags / lo que sea).

Esto es simplemente ridículo, APC es una de las extensiones de PHP más populares y es de esperar que después de semanas de pasar por 8 PHP 5.4 RC, tengan tiempo para hacer que APC funcione junto con él.

Patético.

John Smith
fuente
Quizás es por eso que APC no se incluyó con PHP 5.4 como se planeó originalmente. Parecía funcionar cuando lo probé, pero solo probé rasgos y no ninguna de las otras características de php 5.4.
Greywire
2
Parece que el único compilador de caché / código de bytes viable para php 5.4 es el paquete de servidor zend de Zend. PHP 5.4 me tenía un poco emocionado pero sin APC o XCache o algo así, es inútil. Y esta ha sido la historia de PHP durante años y años ... siempre esperando, esperando ... Estoy empezando a pensar seriamente en tomar otro idioma ... pero no estoy seguro de qué ...
Greywire
Es cierto que el error segfault se informó en diciembre del año pasado, y 3 meses después aún no se ha solucionado, wtf es el punto de lanzar una 'actualización importante' si ni siquiera funciona en las condiciones más comunes. [Error # 60462 cuando APC está habilitado segfault - Enviado: 2011-12-07] bugs.php.net/bug.php?id=60462&edit=1
JohnSmith
5

Bueno, lo estoy intentando durante los últimos días, y no hay forma de que pueda hacer que un cacher de código de operación funcione con php 5.4. Xcache no se compilará y apc no reconocerá ciertas clases cuando se almacenen en caché. Creo que este es el error del que habla Simon.

Escuché que había algunas correcciones en el tronco, pero también probé las últimas fuentes del tronco, pero los mismos errores siguen apareciendo. Creo que php sin un cacher de código de operación (no hay ninguno disponible en este momento) no es digno de producción. Esperamos que la gente de apc solucione este problema lo antes posible.

¡¡¡ACTUALIZAR!!!

Xcache 2.0.0-rc1 está fuera y es compatible con php 5.4. ¡Disfrutar!

Michiel Thalen
fuente
4

Estoy usando AMPPS con PHP versión 5.5.19. Desde hace algún tiempo, exactamente desde el lanzamiento de PHP 5.5 - APC se reemplaza con Zend OPCache que se incluye en PHP 5.5 y versiones posteriores. Ahora todo lo que tiene que hacer para habilitar "APC" (actualmente "OPcache") es editar su php.ini. Antes de la sección [XDebug] agregue las líneas 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

...

Tenga en cuenta que necesitamos tener dos instancias de:

zend_extension =

Uno en [OPcache] y otro en la sección [XDebug]. Xdebug a menudo no se proporciona de forma predeterminada en la instalación del servidor xampp / ampps / easyPHP. Es posible que se encuentre en una situación en la que necesite descargar la extensión Xdebug. Puede hacer esto fácilmente usando una aplicación en línea que defina el Xdebug correcto para su php. Visite http://xdebug.org/wizard.php y siga sus sencillas instrucciones. Una vez que haya descargado la versión correcta de Xdebug para su versión php, edite el enlace de su zend_extension en la sección [XDebug].

...

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

¡Tenga en cuenta! que tiene que agregar la sección OPcache antes de XDebug en su archivo php.ini !!! Si me sigue correctamente, debería tener dos instancias de zend_extension en su archivo php.ini (una en OPcache y otra en la sección Xdebug).

Esto funciona perfectamente para Symfony2 marco y elimina el mensaje de recomendación para instalar y habilitar APC para PHP y Xdebug.

Mensaje para aquellos que ejecutan Symfony 2 y eliminaron el mensaje de advertencia de "web / config.php", pero aún encuentran un problema al ejecutar desde la línea de comandos "php app / check.php". Si esto sucede, significa que su consola está usando un archivo php.ini diferente. Cambie la variable PATH de su sistema: apunte al directorio php correcto (donde tiene su archivo php.exe y que es utilizado por su servidor local).

Si necesita una explicación más profunda, hágamelo saber en el comentario a continuación. Saludos.

DevWL
fuente
1
Recomiendo encarecidamente que las instrucciones de esta respuesta se combinen con la respuesta principal, para que todos los que quieran implementar OpCache sepan exactamente cómo hacerlo.
Joe
Si comenta xdebug "zend_extension", lo apagará, no es necesario. Agregar la sección [OPcache] con "zend_extension" no choca con el mismo parámetro de la sección [XDebug]. Además, el orden de esas secciones realmente no importa.
Marek
Nota: [fuente: php.net/manual/en/opcache.installation.php] Si desea utilizar OPcache con »Xdebug, debe cargar OPcache antes que Xdebug.
DevWL
3

Parece que aún quedan algunos problemas por resolver. Revise los errores y es posible que pueda averiguar cuál es la solución a su problema particular.

Me ocupé de uno de esos errores hace algunas horas, y resultó que usar APC desde el tronco SVN era el camino a seguir. ¡Espero que esto ayude!

Roberto
fuente
Bueno, hasta ahora, parece estar funcionando bien. Esto es en Ubuntu 10.04 (dispositivo LAMP llave en mano) con paquetes PHP 5.4 de launchpad.net/~ondrej/+archive/php5 . Pero si surge algo, revisaré la lista de errores. ¡Gracias!
Greywire
3

Descubrí que necesita borrar la caché de código de operación en cada solicitud de página, de lo contrario, las clases que implementan interfaces no se cargan. Esto fue compilado desde el último tronco svn, Apache 2.4.1, PHP 5.4.0.

Simón
fuente
@ michiel-thalen estás en lo cierto, ese es el tema del que estaba hablando. Realmente es una lástima ... Aunque todavía he visto un ligero beneficio en el rendimiento incluso con restablecer el código de operación en cada carga. El caché de usuario todavía funciona según lo previsto (en mis pruebas hasta ahora).
Simon
2

APC - no recomendado
Personalmente no usé APC con PHP 5.4 o PHP 5.5, pero el APC estable más reciente no es compatible con PHP 5.4, el APC beta más reciente se puede usar con 5.4 pero está escrito que todavía tiene problemas negativos con APC.

Si tiene PHP 5.5,
simplemente use Zend Opcache . Está listo para usar, por lo que los problemas son mínimos.

Si tienes PHP 5.4
recomiendo XCache . Es totalmente compatible con PHP 5.4 y 5.5. Desarrollado activamente. La última versión estable se lanzó hace 3,5 meses (10 de octubre de 2013). Mejora el rendimiento incluso si usa fastcgi.

trante
fuente
1

Zend OPCache se incluye en PHP 5.5 con el nombre php_opcache.dll en el directorio php / ext. Para activarlo:

  • Agregue el archivo php_opcahe.dll como una extensión zend en su archivo de configuración php.ini .
  • Utilice el formato zend_extension = ruta / a / php / ext / php_opcache.dll .
  • Coloque zend_extension antes de xDebug zend_extension en su configuración php.ini .
  • Guarde su archivo de configuración php.ini y reinicie su servidor.
RAÍZ
fuente
0

APC tiene una nueva versión: 3.1.14 desde el 2 de enero, que resuelve algunos errores: http://pecl.php.net/package/APC

Sin embargo, he estado ejecutando PHP 5.4.x con APC 3.1.13 desde el repositorio dotdeb sin ningún problema hasta ahora, así que para mí diría que es estable. dotdeb también me ha informado que incluirán el APC actualizado en la próxima versión de PHP, que se espera sea la 5.4.11.

Steven De Groote
fuente
Si está utilizando APC 3.1.14, le aconsejo que vuelva a APC 3.1.13 temporalmente. Se han descubierto algunos errores graves relacionados con la memoria que han provocado que la versión 3.1.14 se retire de la sección de descargas.
Leigh
De hecho, descubrí que el paquete lanzado por dotdeb para PHP 5.4.11 inicialmente incluía APC 3.1.14, pero se ha revertido para evitar los errores.
Steven De Groote
0

Estamos experimentando errores de memoria libre (apache segfault) con PHP 5.4.26 y APC 3.1.9. Hay un error abierto para APC en PHP 5.4.X: https://bugs.php.net/bug.php?id=61934

Recomiendo no usar este complemento en PHP> 5.3.

dAm2K
fuente
0

En XAMPP Versión 5.6.3 (PHP 5.6.3), todo lo que tiene que hacer en su ini.php es esto:

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

Configuración para el framework Symfony2.

DevWL
fuente