2009-01-13 23 views
11

Estoy usando APC para almacenar en caché variables de usuario (con los comandos apc_store/apc_fetch). También habilité APC para la CLI con la opción "apc.enable_cli = 1". Sin embargo, la versión CLI de PHP parece tener acceso a una memoria caché APC diferente de la versión utilizada por Apache.¿Cómo puedo hacer que PHP use el mismo caché de APC cuando se invoca en la CLI y la web?

¿Es posible configurar APC para que use la misma memoria caché tanto para la CLI como para las invocaciones web?

Respuesta

11

No es posible .. La única manera de lograr algo así como lo que está pidiendo es usar algo como memcacheD. O ejecute lo que necesita para ejecutar a través de su servidor web. ¿Qué está ejecutando CLI que no se puede ejecutar a través de un script web con un cronjob?

+0

.. o más importante, ¿por qué necesita ese tipo de optimización del rendimiento en una secuencia de comandos cli? – troelskn

+0

Muy cierto ... la web suele tener un alto impacto/visitas, y llamadas CLI one off. – DreamWerx

+3

No me molesta el almacenamiento en caché de APC del script CLI. Deseo poder acceder al mismo caché de usuario de APC desde la web y la CLI. Si no es posible, solo tendré que llamar a un script web desde la CLI y hacer que pase los datos requeridos. ¡No es la solución más elegante! –

1

llame a su CLI como un CGI /path-to/cgi-sys/php5.cgi /home/name/crons/engine.php

+0

Buena idea, pero esto no funcionó para mí en CentOS (/ usr/bin/php-cgi) – ColinM

+0

Esto solo funcionaría si está ejecutando PHP como CGI (rápido), no con mod_php en Apache (ya que APC es dentro de la memoria de los procesos Apache). – Mojah

4

Puede utilizar SHM. Esta tecnología permite acceder a la memoria compartida de Unix. Puedes poner alguna variable en shm y luego en otro scritp, incluso programado en otro idioma, puedes obtener las variables compartidas.

shm_put_var y shm_get_var.

Es más lenta que la APC, pero es más rápido que memcached, Redis, etc.

espero que le ayudará, y lo siento por mi Inglés ....

0

se necesitaría una servidor web escrito en php: el caché de APC solo se comparte mediante procesos secundarios bifurcados. Si tuviera un servidor web php, podría iniciar un cli maestro, init apc, fork y cargar/ejecutar el servidor web en un proceso secundario, y tenedor y ejecutar su script php cli en otro. Una especie de hack bruto, eh. Fork y require(), no creo que la caché de la APC pueda sobrevivir a un exec()

Cuestiones relacionadas