web-dev-qa-db-fra.com

PHP, Comment définir le chemin d'inclusion

J'ai écrit:

include('a.php')
include('b.php')

etc. dans mon script à inclure pour utiliser les fonctions a() et b(). Cela devient assez fastidieux. Existe-t-il un moyen de définir le chemin d’un répertoire et d’y avoir plusieurs fichiers accessibles par un script?

  1. J'ai essayé ceci dans mon script:

    set_include_path('.;C:\xampp\htdocs\myfunctionfolder');
    
  2. Et j'ai défini une variable d'environnement, PATH, pour qu'elle soit plus ancienne.

  3. J'ai aussi modifié php.ini pour inclure

    include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder"
    

Si j'ai beaucoup de fichiers dedans, comment puis-je accéder à ces fichiers sans avoir à les inclure individuellement? La définition de la variable d'environnement fonctionne définitivement dans la commande Invite.

Dois-je faire autre chose pour que les fichiers .php soient accessibles collectivement dans un répertoire?

11
musicliftsme

La pratique courante est d'avoir un fichier "common.php" ou "includes.php" qui inclut les appels include/include_once (par souci de simplicité). par exemple.

  • root
  • [lib]
    • a.php
    • b.php
    • includes.php
  • index.php

Alors includes.php contient:

<?php
  include_once('a.php');
  include_once('b.php');
?>

Ensuite, dans n'importe quel script, il suffit d'inclure le fichier includes.php.

Cependant , pour répondre à votre question initiale, vous ne pouvez inclure qu'un fichier à la fois, par appel. Vous pouvez utiliser quelque chose comme opendir et readdir pour parcourir tous les fichiers d'un répertoire spécifique et les inclure tels quels (automatisés) ou écrire chacun pour vous-même en fonction des fichiers que vous créez.

En outre, tout ce que fait le chemin d’inclusion est un chemin à définir lorsqu’un appel include est effectué. Ce n'est pas un répertoire où les fichiers devraient être automatiquement chargés (ce qui est l'impression que je reçois de votre message).

12
Brad Christie

La définition de include_path n'inclura pas tous les fichiers de ce répertoire. Elle ajoute uniquement ce répertoire à la liste que PHP recherchera lors de l'inclusion d'un fichier.

Spécifie une liste de répertoires dans lesquels les fonctions require (), include (), fopen (), file (), readfile () et file_get_contents () recherchent des fichiers.

La source

Cela simplifierait l'inclusion de fichiers dans une structure profonde ou dans une section complètement différente du système de fichiers.

include('/var/somewhere/else/foo.php');

Avec /var/somewhere/else/ ajouté au php.ini, include_path pourrait devenir

include('foo.php');

De plus, comme d'autres l'ont souligné, il existe des pratiques communes, mais vous pouvez vous pencher sur OOPHP et classes de chargement automatique . Cela ne fonctionnera pas pour les fonctions que je connais.

De nombreux développeurs écrivant des applications orientées objet créent un fichier source PHP par classe. L’un des plus gros ennuis est de devoir écrire une longue liste d’inclusions nécessaires au début de chaque script (une pour chaque classe).

Dans PHP 5, ceci n'est plus nécessaire. Vous pouvez définir une fonction __autoload qui est appelée automatiquement au cas où vous essayez d'utiliser une classe/interface qui n'a pas encore été définie. En appelant cette fonction, le moteur de script dispose d'une dernière chance de charger la classe avant que PHP n'échoue avec une erreur.

6
Paul DelRe

voir cette question:

Comment inclure () tous les PHP fichiers d'un répertoire?

En outre, en termes de meilleures pratiques, vous pouvez inclure plusieurs fonctions dans le même fichier si elles sont liées, et je suggérerais également de donner des noms plus descriptifs de vos fonctions et fichiers. Par exemple, si vos fonctions a() et b() sont liées à la validation par exemple, nommez votre fichier validation.php et mettez-y les deux fonctions, puis essayez de les renommer. quelque chose qui est lié à ce qu'ils font. Cela vous permettra de vous rappeler ce qu’ils font quand vous commencez à accumuler une liste énorme de fonctions;)

3
Evan

L'analyseur PHP est assez efficace - vous perdrez beaucoup plus de temps à charger une tonne de fichiers individuels au lieu d'un (ou de plusieurs) fichiers monolithiques de plus. Cependant, si vous tenez à ce que les choses restent séparées, vous POUVEZ créer des fichiers méta-inclus pour charger des ensembles de fichiers individuels. Vous n'incluez donc qu'un seul fichier méta-inclus, et le reste pour vous:

meta.php:

include('a.php');
include('p.php');
...
include('z.php');

Et puis vous faites simplement:

<?php

include('meta.php');

dans vos scripts et vous avez tous les individuels chargés pour vous.

2
Marc B

J'ai une fonction comme celle-ci dans la plupart de mes projets:

function appendToIncludePath($path)
{
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR);
}
2
Bob_Gneu

Télécharger le dernier PHP Zip et extraire sur le lecteur C, puis télécharger Composer et l'installer. Pendant l'installation, il demande le chemin PHP. Il suffit donc de sélectionner le chemin extrait PHP.

Comme suit l'étape ci-dessous.

  1. Allez à Computer.

  2. Sélectionnez Advance System Settings.

  3. Dans les propriétés du système, sélectionnez Environmental Varaibles.
  4. Dans Environmental Varaibles, ajoutez Path dans la variable utilisateur pour PCNAME.
  5. Dans Environmental Varaibles, ajoutez Path dans les variables système.
  6. Hit OK.
  7. Redémarrez le PC.
  8. Win + R tapez cmd.
  9. tapez la commande php -v.
  10. Vola tu vas bien aller.

PHP http://php.net/downloads.php

Compositeur https://getcomposer.org/download/

0
Vrushal Raut
include __DIR__ . '/../folder1/folder2/folder3/Target.php';
include __DIR__ . '/../folder1/folder2/Target.php';

Cela vous aide à emprunter n'importe quel chemin.

0
RENFiX