Maison > développement back-end > Problème PHP > Que dois-je faire si le répertoire relatif en php ne peut pas être ouvert ?

Que dois-je faire si le répertoire relatif en php ne peut pas être ouvert ?

藏色散人
Libérer: 2023-03-17 15:24:01
original
5856 Les gens l'ont consulté

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.

Que dois-je faire si le répertoire relatif en php ne peut pas être ouvert ?

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

1 Chemins absolus, chemins relatifs et chemins indéterminés

Chemins relatifs

Les chemins relatifs font référence aux chemins commençant par ., tels que

./a/a.php (相对当前目录)    
../common.inc.php (相对上级目录),
Copier après la connexion

Chemins absolus

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
Copier après la connexion

Chemin indéterminé

Tout chemin qui ne commence pas par ou /, ni par la lettre du lecteur Windows :/, comme

a/a.php  
common.inc.php,
Copier après la connexion

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.

Description de l'environnement de test

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.

2. Chemin relatif :

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
Copier après la connexion

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
Copier après la connexion

Exemple 3

A中定义  require '../b.php';   //则B=[SITE]/app/b.php 
B中定义  require '../c.php';   //则C=[SITE]/app/c.php  不是 [SITE]/c.php
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

3.

Les chemins absolus sont relativement simples et il n'est pas facile de faire des erreurs . require|inclue correspond au fichier sur le disque.

require '/wwwroot/xxx.com/app/test/b.php';    // Linux中
require 'c:/wwwroot/xxx.com/app/test/b.php';  // windows中
Copier après la connexion
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 1

A中定义  require '../b.php';                  // 则B=[SITE]/app/b.php
B中定义  require dirname(__FILE__).'/c.php';  // 则B=[SITE]/app/c.php
Copier après la connexion
Exemple 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在同一个目录
Copier après la connexion
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文件;
Copier après la connexion
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');
Copier après la connexion
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
Copier après la connexion

Le contenu de import.php est le suivant

function import($path) {    
    $old_dir = getcwd();        // 保存原“参照目录”
    chdir(dirname(__FILE__));    // 将“参照目录”更改为当前脚本的绝对路径
    require_once($path);
    chdir($old_dir);            // 改回原“参照目录”
}
Copier après la connexion

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 PHP

"

Ce 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal