Pendant le développement de PHP, include_path est une configuration importante qui est souvent utilisée pour définir les chemins dans les fichiers. Via get_include_path () et set_include_path () , nous pouvons contrôler de manière flexible l'emplacement où PHP recherche contient des fichiers. Cependant, de nombreux développeurs rencontrent souvent un problème déroutant lors de l'utilisation de ces deux fonctions: le chemin a été défini, mais inclut ou nécessite toujours des invites que le fichier ne peut être trouvé. Pourquoi est-ce?
Par exemple, votre code peut ressembler à ceci:
set_include_path('/var/www/html/libs');
include 'myLibrary.php';
Vous confirmez que /var/www/html/libs/mylibrary.php existe, mais l'erreur suivante se produit lors de l'exécution:
Warning: include(myLibrary.php): failed to open stream: No such file or directory
À l'heure actuelle, vous vérifiez les paramètres du chemin:
echo get_include_path();
La sortie est:
/var/www/html/libs
Cela signifie que le chemin est bien défini correctement, mais pourquoi le fichier n'est-il pas toujours trouvé?
Il existe plusieurs raisons courantes pour lesquelles set_include_path () ne fonctionne pas après le réglage:
Si vous le remplacez accidentellement quelque part après le réglage, inclut_path , par exemple:
set_include_path('/var/www/html/libs');
// Autres codes...
set_include_path('.');
Les paramètres suivants écraseront le chemin précédent, de sorte que le chemin précédemment défini ne fonctionnera pas.
Solution :
Lorsque vous ajoutez un chemin, utilisez Path_separator pour épisser le chemin d'origine:
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
Même si le chemin est défini correctement, si PHP n'a pas l'autorisation d'accéder au répertoire ou au fichier, il entraînera l'échec.
Solution :
Confirmez que les autorisations du répertoire cible et des fichiers sont lisibles pour les utilisateurs de PHP (généralement www-data ou apache).
chmod -R 755 /var/www/html/libs
Dans certaines configurations de serveur, Open_Basedir peut restreindre PHP pour accéder uniquement aux répertoires spécifiques, ce qui entraînera une mise en place des fichiers d'autres chemins de chemin, même si l'inclusion_path est définie.
Solution :
Vérifiez l'élément de configuration Open_Basedir dans php.ini :
open_basedir = /var/www/html/:/tmp/
Vous devez vous assurer que le chemin d'inclusion que vous définissez / var / www / html / libs est inclus dans la plage admissible.
C'est le problème le plus fondamental mais le plus simple à ignorer. Par exemple, les erreurs de cas de nom de fichier, l'orthographe du chemin est incorrect, etc. Dans les systèmes Linux, MyLibrary.php et MyLibrary.php sont deux fichiers différents.
Supposons que vous souhaitiez inclure un fichier situé dans /var/www/html/libs/fonctions.php , et votre code est dans /var/www/html/public/index.php , vous pouvez le définir comme ceci:
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
include 'functions.php';
Une meilleure approche consiste à utiliser des chemins relatifs en combinaison avec __dir__ pour éviter les problèmes lorsque le chemin du déploiement change:
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ . '/../libs');
include 'functions.php';
Ou utilisez SPL_autoload_register () pour gérer uniformément le chargement automatique des fichiers de classe:
spl_autoload_register(function ($class) {
include $class . '.php';
});
Et définissez le répertoire de recherche avec set_include_path () :
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/html/libs');
Pour confirmer les chemins que PHP recherche, vous pouvez imprimer get_include_path () Lorsqu'une erreur se produit et utiliser stream_resolve_include_path () pour afficher les résultats de recherche réels:
echo stream_resolve_include_path('functions.php');
Cela peut vous aider à déterminer rapidement si le chemin n'est pas défini ou si le fichier lui-même n'existe pas.
Le réglage inclut_path ne fonctionne pas, et il est souvent causé par des problèmes tels que l'écrasement des chemins, les autorisations insuffisantes, les restrictions de configuration ou les erreurs d'orthographe. La clé pour résoudre ce type de problème est:
Utilisez get_include_path () + path_separator pour ajouter des chemins de temps au lieu d'écraser;
Assurez-vous que le chemin du fichier cible est correct et que les autorisations sont lisibles;
Vérifiez si la configuration du serveur a des chemins d'accès restreints;
Utilisez des fonctions de débogage telles que Stream_Resolve_include_Path () pour aider au diagnostic.
Après avoir maîtrisé ces compétences, vous pouvez mieux utiliser l'inclusion_path pour améliorer la modularité et la maintenabilité de votre code, ce qui rend votre structure de projet PHP plus claire et plus flexible.
Pour plus d'exemples ou les meilleures pratiques de gestion des ressources, visitez: https://gitbox.net/php-resources