Forum und email

Alternative PHP Cache

Introdução

O Cache Alternativo do PHP (APC) é um cache livre e aberto para o PHP. Foi desenvolvido para prover um framework livre, aberto e robusto para cache e otimização do código intermediário do PHP.

Instalação

Esta extensão » PECL não vem compilada com o PHP.

Informações para a instalação desta extensão PECL podem ser encontradas no manual no capitulo entitulado Instalação de extensões PECL. Informações adicionais como novas versões, downloads, arquivos fontes, manutenções, e um Changelog, podem ser obtidos aqui: » https://pecl.php.net/package/apc.

A DLL para esta extensão PECL deve ser copiada da pagina de » Downloads do PHP ou de » https://pecl4win.php.net/

Nota: No Windows, APC espera que c:\tmp exista, e que o servidor web possa escrever lá. Ele verifica as variáveis de ambiente TMP, TEMP, USERPROFILE nessa ordem e, no final, tenta o diretório WINDOWS se nenhum deles estiver configurado.

Nota: Para detales de implementação mais aprofundados, altamente técnicos, veja o » arquivo de notas técnicas fornecida pelo desenvolvedor .

Configurações em execução

O comportamento dessas funções podem ser modificado pelas configurações do php.ini.

Embora as configurações padrões do APC são suficientes para muitas instalações, usuários sérios devem considerar alterar os seguintes parâmetros.

São duas decisões principais que você deve fazer. A primeira, a quantidade de memória compartilhada que você quer alocar para o APC, e a segunda, se você quer que o APC verifique se um arquivo foi modificado em cada requisição. As duas diretivas do arquivo php.ini involvidas aqui são apc.shm_size e apc.stat. Leia as seções sobre essas duas diretivas com muita atenção.

Uma vez que você tiver um servidor operando, você deve copiar o script apc.php que vem com a extensão para algum lugar no seu DocumentRoot e carregue-o no seu navegador. Ele fornece uma visão detalhada sobre o que está acontecendo com o cache. Se você tiver a extensão GD habilitada no PHP, ele até gerará gráficos bonitinhos. Primeira coisa a ser verificada é se ele está de fato cacheando arquivos. Presumindo que está funcionando, você deve prestar atenção para o número Cache full count na esquerda. Isso te diz o número de vezes que o cache foi preenchido e precisou limpar à força todas as entradas que não foram acessados nos últimos segundos. O tempo varia dependendo da diretiva apc.ttl. Você deve configurar seu cache para minimizar esse número. Se você estiver com o cache cheio constantemente, o resultado disso afetará a performance. Você deve ou alocar mais memória para o APC ou usar os filtros (apc.filters) para cachear menos scripts.

Opções de Configuração de APC
Nome Valor Padrão Alterável Changelog
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_ALL no APC <= 3.0.12p2
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "30" PHP_INI_SYSTEM  
apc.optimization "0" PHP_INI_ALL  
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM  
apc.ttl "0" PHP_INI_SYSTEM  
apc.user_ttl "0" PHP_INI_SYSTEM  
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM no APC <= 3.0.12p2
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "0" PHP_INI_SYSTEM  
apc.file_update_protection "2" PHP_INI_SYSTEM  
apc.enable_cli "0" PHP_INI_SYSTEM > APC 3.0.6
apc.max_file_size "1M" PHP_INI_SYSTEM > APC 3.0.6
apc.stat "1" PHP_INI_SYSTEM > APC 3.0.9
apc.write_lock "1" PHP_INI_SYSTEM >= APC 3.0.11
apc.report_autofilter "0" PHP_INI_SYSTEM >= APC 3.0.11
apc.include_once_override "0" PHP_INI_SYSTEM >= APC 3.0.12
apc.rfc1867 "0" PHP_INI_SYSTEM >= APC 3.0.13
apc.localcache "0" PHP_INI_SYSTEM >= APC 3.0.14
apc.localcache.size "512" PHP_INI_SYSTEM >= APC 3.0.14
Para mais detalhes e definições das constantes PHP_INI_*, veja Diretivas do arquivo php.ini.

Breve descrição das diretivas de configuração.

apc.enabled boolean

apc.enabled pode ser configurado para 0 para desabilitar APC. Isso é primeiramente útil quando APC for compilado estaticamente no PHP, já que não existe outra maneira de desabilitá-lo (quando compilado como um DSO, a linha extension do arquivo php.ini pode ser comentada).

apc.shm_segments integer

