7
votes

OPCODE (APC / XCACHE), ZEND, DOCTRINE ET AutoLoaders

J'essaie d'utiliser APC ou XCache comme opcode pour mettre en cache mes pages PHP. Je l'utilise avec Zend and Doctrine et il y a un problème avec l'autochargeur.

Si j'essaie avec APC, je reçois ce qui suit: p> xxx pré>

si j'essaie avec Xcache I Obtenir ce qui suit: p>

set_include_path(dirname(__FILE__).'/../library/zendframework'
. PATH_SEPARATOR . dirname(__FILE__).'/../library/doctrine'.....

require 'Zend/Loader/Autoloader.php';

$loader = Zend_Loader_Autoloader::getInstance();
$loader->suppressNotFoundWarnings(false);
$loader->setFallbackAutoloader(true);


0 commentaires

4 Réponses :


0
votes

Y a-t-il quelque chose d'autre qui mucking le chemin inclus? Peut-être essayez peut-être de vous déconnecter le chemin Inclure juste avant cette ligne dans votre premier exemple d'APC.

Le xcache one est vraiment bizarre. Ce projet est assez mort, et je ne l'aurais pas confiance sur PHP 5.2+. Essayez EraceCelerator à la place? Nous avons eu la meilleure chance avec ça.


2 commentaires

Il existe d'autres choses spécifiques à la doctrine dans le chemin Inclure (modèles, etc.). Nous recherchons un backend Zendcache ( Framefend.zend.com/manual /en/zend.cache.backends.html ) afin que EaceCelerator ne fonctionne pas.


Theres une proposition pour un backend EaceCelerator Framefend.zend.com/wiki/ Affichage / ZFProp / ... - devrait être assez facile à mettre en œuvre. Quoi qu'il en soit, ce que je me demandais est si quelque chose enlève votre destinataire inclut les chemins d'autant du total avant que cette erreur soit lancée.



10
votes

Vous pouvez mettre un " zend_session :: writeclose (vrai); code>" à la fin de votre index.php.
Cela écrira la session dans un état persistant avant que les objets nécessaires (Zend_Loader, etc.) se détruit.

meilleur fort>: enregistrez-le comme fonction d'arrêt .
Donc, il sera exécuté même si vous utilisez quitte () code>, matrice () code> ou un erreur fatale code> se produit: p>

register_shutdown_function(array('Zend_Session', 'writeClose'), true);


1 commentaires

Crédit pour register_shutdown_function va à Hogberg et à Battal.



3
votes

Il est probablement similaire au problème de la manipulation de session personnalisée et du cache APC-Cache. Si vous avez attribué un gestionnaire de session personnalisé, il est enregistré avec Rshutdown en PHP. Il s'agit de la même routine que APC utilise et de créer un conflit interne dans PHP et votre gestionnaire de session personnalisé ne fermera pas dans toutes les situations.

Vous devrez donc vous assurer de fermer manuellement le gestionnaire de session personnalisé à l'arrêt

mettre un "zend_session :: writeclose (true);" à la fin de votre index.php n'est pas le meilleur moyen de le faire au cas où vous auriez une sortie; Appels dans vos scripts n'importe où.

Il est préférable d'enregistrer un gestionnaire d'arrêt de cette manière: xxx

mettre en haut de votre fichier index.php Pour vous assurer que la procédure d'arrêt est enregistrée avant l'exécution d'autres scripts.


0 commentaires

0
votes

Benjamin Cremer, vous êtes un économiseur de vie. Bien que le problème ci-dessus (original) soit un cas particulier d'autoloading avec des sessions, la fermeture de la session semble être une solution générale pour de tels cas. Une note cependant:

placer zend_session :: writeeclose (true); à la fin de vos scripts peut ne pas toujours le couper, car vous pouvez avoir quitter; S, Die (); 's, etc. dans votre code. Dans ce cas, vous pouvez utiliser

register_shutdown_function (tableau ('Zend_Session', 'WriteClose'), true);

ou, simplement

register_shutdown_function ('session_write_close');

Si vous n'utilisez pas Zend pour des sessions.


0 commentaires