Errore in Drupal 7 con APC (Alternative PHP Cache)

Errore in drupal 7 con include_once() e require_once() con APC

Drupal 7 sembra un tantino più "delicato" rispetto alla versione precedente per quanto riguarda le impostazioni di configurazione della cache APC. L'installazione di Drupal 7 su di un server nel quale girano senza problemi siti web sviluppati con la versione 6 e con la 5 dava errori già in fase di installazione come si può vedere dall'immagine qui a lato. Il tipo di errore (che si verifica sia con PHP 5.3 che con PHP 5.2 ed APC 3.1.9 installata da pecl, su di un server Ubuntu):

Notice: Constant MARK_READ already defined in require_once() (line 21 of /var/www/drupal/includes/theme.inc).

mi ha fatto subito pensare ad un prossibile problema con APC ed in particolare con l'opzione apc.include_once_override che va a toccare (ottimizzare) per l'appunto le chiamate a include_once() e require_once(). La soluzione al problema è disabilitare apc.include_once_override, impostando il parametro di configurazione a 0:

apc.include_once_override = 0

Disabilitando tale opzione nel file di configuraizone di apc (su Ubuntu verosimilmente in /etc/php/conf.d/apc.ini) e ricaricando la configurazione del web server (sudo service apache2 reload), il problema dovrebbe risolversi. In realtà ho potuto verificare che anche:

apc.report_autofilter = TRUE

opzione che scrive nel log di APC tutti gli script che vengo esclusi automaticamente dalla cache a causa di un qualche problema, crea dei messaggi di errore in fase di installazione:

Warning: require_once(): Dynamic inheritance detected for class pagerdefault in _drupal_bootstrap_full() (line 4892 of /var/www/drupal/includes/common.inc).
Warning: require_once(): Autofiltering /var/www/drupal/includes/pager.inc in _drupal_bootstrap_full() (line 4892 of /var/www/drupal/includes/common.inc).
Warning: require_once(): Recompiling /var/www/drupal/includes/pager.inc in _drupal_bootstrap_full() (line 4892 of /var/www/drupal/includes/common.inc).

...

Infatti impostando nel file di configurazione di APC

apc.report_autofilter = FALSE

anche i precedenti messaggi di errore scompaiono ed è possibile proseguire nell'installazione indisturbati.