O número de segmentos de memória compartilhada para alocar para o cache do compilador. Se APC estiver ficando sem memória compartilhada mas você já configurou apc.shm_size para o valor mais alto que seu sistema permite, tente aumentar esse valor.

apc.shm_size integer

O tamanho de cada segmento de memória compartilhado em MB. Por padrão, alguns sistemas (incluindo a maioria dos BSDs) tem limites muito baixos no tamanho de um segmento de memória compartilhada.

apc.optimization integer

O nível de otimização. Zero disabilita o otimizador, e valores mais algos usam otimizações mais agressivas. Espere melhoras muito modestas de velocidade. Isso é experimental.

apc.num_files_hint integer

Uma "dica" sobra o número de arquivos-fonte distintos serão incluídos ou requisitados no seu servidor web. Configura para zero ou omita o valor se não tiver certeza; Essa configuração é útil principalmente para sites que tem milhares de arquivos-fonte.

apc.user_entries_hint integer

Assim como apc.num_files_hint, dá uma "dica" sobre o número de variáveis de usuários distintos são armazenados. Dê o valor zero ou omit se não tiver certeza.

apc.ttl integer

O número de segundos que uma entrada no cache é permitida a ficar ociosa em uma posição, caso essa posição for necessária para outra entrada. Deixando o valor zero significa que o cache pode potencialmente encher de entradas paradas enquanto novas entradas não serão guardadas.

apc.user_ttl integer

O número de segundos que uma entrada de cache do usuário fica ociosa em cache se a posição que ele está ocupando for necessária. Atribuir zero significa que seu cache pode, potencialmente, ficar cheio de entradas não usadas enquanto novas entradas não serão guardadas.

apc.gc_ttl integer

O número de segundos que uma entrada do cache pode ficar na lista do coletor de lixo (garbage-collection). Esse valor prove uma segurança caso um processo do servidor morra enquanto executando um arquivo-fonte cacheado; Se o arquivo-fonte for modificado, a memória alocada para a versão antiga não será reclamada até que TTL seja alcançado. Configure para zero para desabilitar essa funcionalidade.

apc.cache_by_default boolean

Ligado por padrão, mas pode ser desligado e usado em conjunto com apc.filters positivos para que arquivos só sejam guardados se validados por um filtro positivo.

apc.filters string

Uma lista separada por vírgulas de expressões regulares extendidas POSIX. Se qualquer padrão bater com o nome do arquivo-fonte, o arquivo não será guardado. Perceba que o nome de arquivo usado para comparação é o que é passado para a include/require, não o caminho absoluto. Se o primeiro caracter da expressão é um +, então a expressão será aditiva no sentido que quaisquer arquivos que baterem com a expressão serão guardados, e se o primeiro caracter for -, então qualquer arquivo que não bater com o padrão não será guardado. O caso - é o padrão, então pode ser deixado de fora.

apc.mmap_file_mask string

Se compilado com suporte à MMAP usando --enable-mmap essa é a máscara de arquivo em estilo mktemp a ser passada para o módulo mmap para determinar se sua região mapeada de memória será guardada em arquivo ou memória compartilhada. Para guardar em arquivo, configure para um valor como /tmp/apc.XXXXXX (exatamente 6 Xs). Para usar shm_open/mmap no estilo POSIX ponha um .shm em algum lugar da sua máscara. Por exemplo, /apc.shm.XXXXXX Você também pode configura para /dev/zero usar a interface /dev/zero do kernel para memória mapeada de forma anônima. Deixar em branco forçará mapeamento anônimo.

apc.slam_defense integer

Em servidores muito ocupados sempre que você inicializar o servidor ou modificar arquivos, você pode criar uma "race condition" de muitos processos todos tentando guardar o mesmo arquivo ao mesmo tempo. Essa opção configura a percentagem de processos que não tentarão guardar um arquivo que ainda não esteja no cache. Ou pense como sendo a probabilidade de um único processo não guardar o arquivo. Por exemplo, configurar apc.slam_defense para 75 significaria que existe uma chance de 75% que o processo não guardará um arquivo em cache. Então, quanto maior o valor, maior a defesa contra uma "race condition". Configurando isso para 0 desabilita essa funcionalidade.

apc.file_update_protection integer

