Bonjour,

Me voila à la recherche d'informations sur un comportement qui me parait étrange, merci de m'éclairer de vos lanternes.

J'ai un site web sous apache sur lequel j'ai activé l'opcache : PHP 5.5.9-1ubuntu4.20 with OpCache 7.0.3

Ce site héberge une API en REST fait maison, les pages sont stockées sur un NAS, le système de chargement de classe se fait via un autoloader très simple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
require_once "constants.php";
spl_autoload_register('doAutoLoad');
 
function doAutoLoad($className){
  $a_excludedClass =Array(
    'Net_DNS'
  );
 
  if(class_exists($className, false)) {
    return true; // All is well ... already
  }
  else {
    if (!in_array($className,$a_excludedClass)) {
      require_once $className . ".class";
    }
  }
  if (!in_array($className,$a_excludedClass)) {
    if(class_exists($className, false)) {
      return true; // All is well ... now
    }
    throw new Exception('could not find class '.$className); // Kaboom ...  
  }
}
?>
La configuration de l'opcache dans le php.ini :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.enable_file_override=1
Dans la console de suivi d'opcache, je vois bien les classes se mettre en cache et les hits s'incrémentent à chaque fois que je rafraichi ma page, donc jusqu'ici tout va bien.

Sur le NAS, j'ouvre une console de transfert réseau et d'accès disques, et là c'est le drame, à chaque fois que j'effectue un appel à mon WS, j'ai la courbe du traffic réseau qui s'énerve.

Pour tester, j'ai juste créé une classe très sommaire avec une méthode qui crache un "lorem ipsum" de plusieurs lignes, je but étant de voir facilement le transfert réseau, je fais également un boucle de plusieurs appels sur cette classe via le WS.

Donc mes questions :
- lorsque opcache accède à un fichier dans son cache, lit-il le fichier initial pour le comparer à celui en cache ou compare-t-il juste sa date de modification ?
- l'autoload n'est-il pas dans une couche très bas niveau qui interviendrait avant la validation d'opcache ?
- faut il utiliser d'autres méthodes que le simple spl_autoload_register ? classmap, controller... ?

J'ai tenté plusieurs modifications dans la configuration du php.ini et rien n'y fait, toujours ce transfert réseau.

Merci d'avance pour votre intervention.