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中
__ 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.php
A中定义 require '../inc/b.php'; // 则B=[SITE]/app/inc/b.php B中定义 require dirname(__FILE__).'/c.php'; // 则B=[SITE]/app/inc/c.php 始终跟B在同一个目录
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文件;
"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');
更改配置项(必须)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!