Quando você modifica um arquivo em um servidor web, você realmente devia fazê-lo de uma maneira atômica. Isso é, escreva para um arquivo temporário e renomeie o arquivo (mv) para sua posição permanente quando estiver pronto. Muito editores de texto, cp, tar e outros programas não fazem isso. Isso significa que existe uma chance de que um arquivo é acessado (e guardado em cache) enquanto ele ainda está sendo escrito. Essa configuração apc.file_update_protection coloca um atraso ao fazer o cache de arquivos recém-criados. O valor padrão é 2 segundos, o que significa que se o horário de modificação do arquivo (mtime) tiver menos do que 2 segundos de diferença do tempo atual, ele não será guarado. O infeliz que acessar esse arquivo incompleto ainda verá coisas estranhas, mas pelo menos não persistirá. Se você tiver certeza que você sempre atualiza seus arquivos atomicamente usando algo como rsync que faz isso corretamente, você pode desligar essa proteção ao atribuir o valor de 0. Se você tiver um sistema que é carregado com IO, csuando algum procedimento de atualização que leva mais do que dois segundos, você pode querer aumentar esse valor um pouco.

apc.enable_cli integer

Principalmente para teste e depuração. Ligando essa diretiva habilita o APC para a versão CLI do PHP. Normalmente você não iria querer criar, popular e destrui o cache do APC a cada requisição CLI, mas em vários cenários de teste isso é muito útil ser capaz de habilitar APC para a versão CLI facilmente.

apc.max_file_size integer

Previne que arquivos maiores que esse valor sejam cacheados. O padrão é 1M.

apc.stat integer

Tenha cuidado ao mudar essa configuração. O padrão para ela é On (ligado) o que significa que APC verificará o script em cada requisição para certificar-se que ele não foi modificado. Se ele foi modificado, ele recompilará e cacheará a nova versão. Se você desligar essa configuração, essa verificação não será feita. Isso significa que para que mudanças sejam ativadas, você precisará reiniciar o seu servidor web. Em um servidor de produção, onde você raramente modifica o código, desligar essa configuração pode significar um aumento de performance.

Essa opção aplica-se também para arquivos requeridos ou incluídos, mas perceba que se você estiver usando caminhos relativos para os includes (qualquer caminho que não começa com / no Unix ), o APC precisa chegar para indentificar univocamente o arquivo. Se você usar o caminho absoluto, o APC pode pular o teste e usar o caminho absoluto como identificador único do arquivo.

apc.write_lock boolean

Em servidores muito ocupados, quando você inicializa o servidor, ou quando muitos arquivos são modificados, você pode acabar com todos os processos tentando compilar e cachear os mesmos arquivos. Com write_lock habilitado, apenas um processo por vez tentará compilar um script não cacheado enquanto os outros processos executarão sem cache, ao invés de esperar por sua vez para poder escrever o arquivo.

apc.report_autofilter boolean

Registra qualquer script que são excluídos automaticamente do cache por problemas de binding prévio ou tardio.

apc.include_once_override boolean

Otimiza chamadas à include_once() e require_once() e evita o custo das chamadas de sistema usadas.

apc.rfc1867 boolean

RFC1867 File Upload Progress só está disponível se você compilou o APC com o PHP 5.2.0 ou posterior. Quando habilitado, qualquer upload de arquivo que inclui um campo chamado APC_UPLOAD_PROGRESS antes do campo arquivo em um formulário de upload fará com que o APC crie uma entrada no cache upload_key onde key é o valor da entrada APC_UPLOAD_PROGRESS do formulário.

Perceba que o rastrear uploads de arquivos não é threadsafe até agora, então novos uploads que acontecem enquanto um anterior ainda está sendo executado desabilitará o rastreamento do anterior.

Example#1 An apc.rfc1867 example

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

O exemplo acima irá imprimir 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.localcache boolean

Isso permite um shadow-cache sem lock no processo local que reduz contenção de locks quando o cache está sendo escrito.

apc.localcache.size integer

O tamanho do shadow-cache do processo local, deve ser um valor suficientemente grande, aproximadamente metade de apc.num_files_hint.

Tipos Resource

Esta extensão não possui nenhum tipo resource.

Constantes pré-definidas

Esta extensão não possui nenhuma constante.

Índice

  • apc_add — Cache a variable in the data store (only if it's not stored)
  • apc_cache_info — Retorna informação guardada (e meta-dados) de registros do APC
  • apc_clear_cache — Limpa o cache do APC.
  • apc_compile_file — Stores a file in the bytecode cache, bypassing all filters.
  • apc_define_constants — Define um conjunto de constantes para recuperação e definição em massa
  • apc_delete — Remove uma variável guardado no cache.
  • apc_fetch — Retorna uma variável guardado do cache
  • apc_load_constants — Carrega um conjunto de constantes do cache
  • apc_sma_info — Retorna informação sobre Alocação de Memória Compartilhada do APC.
  • apc_store — Guarda uma variável no cache