Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Aunque la configuración predeterminada de APC está bien para la mayoría de las instalaciones, los usuarios dedicados deberían considerar ajustar los siguientes parámetros.

Hay dos decisiones principales a tomar para configurar APC. Primero, cuánta memoria va a ser asignada a APC; y segundo, si APC debe comprobar si un archivo ha sido modificado en cada petición. Las dos directivas ini que controlan estos ajustes son apc.shm_size y apc.stat, respectivamente. Lea detenidamente las secciones sobre estas dos directivas más abajo.

Una vez que el servidor está ejecutándose, el script apc.php que está incluido con la extensión debería ser copiado a algún lugar dentro del directorio raíz de documentos y visualizarlo con un navegador, ya que porporciona un análisis detallado del funcionamiento interno de APC. Si GD está habilitado en PHP, también mostrará algunos gráficos interesantes. Lo primero que se debe asegurar es, por supuesto, que se están manejando realmente archivos en caché. Si APC está funcionando, el número dado por Cache full count (a la izquierda) mostrará el número de veces que la caché ha alcanzado su máxima capacidad y ha tenido que limpiar forzosamente cualquier entrada a la que no se haya accedido en los últimos apc.ttl segundos. Este número está minimizado en una caché bien configurada. Si la caché está siendo llenada constantemente, y de este modo liberada forzosamente, el revoltijo resultante tendrá efectos negativos en el rendimiento del script. La forma más sencilla de minimizar este número es asignar más memoria a APC. A menos que se haga esto, debería usarse apc.filters para almacenar en caché menos scripts.

Cuando APC es compilado con soporte para mmap (Memory Mapping - Mapeo de Memoria), sólo usará u segmento de memoria, a diferencia de cuando APC es construido con soporte para SHM (SysV Shared Memory - Memoria Compartida de SysV), que usa múltiples segmentos de memoria. MMAP no tiene un límite máximo como lo tiene SHM en /proc/sys/kernel/shmmax. En general, se recomienda el soporte para MMAP ya que reclamará la memoria más rápido cuando el servidor web sea reiniciado y a fin de cuentas reduce el impacto de asignacion de memoria al inicio.

Opciones de configuración de APC
Nombre Por defecto Cambiable Historial de cambios
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM en APC 2. PHP_INI_ALL en APC <= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.shm_strings_buffer "4M" PHP_INI_SYSTEM Disponible a partir de APC 3.1.4.
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM en APC 2. Eliminada en APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM en APC <= 3.0.12. Disponible a partir de APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0. Anterior a APC 3.1.4, el valor por defecto era "0" (deshabilitado).
apc.file_update_protection "2" PHP_INI_SYSTEM Disponible a partir de APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Disponible a partir de APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.serializer "default" PHP_INI_SYSTEM Disponible desde APC 3.1.0.
apc.include_once_override "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM Disponible en APC 3.0.14 - 3.1.11.
apc.localcache.size "512" PHP_INI_SYSTEM Disponible en APC 3.0.14 - 3.1.11.
apc.coredump_unmap "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde se puede realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

apc.enabled boolean

apc.enabled se puede establecer a 0 para deshabilitar APC. Esto es útil principalmente cuando APC está compilado estáticamente en PHP, ya que no hay otra forma de deshabilitarlo (cuando se compila como un DSO, la línea extension en php.ini debe ser descomentada).

apc.shm_segments integer

El número de segmentos de memoria compartida a asignar a la caché del compilador. Si APC está agotando la memoria compartida pero apc.shm_size está establecido tan alto como el sistema lo permita, aumentar este valor podría prevenir que APC agote su propia memoria.

apc.shm_size integer

El tamaño de cada segmento de memoria compartida en MB. Por defecto, algunos sistemas (incluidos la mayoría de variantes de BSD) tienen límites muy bajos del tamaño de un segmento de memoria compartida.

apc.shm_strings_buffer string

El tamaño de la memoria a usar como búfer compartido para strings usados internamente por APC. El tamaño debería sufijarse con M para megabytes, G para gigabytes. LA habilitación de esta opción reduce la cantidad de memoria usada por el trabajador PHP-FPM ya que los strings serán almacenados una vez en lugar de una por cada trabajador.

apc.optimization integer

El nivel de optimización. Cero deshabilita el optimizador, y valores mayores usan optimizaciones más agresivas. Se esperan mejoras de velocidad muy modestas. Esto es experimental.

apc.num_files_hint integer

