par longnetpro
Citation :
Le chemin d'inclusion en PERL et PHP a toujours été un problème difficile, principalement lié au système d'exploitation et au serveur WEB. Il est impossible de résoudre ce problème de chemin de manière très intelligente. Comparé à PERL, le chemin PHP est bien meilleur et beaucoup plus facile à résoudre, car le chemin relatif de PHP peut être utilisé à tout moment dans un programme PHP, contrairement à PERL où des chemins absolus doivent être utilisés dans certaines instructions, ce qui conduit à une transplantation extrêmement complexe. .
Sur cette base, en PHP, j'ai conçu une solution absolument solide, comme décrite ci-dessous.
en principe:
Utilisez des chemins relatifs, mais utilisez des chemins absolus dans les chemins relatifs (un peu compliqué, expliqué en détail plus tard). Deuxièmement, il peut être facilement modifié. Troisièmement, il est formulé avec une structure claire et facile. pour s'étendre.
Étapes détaillées :
1. Déterminez d'abord le répertoire racine d'un programme. Notez qu'il se trouve sous le système de fichiers, et non dans le répertoire virtuel sous le serveur WEB. Cependant, généralement le chemin relatif du sous-répertoire sous le répertoire est le même que le sous-répertoire virtuel sous le. URL de.
2. Créez un fichier settings.php dans chaque sous-répertoire sous le répertoire racine du programme défini (en fait, pas nécessairement tous, selon les besoins), et définissez-y une variable ou une constante (les constantes sont meilleures car la portée est plus grande), comme APPROOT, mais cet APPROOT n'est pas un chemin absolu, mais un chemin relatif du répertoire par rapport au répertoire racine du programme que vous avez spécifié.
3. Écrivez require_once('settings.php'); dans la première phrase de tous les fichiers d'entrée de programme dans ce répertoire (c'est-à-dire le premier fichier contenant d'autres fichiers ou des fichiers permettant une navigation directe dans le navigateur, mais s'il vous plaît) ; notez qu'il est préférable de ne pas ajouter cette phrase à tous les fichiers inclus - en fait, vous pouvez l'ajouter, car vous pouvez écrire if(!défini(APPROOT)) définir(APPROOT, '../. .'); Ce type de déclaration empêche toute redéfinition.
4. Si vous souhaitez inclure d'autres fichiers, que ce soit directement ou indirectement, vous pouvez écrire include(APPROOT.$path);, où $path est le chemin absolu du fichier inclus par rapport au répertoire racine du programme que vous spécifiez.
principe:
Le répertoire racine du programme déterminé est un chemin relatif, mais l'emplacement du répertoire spécifique est un chemin absolu par rapport à ce répertoire racine. La combinaison des deux est le chemin relatif du fichier spécifique par rapport au répertoire racine du programme. Par exemple, le répertoire c:wwwrootapp est le répertoire racine du programme que vous avez spécifié, puis il y a deux fichiers c:wwwrootappaindex.php et c:wwwrootappbinc.php . Pour le sous-répertoire a, APPROOT est '..', et pour le répertoire racine du programme, le chemin absolu de inc.php est $path='/b/inc.php', et la combinaison des deux est '../b /inc.php'. Si vous souhaitez inclure inc.php dans index.php, vous devez écrire include('../b/inc.php');, et ce chemin n'est-il pas simplement le chemin APPROOT.$ qui vient d'être combiné ?
en conclusion:
Après le traitement ci-dessus, chaque chemin est absolument soigné et uniforme. La seule chose qui est un peu lourde est que l'APPROOT doit être défini dans chaque répertoire, mais il ne doit être défini qu'une seule fois dans le settings.php de ce répertoire dans chaque. annuaire. Si l'ensemble de votre programme n'a qu'un seul fichier d'entrée, tel que index.php, et que tous les autres fichiers sont directement ou indirectement inclus dans ce seul fichier d'entrée, il vous suffit d'ajouter settings.php dans le répertoire où se trouve index.php Define. une fois et c'est OK. Si un ami a réalisé un projet Delphi et étudié les fichiers du projet, il constatera que la situation que je viens de mentionner, à savoir qu'un programme n'a qu'un seul fichier d'entrée principal, est très similaire au projet Delphi, car Delphi n'a qu'un seul fichier de programme principal (dpr file), les autres sont tous des fichiers unité ou des fichiers de ressources et ne peuvent pas être exécutés indépendamment. En PHP, si cette situation se produit, vous n'avez besoin de définir APPROOT qu'une seule fois et d'écrire require_once('settings.php'); dans la première phrase du fichier programme principal, et toutes les inclusions suivantes peuvent utiliser include(APPROOT.$ path) ;, il est garanti qu'il n'y aura aucun problème, à moins que vous n'écriviez ceci "inclut le chemin absolu du fichier par rapport au répertoire racine du programme" $path.
J'ai utilisé cette méthode plus d'une fois, avec de bons résultats. De plus, vous pouvez également vous référer à la façon dont le chemin est défini dans WEB-INFO de JSP.
Il s’agit d’un plan formel qui reste inchangé en réponse aux changements en constante évolution. Si quelqu’un a un meilleur plan, n’hésitez pas à en discuter ! S’il y a quelque chose que vous ne comprenez pas, n’hésitez pas à le demander.