La définition du chemin d'inclusion dans PHP échoue par intermittence
-
09-06-2019 - |
Question
J'ai essayé les deux :
ini_set('include_path', '.:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes');
et aussi :
php_value include_path ".:/usr/share/php5:/usr/share/php5/PEAR:lib:app/classes"
dans le fichier .htaccess.
En fait, les deux méthodes faire du travail mais seulement par intermittence.Autrement dit, ils fonctionneront correctement pour environ 37 requêtes de pages, puis échoueront environ 42 requêtes de pages, ce qui entraînera un appel require() pour provoquer une erreur fatale faisant planter le site.
Je ne sais même pas par où commencer pour essayer de découvrir ce qui se passe !
@note
On dirait que vous avez dupliqué le répertoire actuel dans votre chemin d'inclusion.Essayez de supprimer l'un des « .: » de votre chaîne.
La version en script était à l'origine
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . 'lib' . PATH_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'classes');
et donc le .:.:venait du chemin existant :
ini_get('include_path')
J'ai quand même essayé de le supprimer et le problème persiste.
La solution
Il s'est avéré que le problème était lié à un bug PHP dans la version 5.2.5.
La définition d'un "admin_flag" pour include_path entraînait que le chemin d'inclusion était vide dans certaines requêtes, et Plesk définissait un admin_flag dans la configuration par défaut pour quelque chose ou autre.Une mise à jour de PHP a résolu le problème.
Autres conseils
As-tu essayé set_include_path()?.Comme avantage, cela renvoie false en cas d'échec, vous permettant au moins de détecter l'occurrence et de générer des données de débogage significatives.De plus, vous devriez utiliser la constante PATH_SEPARATOR
car il diffère entre Windows / * nix.
À titre d'exemple précis :
set_include_path('.' . PATH_SEPARATOR . './app/lib' . PATH_SEPARATOR . get_include_path());
(le get_include_path() à la fin signifie que quel que soit votre chemin ini / htaccess défini, il restera)
On dirait que vous avez dupliqué le répertoire actuel dans votre chemin d'inclusion.Essayez de supprimer l'un des « .: » de votre chaîne.