Lors du développement à l'aide de PHP, get_include_path () et inclure () sont deux fonctions qui apparaissent souvent ensemble. Cependant, dans certains cas, les développeurs peuvent rencontrer un problème déroutant: le chemin a été ajouté pour inclure_path, mais le fichier ne peut pas être trouvé en utilisant include () . Ce "conflit" est en fait causé par plusieurs raisons courantes. Cet article analysera et fournira des solutions une par une.
La fonction PHP Inclut () recherchera les fichiers spécifiés dans l'ordre suivant:
Utilisez des chemins relatifs (par rapport au répertoire du fichier actuel)
Trouvez le répertoire où se trouve le script actuel
Itérer sur le chemin configuré dans include_path
get_include_path () est un outil pour obtenir la configuration actuelle include_path. Vous pouvez l'utiliser pour afficher les paramètres actuels:
echo get_include_path();
Vous pouvez également modifier dynamiquement include_path via set_include_path () , par exemple:
set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/local/lib/php');
Parfois, bien que set_include_path () soit appelé, le chemin n'est pas vraiment ajouté. Les erreurs courantes sont les suivantes:
set_include_path('/some/path');
set_include_path('/another/path'); // Écraser les paramètres précédents
Solution:
Utilisez Path_Separator pour ajouter des chemins au lieu d'écraser:
set_include_path(get_include_path() . PATH_SEPARATOR . '/another/path');
Si include ('config / config.php') est appelé, PHP commencera d'abord à rechercher en fonction du répertoire de script actuel, même si config / config.php est déjà dans include_path. Si la structure du répertoire actuel est incorrecte, elle conduira également à une erreur de "fichier introuvable".
Solution:
Supprimez la partie du répertoire dans le chemin et laissez inclure_path prendre effet. Par exemple:
include('config.php'); // config.php Déjà ici include_path Sur le chemin
Même si l'inclut_path est réglé correctement, il échouera toujours si le fichier n'existe pas ou n'a pas de autorisations de lecture.
Dépannage des suggestions:
Pour vous assurer que le chemin du fichier est correct, vous pouvez essayer de le vérifier avec LS ou File_exists () sur la ligne de commande:
echo file_exists('/path/to/config.php') ? 'found' : 'not found';
Vérifiez les paramètres d'autorisation du serveur pour vous assurer que l'utilisateur PHP a des autorisations de lecture.
PHP prend en charge les fichiers distants via des URL, tels que:
include('http://gitbox.net/includes/header.php');
Cette fonction repose sur les deux éléments de configuration Allow_Url_include et Allow_URL_FOPEN , et de nombreux serveurs sont à l'état fermé par défaut.
Solution:
Activez ces paramètres dans php.ini :
allow_url_fopen = On
allow_url_include = On
Cependant, pour des raisons de sécurité, il n'est pas recommandé de permettre l'inclusion d'URL dans les environnements de production, en particulier en utilisant le protocole HTTP.
Essayez d'utiliser des chemins absolus ou utilisez la constante __dir__ pour construire des chemins relatifs.
include(__DIR__ . '/includes/config.php');
Gérer Inclure_Path Utilisez Autoload ou Framework : les cadres modernes utilisent généralement des mécanismes de chargement automatiques, tels que PSR-4, pour trouver automatiquement le chemin où se trouve le fichier de classe et éviter les erreurs d'inclusion manuelle.
Test Inclure_path Paramètres pendant la phase de déploiement : les chemins de développement et les environnements de production sont souvent différents. Il est recommandé de faire un test de chemin complet avant de se rendre en ligne.
get_include_path () n'influence pas avec include () , mais la mauvaise façon de l'utiliser leur donne l'impression qu'ils "se battent". Comprendre leur mécanisme de recherche et leur ordre de chargement est la clé pour résoudre le problème. En définissant rationnellement, incluez_path, l'écriture inclut correctement le chemin et éviter l'utilisation des URL pour inclure des fichiers distants, la robustesse et la sécurité du code peuvent être considérablement améliorées.