Un "consejo" sobre el número de distintos archivos fuente que serán incluidos o solicitados en su servidor web. Establézcalo a cero u omítalo si no está seguro; este ajuste es útil principalmente para sitios que tienen miles de archivos fuente.

apc.user_entries_hint integer

Al igual que apc.num_files_hint, un "consejo" sobre el número de distintas variables de caché de usuario a almacenar. Estblézcalo a cero u omítalo si no está seguro.

apc.ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.user_ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.gc_ttl integer

El número de segundos que una entrada de caché puede permanecer en la lista de recolección de basura. Este valor proporciona un seguro en el caso de que un proceso del servidor muera mientras se ejecuta un archivo fuente en caché; si este archivo fuente es modificado, la memoria asignada para la versión antigua no será reclamada hasta que se alcance este TTL. Estabézcalo a cero para deshabilitar esta característica.

apc.cache_by_default boolean

Activado por defecto, pero se puede desactivar y usarlo junto con un filtro positivo en apc.filters para que sólo sean almacenados en caché los archivos que coincidan con un filtro positivo.

apc.filters string

Una lista de expresiones regulares POSIX extendido separadas por comas. Si cualquier patrón coincide con el nombre de archivo fuente, el archivo no será almacenado en caché. Observe que el nombre de archivo usado para la comparación es pasado para incluirlo/requerirlo, no la ruta absoluta. Si el primer carácter de una expresión es +, la expresión será aditiva en el sentido de que cualquier archivo comparado por la expresión será almacenado en caché, y si el primer carácter es -, entonces cualquier cosa que coincida no será almacenada en caché. El caso predeterminado es -, por lo que se puede dejar así.

apc.mmap_file_mask string

Si se compiló con soporte para MMAP usando --enable-mmap, ésta es la máscara de archivo estilo mktemp a pasar al módulo mmap para determinar si la región de memoria de mmap va a ser para gestión de archivos o para gestión de memoria compartida. Para gestión directa de archivos, establézcalo a algo como /tmp/apc.XXXXXX (exactamente 6 X). Para usar shm_open/mmap al estilo POSIX ponga .shm en algún lugar de su máscara, p.ej. /apc.shm.XXXXXX También se puede establecer a /dev/zero para usar la interfaz /dev/zero de kernel a una memoria de mmap anónima. Dejándolo indefinido forzará un mmap anónimo.

apc.slam_defense integer

En servidores muy concurridos cuando se inicia el sercidor o se modifican archivos, se puede crear una competición para todos los procesos que intentén almacenar el mismo archivo al mismo tiempo. Esta opción establece el porcentaje de procesos que se saltan el intentar almacenar en caché un archivo que no lo esté. O piense en ello como la probabilidad de saltarse el almacenamiento en caché de un proceso. Por ejemplo, establecer apc.slam_defense a 75 siginifica que hay un 75% de probabilidad de que el proceso no almacene en caché un archivo que no lo está. Así, cuanto mayor sea el valor mayor será la defensa contra los ataques a la caché. Establecer esto a 0 deshabilita esta característica.

Obsoleto por apc.write_lock.

apc.file_update_protection integer

Cuando un archivo es modificado en un servidor web debería hacerse realmente de una forma atómica. Es decir, escribir en un archivo temporal y renombrar (mv) el archivo a su posición permanente cuando esté listo. Muchos editores de texto, Many text editors, cp, tar y otros programas similares no lo hacen. Esto significa que hay una posibilidad de que se acceda al archivo (y se almacene en caché) mientras está todavía siendo escrito. apc.file_update_protection pone un retardo en la marca de almacenamiento en caché de nuevos archivos. Lo predeterminado es 2 segundos, lo que significa qeu si marca de tiempo de modificación (mtime) de un archivo muestra que es menor que 2 segundo de atigüedad cuando se acceda a él, no será almacenado en caché. La persona desafortunada que acceda a este archivo a medio escribir aún lo verá de forma extraña, pero por lo menos no persistirá. Si todos los archivos del servidor web se actualizan atómicamente mediante algún método como rsync (el cuál actuliza correctamente), se puede deshabilitar esta protección estableciendo esta directiva a 0. Si el sistema se inunda de entradas/salidas y algunos procesos de actualización toman más de 2 segundos, este ajuste debería ser aumentado para habilitar la protección en las operaciones de actualizacón más lentas.

apc.enable_cli integer

