APC no funciona en la consola php

Estoy trabajando en una aplicación phpwebsocket. Tengo que almacenar la instancia de phpwebsocket en todas partes de mi aplicación. Encontré una solución, que sea con APC. Y no funciona. El problema es que si accedo a un archivo con apc_store('foo', 'bar') desde un script php que ejecuto en la consola php, no funcionará. Si hago una solicitud http (usando un navegador...) en realidad funciona, pero realmente tengo que ejecutar phpwebsocket desde la consola php.

En php.ini:

[APC]
extension=php_apc.dll
apc.enabled = 1
apc.enable_cli = 1 
apc.shm_segments = 1
apc.shm_size = 64M
apc.max_file_size = 10M
apc.stat = 1

Gracias.

preguntado el 02 de mayo de 12 a las 19:05

2 Respuestas

APC recopila y almacena caché dentro de su espacio de proceso. Dado que las aplicaciones de la consola inician un nuevo proceso cada vez, la memoria caché de APC se inicia limpia y, por lo tanto, no hay ganancia de rendimiento. En el caso de apache mod, el espacio de proceso es el propio servidor web apache que se mantiene vivo.

1) ¿Qué tal hacer un wget URL en la consola en lugar de un script php de consola independiente? Si necesita salida, use wget -O - URL. APC funcionará bien. La restricción aquí es que el script no obtiene acceso a ningún archivo físico.

2) Puede hacer un file_get_contents (URL) desde el script de la consola php de su consola y volcar el contenido. De esa manera, puede llamarlo desde la consola e incluso tener la ventaja de la memoria caché APC compartida. También obtiene acceso a archivos físicos aquí, pero hay un problema. La obtención de URL como archivos está DESACTIVADA de forma predeterminada por motivos de seguridad graves. Es posible que deba activarlo en php.ini. Verifique cuidadosamente su caso antes de usarlo en la red de producción.

http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

contestado el 03 de mayo de 12 a las 02:05

Eso es genial. Necesitaba una forma de mantener un instante de un objeto entre archivos. Así que decidí que APC es la mejor solución, aparentemente no lo es porque necesito la consola para instanciar el instante del objeto. ¡Gracias! - Juan

php-cli no comparte el caché de APC con php-cgi or php-fpm. De hecho, ¡no estoy seguro de que comparta el caché de APC consigo mismo!

Además, no puede almacenar recursos/instancias como transmisiones o sockets dentro de APC, solo objetos serializados.

yo usaría http://memcached.org/ para almacenar datos en caché desde entonces, cuando agregue más servidores, también podrán acceder al mismo caché. APC/XCache solo funciona en un único servidor.

contestado el 02 de mayo de 12 a las 19:05

Necesito una referencia a un objeto que envíe datos a mis clientes a través de otros scripts. Cada secuencia de comandos necesita una forma de comunicarse con los clientes, por lo que las secuencias de comandos se pueden enviar a través de websocket. ¿Entiendes mi problema? EDITAR: Creo que memcached está muy lejos de lo que necesito. - Juan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.