Maison > Article > développement back-end > Que dois-je faire si le répertoire relatif en php ne peut pas être ouvert ?
Solution au répertoire relatif PHP qui ne peut pas être ouvert : 1. Utilisez le "chemin absolu" ; 2. Définissez une fonction générale import.php, définissez-la sur "importer automatiquement les fichiers à l'avance" et modifiez le contenu dans php.ini comme suit. suit "auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"" suffit.
L'environnement d'exploitation de ce tutoriel : système Windows 7, PHP version 8.1, ordinateur Dell G3.
Le répertoire relatif php ne peut pas être ouvert ? Résumé des problèmes de chemin require et include en PHP
Les chemins relatifs font référence aux chemins commençant par ., tels que
./a/a.php (相对当前目录) ../common.inc.php (相对上级目录),
Les chemins absolus commencent par / Ou C:/ sous Windows, un chemin similaire commençant par une lettre de lecteur, le chemin complet peut déterminer de manière unique l'adresse finale du fichier sans aucun chemin de référence. Par exemple,
/apache/wwwroot/site/a/a.php c:/wwwroot/site/a/a.php
Tout chemin qui ne commence pas par ou /, ni par la lettre du lecteur Windows :/, comme
a/a.php common.inc.php,
Au début, je pensais que c'était aussi un chemin relatif, mais dans le mécanisme d'inclusion include/require de php , ce type de chemin est complètement différent du traitement de chemin relatif commençant par . require './a.php' et require 'a.php' sont différents !
Analysons comment ces trois types de chemins d'inclusion sont traités : Tout d'abord, rappelons une conclusion : si le chemin d'inclusion est un chemin relatif ou un chemin absolu, il n'ira pas vers include_path (la variable d'environnement include_path définie dans php.ini , ou dans le programme Utilisez set_include_path(...) pour trouver le fichier.
Remarque : La discussion et la conclusion suivantes sont basées sur cet environnement : Supposons que A=http://www.xxx.com/app/test/a.php, soulignez à nouveau que la discussion suivante est pour un accès direct à A.
Le chemin relatif nécessite un répertoire de référence pour déterminer le chemin final du fichier lors de l'analyse d'inclusion, quel que soit le nombre de niveaux d'imbrication inclus, ce répertoire de référence est le. répertoire où se trouve le fichier d'entrée d'exécution du programme .
Exemple 1
A中定义 require './b/b.php'; // 则B=[SITE]/app/test/b/b.php B中定义 require './c.php'; // 则C=[SITE]/app/test/c.php 不是[SITE]/app/test/b/c.php
Exemple 2
A中定义 require './b/b.php'; // 则B=[SITE]/app/test/b/b.php B中定义 require '../c.php'; // 则C=[SITE]/app/c.php 不是 [SITE]/app/test/c.php
Exemple 3
A中定义 require '../b.php'; //则B=[SITE]/app/b.php B中定义 require '../c.php'; //则C=[SITE]/app/c.php 不是 [SITE]/c.php
Exemple 4:
A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require './c/c.php'; / /则C=[SITE]/app/test/c/c.php 不是 [SITE]/app/c/c.php
Exemple 5
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require './c/c.php'; // 则C还是=[SITE]/app/test/c/c.php 不是 [SITE]/app/inc/c/c.php
Exemple 6
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require './c.php'; // 则C=[SITE]/app/test/c.php 不是 [SITE]/app/inc/c.php
require '/wwwroot/xxx.com/app/test/b.php'; // Linux中 require 'c:/wwwroot/xxx.com/app/test/b.php'; // windows中dirname(__FILE__) est également calculé comme un répertoire sous la forme d'un chemin absolu, mais veuillez noter que __FILE
__ est une constante magique, qui est égale au chemin absolu du fichier php où cette instruction est écrite à tout moment, donc dirname(__FILE__) pointe toujours vers le chemin absolu du fichier php où cette instruction est écrite, et n'a rien à voir avec le fait que le fichier soit inclus et utilisé par d'autres fichiers.
Exemple 1A中定义 require '../b.php'; // 则B=[SITE]/app/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/c.phpExemple 2
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录Conclusion : peu importe que B soit inclus et utilisé par A, ou directement accessible
B如果 require dirname(__FILE__).'/c.php'; // 则始终引用到跟B在同一个目录中的 c.php文件; B如果 require dirname(__FILE__).'/../c.php'; // 则始终引用到B文件所在目录的父目录中的 c.php文件; B如果 require dirname(__FILE__).'/c/c.php'; // 则始终引用到B文件所在目录的c子目录中的 c.php文件;4 Chemin indéterminéTout d'abord, utilisez les répertoires d'inclusion définis dans include_path pour les séparer un par. un [Inconnu Déterminer le chemin], si un fichier existant est trouvé, il inclura une sortie réussie. S'il n'est pas trouvé, utilisez le répertoire où se trouve le fichier php qui exécute l'instruction require pour diviser le chemin complet composé de [. chemin indéterminé] pour trouver le fichier. Si le fichier existe, il inclura une sortie réussie, sinon cela signifie que le fichier inclus n'existe pas et qu'une erreur se produit. Les chemins indéterminés sont faciles à confondre et ne sont pas recommandés. 5. SolutionÉtant donné que le "répertoire de référence" dans
"chemin relatif" est le répertoire où se trouve le fichier d'entrée d'exécution, le chemin "indéterminé" est également plus facile à confondre, donc la meilleure solution est de utilisez " Chemin absolu" ; Par exemple, le contenu de b.php est le suivant Peu importe où b.php est requis, le chemin de b.php est utilisé comme référence pour exiger c.php $dir = dirname(__FILE__);
require($dir . '../c.php');
ou un. la fonction générale import.php est définie et réglée sur "Importer automatiquement les fichiers à l'avance" et effectuez la configuration suivante dans php.ini
更改配置项(必须)auto_prepend_file = "C:\xampp\htdocs\auto_prepend_file.php" 更改配置项(可选)allow_url_include = On
Le contenu de import.php est le suivant
function import($path) { $old_dir = getcwd(); // 保存原“参照目录” chdir(dirname(__FILE__)); // 将“参照目录”更改为当前脚本的绝对路径 require_once($path); chdir($old_dir); // 改回原“参照目录” }
De cette façon, vous pouvez utilisez la fonction import() pour exiger le fichier, quel que soit le nombre de niveaux de « répertoires de référence » qu'il contient. Fichier actuel
Apprentissage recommandé : "
Tutoriel vidéo PHPCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!