Maison développement back-end tutoriel php PHP : exiger et inclure les problèmes de chemin

PHP : exiger et inclure les problèmes de chemin

Jun 25, 2017 am 10:35 AM
include php require 路径 问题

FILE est une variable prétraitée qui est traitée avant l'exécution et qui a été remplacée avant que le fichier ne soit inclus.
Le contenu du fichier requis par include est traité au moment de l'exécution, et son code est exécuté dans l'espace du include file, un chemin relatif, par rapport au fichier inclus .

1 Chemin absolu, chemin relatif et chemin indéterminé

Chemin relatif

Le chemin relatif fait référence au chemin commençant par ., tel que

./a / a.php (par rapport au répertoire courant)
../common.inc.php (par rapport au répertoire de niveau supérieur),

chemin absolu

Le le chemin absolu commence par / ou Windows C:/ similaire au chemin commençant par la 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

Chemin indéterminé

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

a/a.php
common.inc.php,

Au début, je pensais qu'il s'agissait aussi d'un chemin relatif, mais dans le mécanisme include/require de PHP, ce type de chemin est géré complètement différemment des chemins relatifs commençant par . require './a.php' et require 'a.php' sont différents !

Ce qui suit analyse les méthodes de traitement de ces trois types de chemins d'inclusion : 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éfini dans php.ini, ou utilisez set_include_path(...) paramètre) pour trouver le fichier dans le programme.

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 encore une fois La discussion suivante concerne le cas d’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 dans l'analyse d'inclusion, quel que soit le nombre de niveaux d'imbrication inclus, ce répertoire de référence est. l'exécution du programme Le répertoire où se trouve le fichier d'entrée .

Exemple 1

A définit require './b/b.php'; // puis B=[SITE]/app/test/b/b.php
B Définition require './c.php'; // Alors C=[SITE]/app/test/c.php n'est pas [SITE]/app/test/b/c.php

Exemple 2

A définit require './b/b.php'; // Puis B=[SITE]/app/test/b/b.php
B définit require '.. /c. php'; // Alors C=[SITE]/app/c.php n'est pas [SITE]/app/test/c.php

Exemple 3

Défini dans A require '../b.php'; //Puis B=[SITE]/app/b.php
Défini dans B require '../c.php'; //Puis C= [SITE] ]/app/c.php n'est pas [SITE]/c.php

Exemple 4 :

A définit require '../b.php' / / Alors B=[SITE]/app/b.php
Require './c/c.php' est défini dans B // Alors C=[SITE]/app/test/c/c.php Non [SITE]/app/c/c.php

Exemple 5

A définit require '../inc/b.php'; [SITE]/app/inc/b.php
B définit require './c/c.php'; // Alors C toujours =[SITE]/app/test/c/c.php Non [SITE] /app/inc/c/c.php

Exemple 6

A définit require '../inc/b.php'; // Alors B=[ SITE]/app/inc/b.php
B nécessite require './c.php'; // Alors C=[SITE]/app/test/c.php n'est pas [SITE]/ app/inc/ c.php

3. Chemin absolu

Le chemin absolu est relativement simple et moins susceptible de provoquer des confusions et des erreurs require|inclue correspond au fichier sur le disque. .

require '/wwwroot/xxx.com/app/test/b.php'; // Sous Linux
require 'c:/wwwroot/xxx.com/app/test/b.php' ; // Sous 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 égal au chemin absolu du fichier PHP où cette instruction est écrite. Par conséquent, dirname(FILE) pointe toujours vers le chemin absolu du fichier PHP où cette instruction est écrite. Cela n'a rien à voir avec le fait que ce fichier soit inclus et. utilisé par d'autres fichiers.

Exemple 1

A définit require '../b.php'; FILE).'/c.php'; // Alors B=[SITE]/app/c.php

Exemple 2

Define require '../inc/b.php'; in A php'; // Alors B=[SITE]/app/inc/c.php est toujours dans le même répertoire que B

Conclusion : peu importe si B est inclus et utilisé par A, ou directement accessible

B if require dirname(FILE).'/c.php' // fait toujours référence au c.php; fichier dans le même répertoire que B;

B if require dirname(FILE). '/../c.php'; // Référencez toujours le fichier c.php dans le répertoire parent du répertoire où se trouve le fichier B. found;
B if require dirname(FILE).'/c/c.php'; // Alors faites toujours référence au fichier c.php dans le sous-répertoire c du répertoire où se trouve le fichier B

4. Chemin indéterminé

Utilisez d'abord les inclusions définies dans include_path un par un pour épisser [chemin indéterminé]. Si un fichier existant est trouvé, il inclura une sortie réussie. introuvable, utilisez le répertoire où se trouve le fichier php qui exécute l'instruction require pour séparer le chemin complet composé de [chemin indéterminé] pour trouver le fichier Si le fichier existe, cela signifie une sortie réussie, sinon cela signifie l'inclus. le fichier n'existe pas et 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 le La meilleure solution est d'utiliser le "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 définir une fonction générale import.php , réglez-le sur "importer automatiquement les fichiers à l'avance", dans Effectuer la configuration suivante dans php.ini

Modifier l'élément de configuration (obligatoire) auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"

Modifier l'élément de configuration (facultatif) allow_url_include = On

import Le contenu de .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 utiliser la fonction import() pour exiger le fichier. Peu importe le nombre de niveaux de "répertoires de référence" qu'il contient, il s'agit du fichier actuel

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

See all articles