Mayormente para probar y depurar. Estableciendo esto habilita APC para la versión CLI de PHP. Bajo circunstancias normales, no es ideal crear, llenar y destruir la caché de APC en cada petición CLI, pero para varios escenarios de pruebas es útil para ser capaz de habilitar APC para la versión CLI de PHP de manera sencilla.

apc.max_file_size integer

Previene que los archivos más grandes que este valor sean almacenados en caché. Por defecto es 1M.

apc.stat integer

Tenga cuidado al cambiar este ajuste. Por defecto está activado, forzando a APC a realizar estadísticas (comprobar) del script en cada petición para determinar si ha sido modificado. Si ha sido modificado será recompilado y se almacenará en caché la nueva versión. Si este ajuste está desactivado, APC no hará ninguna comprobación, lo que normalmente significa que al forzar a APC a recomprobar archivos, el sevidor web tendrá que ser reiniciado o la caché tendrá que ser limpiada manualmente. Observe que la configuración de FastCGI del servidor web puede no limpiar la caché al reinicio. En un servidor de producción donde los archivos de script raramente cambian, se puede lograr aumentar el redimiento significativamente deshabilitando las estadísticas.

Para archivos incluidos/requeridos también se aplica esta opción, pero observe que para inclusiones de rutras relativas (cualquier ruta que no empiece con / en Unix), APC tiene que realizar una verificación para identificar de manera única un arcivo. Si se usan inclusiones de rutas absolutas, APC puede saltarse las estadísticas y usar esa ruta absoluta como el identificador único del archivo.

apc.write_lock boolean

En servidores concurridos, cuando el servidor se inicia primero, o cuando muchos archivos han sido modificados al mismo tiempo, APC puede intentar compilar y almacenar en caché el mismo archivo múltiples veces. Write_lock garantiza que sólo un proceso intentará compilar y almacenar en caché un script que no lo ésta. Los demás procesos que intenten usar el script se ejecutarán sin usar la caché de código de operaciones, en vez de mirar y esperar a que la caché se prepare.

apc.report_autofilter boolean

Registra cualquier script que fue automáticamente excluído de ser almacenado en caché debido a cuestiones de enlaces precoces/tardíos.

apc.serializer string

Usado para configurar APC para que use un serializador de terceros.

apc.include_once_override boolean

Optimiza las llamadas a include_once y require_once y evita las caras llamadas al sistema utilizadas.

Advertencia

Esta característica es EXPERIMENTAL. El comportamiento de esta directiva, su nombre, y la documentación pertinente puede cambiar sin previo aviso en una versión futura de APC. El uso de esta característica está bajo su responsabilidad.

apc.rfc1867 boolean

El gestor de enganche de Progreso de Subidas de Archivo RFC1867 sólo está disponible si APC fue compilado con PHP 5.2.0 o posterior. Cuando está habilitado, cualquier subida de archivo que incluya un campo llamado APC_UPLOAD_PROGRESS antes del campo file en un formulario de subidas hará que APC cree automáticamente una entrada de caché de usuario upload_key donde key es el valor de la entrada APC_UPLOAD_PROGRESS del formulario.

Observe que el campo oculto especificado por APC_UPLOAD_PROGRESS debe ir antes del campo file, si no el progreso de subida no funcionará correctamente.

Observe que el rastreo de subidas de archivos no es seguro a nivel de hilos en este momento, por lo que las nuevas subidas que ocurran mientras se está realizando una anterior deshabilitará el rastreo para la anterior.

Observe que rate sólo está disponible una vez que todas las tranferencias de ficheros estén completadas.

Ejemplo #1 Un ejemplo de apc.rfc1867

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

El prefijo de clave a usar para la entrada de caché de usuario generada por la funcionalidad de progreso de subida rfc1867.

apc.rfc1867_name string

Especifica el nombre de la entrada oculta del formulario que activa el progreso de subida de APC y especifica el sufijo de clave de la caché de usuario.

apc.rfc1867_freq string

La frecuencia con la que se debería hacer la actualización de la entrada de la caché de usuario para el progreso de subida. Puede tomar la forma de un porcentaje del total del tamaño del archivo o un tamaño en bytes opcionalmente con el sufijo "k", "m", o "g" para kilobytes, megabytes, o gigabytes respectivamente (insensible a mayúsculas-minúsculas). Un valor de 0 actualiza tan a menudo como se pueda, lo que puede causar subidar más lentas.

apc.rfc1867_ttl integer

TTL para las entradas de rfc1867.

apc.localcache boolean

Habilita un cierre libre de la caché de seguimiento de procesos locales que reduce las disputas de cierre cuando la caché está siendo escrita.

apc.localcache.size integer

El tamaño de la caché de seguimiento de procesos locales, debería ser establecido a un valor suficientemente grande, aproximadamente la mitad de apc.num_files_hint.

apc.coredump_unmap boolean

Habilita a APC para el manejo de señales, como SIGSEGV, que escriben archivos de núcleo cuando se indican. Cuando estas señales son recibidas, APC intentará desmapear el segmento de memoria compartida para excluirlo del archivo de núcleo. Este ajuste puede mejorar la estabilidad del sistema cuando son recibidas señales fatales y se configura un segmento grande de memoria compartida de APC.

Advertencia

Esta característica es potencialmente peligrosa. Desmapear el segmento de memoria compartida en un gestro de señal fatal puede causar un comportamiento indefinido si ocurriera un error fatal.

Nota:

Aunque algunos kernels pueden proporcionar una utilidad para ignorar varios tipos de memoria compartida cuando se genera un archivo de copia de núcleo, estas implementaciones pueden también ignorar segmentos de memoria compartida tales como el marcador de Apache.

apc.stat_ctime integer

La verificación con ctime evitará problemas causados por programas como svn o rsync asegurándose que los i-nodos no han cambiado desde la úlima estadística. APC normalmente sólo verificará mtime.

apc.canonicalize bool

Si está activado, las rutas relativas son canonizadas al modo sin estadísticas. En tal caso, los ficheros importados a partir de envolturas de flujos, no se almacerán dado que realpath() no soporta las envolutras de flujos.

apc.preload_path string

Opcionalmente, establece un ruta al directorio que APC cargará cados de caché al inicio.

apc.use_request_time bool

Usa el tiempo de inicio de la petición SAPI para TTL.

apc.file_md5 bool

Graba un hash de archivos md5.

apc.lazy_functions integer

Habilita la carga lenta de funciones.

apc.lazy_classes integer

Habilita la carga lenta de clases.

add a note add a note

User Contributed Notes 11 notes

up
2
bishop
15 years ago
The apc.rfc1867 example code above is a little fast and loose for those running in environments where APC RFC1867 may or may not be available.  This is a little more expressive:

<?php

// if we have PHP and APC
$havePHP = (1 === version_compare(PHP_VERSION, '5.2.0') ? true : false);
$haveAPC = (extension_loaded('apc') && 1 === version_compare(phpversion('apc'), '3.0.13') ? true : false);
if (
$havePHP && $haveAPC) {
   
// if APC and upload tracking is enabled
   
if (ini_get('apc.enabled') && ini_get('apc.rfc1867')) {
       
// get the stats
       
$key = ini_get('apc.rfc1867_prefix') . $_REQUEST['apcid'];
       
$stats = apc_fetch($key);
    }
}

?>
up
2
danbettles at yahoo dot co dot uk
16 years ago
To automatically cache only PHP class files named "<class name>.class.php", add the following lines to php.ini.

apc.cache_by_default = "Off"
apc.filters = "+\.class\.php$"

Notes:
- The regexp is case /sensitive/, so if, say, your project contains filenames with mixed case, you'll need something like "+\.(class|CLASS)\.(php|PHP)$".  I've tried delimiting patterns and using the "i" modifier, but that doesn't seem to work.
- Setting cache_by_default to "On" and applying the positive filter will /not/ work.

If you have more complicated requirements and, like me, you're not familiar with POSIX Extended Regular Expressions (ERE) inparticular, you may find the following link useful.  http://www.regular-expressions.info/refflavors.html
up
1
lamperz at gmail dot com
16 years ago
I'm trying to get upload progress with apc_fetch.
I founded apc_fetch always return false till the upload completed.After fews hours debug, I finally notice that my APC_UPLOAD_PROGRESS was set after the file form.

SO, You should write your form like this
<input type="hidden" id="file_id" name="APC_UPLOAD_PROGRESS" value="blablabla"/>
<input type="file" id="select_file" name="file" value="upload" onchange="parent.test();"/>

the hidden field with name="APC_UPLOAD_PROGRESS" SHOULD be ALWAYS BEFORE input type="file"
up
-1
klaus at hax dot at
11 years ago
Note: If you want to run a script on Windows with apc.enabled=1 as a scheduled task whilst another instance of php is running (like on a webserver) apparently you have to disable apc for this scheduled task, otherwise it will not run and you will have something in your error log like: PHP Fatal error: PHP Startup: apc_shm_create: shmget(0, 33554432, 658) failed: No such file or directory.

