Lors du développement d'applications PHP, nous devons souvent inclure des fichiers externes, tels que des fichiers de configuration, des bibliothèques de classe ou des fichiers de modèle. Afin d'améliorer la maintenabilité et la portabilité du code, il est particulièrement important de définir raisonnablement le chemin d'inclusion. get_include_path () et set_include_path () sont deux outils puissants fournis par PHP, qui permettent aux développeurs d'obtenir dynamiquement et de définir les chemins d'inclusion du script actuel. Cet article présentera comment configurer de manière flexible les chemins d'inclusion sur différents systèmes d'exploitation à l'aide de ces fonctions.
include_path est un élément de configuration dans PHP, qui définit le chemin par défaut pour trouver des fichiers lorsque l'analyse inclut , requise et autres fonctions. En définissant un chemin d'inclusion raisonnable, les chemins absolus à code dur peuvent être évités, améliorant ainsi la portabilité du programme.
Vous pouvez définir le chemin d'inclusion par défaut via php.ini , ou vous pouvez utiliser get_include_path () et set_include_path () pour fonctionner dynamiquement dans votre code.
Différents systèmes d'exploitation ont des définitions différentes des séparateurs de chemin:
Sur les fenêtres , les chemins sont séparés par des demi-colons ( ; ).
Sur les systèmes de type UNIX (tels que Linux, MacOS), les chemins sont séparés par des colons ( :) .
Par conséquent, dans le développement multiplateforme, nous devons utiliser dynamiquement le séparateur correct. PHP fournit un Path_separator constant qui peut renvoyer le séparateur correct en fonction de l'environnement en cours d'exécution.
echo PATH_SEPARATOR;
// Windows Sortir: ;
// Linux/macOS Sortir: :
Voici un exemple montrant comment définir des chemins d'inclusion de fichiers pour différents systèmes d'exploitation à l'aide de get_include_path () et set_include_path () .
Supposons que nous ayons la structure du répertoire suivant:
/project
│
├── lib/
│ └── MyLibrary.php
└── app/
└── main.php
Nous voulons inclure le fichier lib / mylibrary.php dans main.php .
<?php
// 1. Obtenez le actuel include path
$currentIncludePath = get_include_path();
// 2. Construisez un nouveau chemin
$projectRoot = dirname(__DIR__); // Hypothèses main.php exister app Dans le répertoire
$libPath = $projectRoot . '/lib';
// 3. utiliser PATH_SEPARATOR Épisser le nouveau include path
$newIncludePath = $libPath . PATH_SEPARATOR . $currentIncludePath;
// 4. En créer un nouveau include path
set_include_path($newIncludePath);
// 5. Inclure les fichiers
require_once 'MyLibrary.php';
?>
De cette façon, nous évitons les chemins à code dur et nous assurons que les séparateurs de chemin sont correctement identifiés sur tout système d'exploitation.
Stream_resolve_include_path () est une fonction pratique qui peut vérifier si elle peut être trouvée par le chemin incluant actuel avant d'inclure réellement le fichier.
$file = 'MyLibrary.php';
if ($fullPath = stream_resolve_include_path($file)) {
require_once $fullPath;
} else {
die("document $file pas trouvé。");
}
Cela empêche les erreurs mortelles causées par les erreurs de chemin.
Supposons que nous chargeons le fichier de configuration à partir d'un serveur distant (tel que https://gitbox.net/resources/config.php ) et choisissez d'inclure le fichier localement ou à distance en fonction de l'environnement différent:
<?php
$isLocal = file_exists('/path/to/local/config.php');
if ($isLocal) {
set_include_path('/path/to/local' . PATH_SEPARATOR . get_include_path());
require_once 'config.php';
} else {
include 'https://gitbox.net/resources/config.php';
}
?>
Il convient de noter que la fonction de l'introduction d'URL via inclue dépend du paramètre allow_url_include , qui est généralement désactivé dans les environnements de production.
Grâce à l'utilisation raisonnable de get_include_path () , set_include_path () et path_separator , nous pouvons atteindre la gestion de chemin compatible avec différents systèmes d'exploitation. Cela améliore non seulement la portabilité du code, mais jette également une bonne base pour la maintenance et l'expansion futures. En développement réel, il est recommandé de gérer de manière centralisée la configuration du chemin pour contrôler la logique de chargement de fichiers de l'ensemble du projet.