2009-10-28 5 views
0

j'ai deux fichiers: (localhost/template /)PHP include fichier

index.php 
template.php 

chaque fois que je crée un article (un système d'article est ce que je suis en train de le faire), je crée un dossier et alors je copie le index.php dans ce dossier. Je veux inclure le modèle php dans index.php mais comme une URL statique (parce que les articles seront comme un dossier-sous-dossier/sous-dossier/.. structure)

J'ai essayé: include('localhost/template/template.php') sans résultat. comment dois-je l'inclure? merci

Répondre

4

Vous pouvez l'inclure par rapport au répertoire courant, comme ceci:

require_once(dirname(__FILE__) . '/template.php'); 

dirname (FICHIER) se traduira dans le répertoire du script en cours (index.php) et la ligne ci-dessus ajoute '/template.php', ce qui donne le chemin complet du template.php côte à côte vers le fichier index.php.

Je trouve préférable d'inclure les fichiers de cette façon par rapport à un chemin d'accès complet pour éviter les problèmes avec le chemin de recherche PHP, par exemple. C'est très explicite de cette façon.

MISE À JOUR: J'ai mal compris la question initiale. Il semble que template.php ne soit pas copié, seul index.php l'est. Ainsi, vous aurez quelque chose qui pourrait ressembler à:

template/template.php 
template/index.php (just a template) 
foo/bar/index.php 
foo/bar2/index.php 

Puisque les gens peuvent frapper le foo/bar/index.php par exemple sans canalisant via un script central, vous devrez trouver en quelque sorte le modèle, peu importe là où tu es.

Vous pouvez le faire en réglant le include_path PHP, par exemple par un .htaccess sur un serveur Apache:

php_value include_path ".:/home/<snip>/template" 

Ensuite, dans chaque index.php vous pouvez inclure template.php et rechercherons la répertoire en cours, puis essayez votre répertoire de modèles.

Vous pouvez également calculer le chemin relatif lors de la copie du script et y inclure un numéro de '..' pour sortir (par exemple '../../template/template.php'). C'est un peu fragile, cependant.

+1

N'auriez-vous pas à ajuster ce chemin chaque fois que vous faites la copie? Pour moi, cette solution ne semble pas très différente de la simple inclusion d'un chemin relatif en premier lieu. – Svish

+0

Il est déterminé au moment de l'exécution, vous n'avez donc pas besoin de le modifier lorsque vous copiez le répertoire. Lors de l'exécution, il calcule le fichier en cours, supprime le nom de fichier et ajoute template.php à la fin. C'est la manière la plus résiliente et explicite d'inclure/exiger un fichier en PHP je crois. – wojo

+0

ok, mais mes fichiers index.php seront créés dynamiquement ... donc je pourrais avoir une structure de dossiers comme celle-ci "articles/article_1/subfolder/index.php" et mon dossier de template sera au même niveau que "articles" dossier – kmunky

0

Le chemin semble incorrect, vous devez l'inclure avec un chemin relatif à l'emplacement du fichier appelant, par ex. include('template/template.php'); ou include('../template/template.php');

5

La méthode include fonctionne sur le chemin du système de fichiers, pas sur le "chemin d'URL". La solution consiste à

  • Donnez-lui un chemin absolu.
    - include('/some/path/to/template.php');

  • Modifiez le chemin relatif afin qu'il soit correct après chaque copie que vous créez.
    - include('../../template.php');

  • Modifier la include path de PHP afin que le fichier est bien, le chemin d'inclusion.
    - Peut se faire soit dans le fichier php.ini, dans le fichier .htaccess ou avec le set_include_path function.(En fonction du montant pour lequel vous voulez le configurer et de ce pour quoi vous avez l'autorisation)

1

Vous ne voulez pas "localhost" dedans. Inclut le travail utilisant le chemin réel sur votre serveur. Ainsi, vous pouvez utiliser soit ceux relatifs à l'affichage ci-dessus, soit l'absolu en termes de serveur, ce qui pourrait être "/ opt/www /" sous Linux ou "c: \ Program Files \ Apache \ htdocs" sous Windows. Ce sera différent d'un système à l'autre afin de trouver le vôtre utiliser la technique dirname(__FILE__) montré par wojo.

+0

'dirname (__ FILE __)' ne vous amènera pas vraiment où '.' ne pourra pas vous atteindre (à moins que j'aie mal compris quelque chose). – Svish

1

Si vous essayez d'inclure le fichier en tant qu'URL, vous devez le démarrer avec http:// et définir allow_url_include sur true dans les paramètres PHP. Ceci est fortement déconseillé car il ouvre des portes pour les failles de sécurité. Au lieu de cela, vous devez ajouter localhost/template à votre chemin d'inclusion ou utiliser des URLs comme ('../template.php').

+0

"Ceci est fortement déconseillé car il ouvre des portes pour les failles de sécurité." **effectivement** – KyleFarris