So simply execute your scheduled task with:

c:\php\php.exe -d apc.enabled=0 and all will be fine.
up
-1
d_inkubus at yahoo dot com
14 years ago
apc.include_once_override=1 can cause more problems than it solves.  If you're running into weird errors regarding relative paths, make sure this setting is off.  PHP 5.3 already implements most of the speed ups in these calls anyway.
up
-1
fusionstream [a](t) gmail.com
14 years ago
If you are getting 0kb out of 0kb for your upload progress with large files, make sure that upload_max_filesize and post_max_size are larger than the file you are uploading. As far as I can tell, apc.max_file_size does not affect it.
up
-2
neorush at gmail dot com
15 years ago
apc_fetch always returned false.  Turns out that "apc.rfc1867" was set to "0".  I added this line to my php.ini:
apc.rfc1867 = 1
but it could have certainly been changed with ini_set().  That took me way to long to figure out.
up
-2
Will
15 years ago
For anyone wondering why shm_segments is being ignored on their setup, it could be because of the following:

If you've configured APC to use memory mapped files (with the --enable-mmap option), the shm_segments setting is ignored unless you specify a file mask via the mmap_file_mask setting.

This is because APC won't attempt to create multiple anonymous files to map into memory without a mask (since it has no way of naming them sensibly). To set up multiple segments you have to give a file mask so they can be named separately.

apc.mmap_file_mask=/tmp/apc.XXXXXX

Make sure to use exactly 6 "X"s (this is the part that is changed by APC). You can place these files anywhere, they don't have to go in /tmp.

With that said, I'm not sure what the performance impact of having multiple MMAP segments would be. I'm guessing it would probably be negative so you probably don't want to do this.
up
-2
amir w of colnect dot com TIPS
14 years ago
Want to avoid segmentation with apc.shm_segments?If your linux server limits the shared memory block size and you're forced to use apc.shm_segments instead, change the setting by using (here is 512M but change it as you like):
# sysctl -w kernel.shmmax=536870912

(but if you want the change to be permanent after a restart you would have to add the following line in /etc/sysctl.conf

kernel.shmmax=536870912)

and updating apc.ini

apc.shm_segments="1"
apc.shm_size="512"


apc.stat is an extremely important setting for a production server, especially if many files are accessed on every request, which is quite normal on complicated web applications.

Always aspire to use:
apc.stat="0"
so that APC does not try to check that each and every file exists on every request you make. It also means you can update files on your server without crashing incoming requests on that time fragment. Whenever you wish to force APC to re-read all the files, simply clear the cache or restart your server.
up
-3
bas_vijfiwinkel
12 years ago
I took some time to look at the preload_path option.

At the moment of writing the preload_path option is broken because of a bug in the APC source code
which will not allow you to properly preload the cache.

The way to fix it :
Inside 'main_apc.c' in the method called 'static int apc_load_data(const char *data_file TSRMLS_DC)', the length of the key of the value that needs to be stored is determined with the following line :
key_len = strlen(key);
If I am correct this is only the length of the string itself without the null-terminator
However, "_apc_store" seems to want the length of the key string including the terminator.
If I change the line above to :
key_len = strlen(key)+1;
then the preload function works as expected.
You can also notice that 1 character is missing when looking at the user cache entries apc.php. But if you try to use that as a key then APC will not return the contents so that didn't work as a workaround.

If one is able to compile the apc library from source, then one can of course easily fix this option by changing the source code.

Files in the specified path should have the extension '.data'.
The filename itself will become the key for the data that is in that specific file.
The data in the file is a serialized string representing what you want to assign to the specific key. For example s:2:"123" will generate the string "123".
One can only specify 1 value for each key and it should be null-terminated.

It is not possible to preload PHP scripts.
Only values that one retrieved with apc_fetch can be preloaded.
up
-4
amir w of colnect dot com TIPS
14 years ago
apc.stat is an extremely important setting for a production server, especially if many files are accessed on every request, which is quite normal on complicated web applications.

Always aspire to use:
apc.stat="0"
so that APC does not try to check that each and every file exists on every request you make. It also means you can update files on your server without crashing incoming requests on that time fragment. Whenever you wish to force APC to re-read all the files, simply clear the cache or restart your server.
To Top