Question

Je peux définir le chemin d'inclusion PHP dans le php.ini:

include_path = /path/to/site/includes/

Mais d’autres sites Web sont alors affectés, ce qui ne sert à rien.

Je peux définir l'inclusion PHP au début de chaque fichier :

$path = '/path/to/site/includes/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Mais cela semble être une mauvaise pratique et encombre les choses.

Je peux donc en faire une inclusion, puis l'inclure dans chaque fichier :

include 'includes/config.php';

ou

include '../includes/config.php';

C'est ce que je fais en ce moment, mais le chemin d'inclusion de config.php changera en fonction de ce qui l'inclut.

Existe-t-il une meilleure façon ?Est-ce que ça importe?

Était-ce utile?

La solution

Si vous utilisez Apache comme serveur Web, vous pouvez remplacer (si vous l'autorisez) les paramètres en utilisant .htaccess des dossiers.Voir le manuel PHP pour plus de détails.

En gros, vous mettez un fichier appelé .htaccess à la racine de votre site Web, qui contient du PHP ini valeurs.À condition que vous ayez configuré Apache pour autoriser les remplacements, ce site utilisera toutes les valeurs de votre configuration PHP, + les valeurs que vous spécifiez dans le .htaccess déposer.

Peut être utilisé uniquement avec PHP_INI_ALL et PHP_INI_PERDIR directives de type

comme indiqué dans la page que j'ai liée.Si vous cliquez sur la liste complète, vous voyez que le chemin d'inclusion est un PHP_INI_ALL directif.

Autres conseils

Erik Van Brakel a donné, à mon humble avis, l'une des meilleures réponses.

De plus, si vous utilisez des hôtes Apache et virtuels, vous pouvez y configurer des inclusions directement.En utilisant cette méthode, vous n'aurez pas à penser à laisser les commandes php_admin dans votre .htaccess.

Utiliser un php.ini fichier sur le site Web racine, si votre configuration utilise PHP comme Image de synthèse (cas le plus fréquent sur les hôtes partagés) avec la même syntaxe que celle du serveur php.ini;mettre dans .htaccess si vous avez PHP comme module Apache (faites un phpinfo() en cas de doute) :

php_value include_path "wherever"

Notez que par dossier php.ini does n'affecte pas sous-dossiers.

Pourquoi pensez-vous qu'ajouter pour inclure le chemin est une mauvaise pratique ?

Ce code situé en haut du script racine ne devrait pas être si mauvais...

$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());

À mon humble avis, le principal avantage est qu'il est portable et compatible non seulement avec Apache

MODIFIER:J'ai vu un inconvénient à cette méthode :faible impact sur les performances.voir http://www.geeksengine.com/article/php-include-path.html

Selon la configuration de votre hébergeur, vous pouvez être autorisé à placer un php.ini à la racine de votre répertoire personnel avec des directives de configuration supplémentaires.

Votre application doit avoir un fichier de configuration écrit en PHP.Incluez ensuite cela avec une page relative dans chaque page du programme.Ce fichier de configuration aura une variable pour le chemin d'accès au répertoire des inclusions, au répertoire des modèles, au répertoire des images, etc.

Vous pouvez définir include_path dans votre fichier php.ini également.Je suis un gars perl, donc je m'attends à pouvoir charger des inclusions et à avoir include faire la bonne chose.J'ai toutes mes inclusions dans un répertoire spécifique, qui est ajouté à include_path.Je peux faire des choses comme

require_once "ClassName.php";

Je n'ai pas à me soucier des chemins relatifs ou des emplacements des fichiers.

J'ai aussi écrit le mien CustomRequire faire des choses comme

function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

De cette façon, je peux modifier la façon dont je fais les inclusions à une date ultérieure.Bien sûr, vous devez toujours trouver un moyen d'inclure votre code d'inclusion :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top