9
votes

PHP inclut le travail dans un sous-répertoire

OK, je crée une interface administrative pour mon blog personnalisé à l'URL / admin.

est-il possible que je puisse utiliser le même inclut (y compris AutoLoad), en tant que répertoire racine.

Si possible, j'aimerais également pouvoir corriger automatiquement les liens de la navigation afin qu'ils vont d'index.php dans / changements à ../index.php lors de votre accès à / admin.

Merci, Nico


0 commentaires

4 Réponses :


20
votes

La meilleure pratique pour cela est de définir une constante «absolue_path» qui contient le répertoire que tout est situé sous. Après cela, vous pouvez simplement copier et coller tout, car il définit le chemin «complet», qui ne passe pas du répertoire en répertoire au répertoire.

Exemple P>

include(ABS_PATH . "/path/to/file");


2 commentaires

Ah, mais comment puis-je découvrir ce que ce chemin devrait être?


Vous voulez probablement jeter un coup d'œil à PHP Info pour une variable de serveur ou de le définir vous-même. Si vous le définissez vous-même, assurez-vous qu'il est le répertoire que tous les fichiers tombent sous.



3
votes

La manière la plus simple serait d'utiliser des chemins / URL absolus.

Pour les URL, définissez une constante / variable quelque part, qui pointe vers la racine de votre application, comme: p> xxx pré >

ou p> xxx pré>

et utilisez-le dans chaque lien, comme: p> xxx pré>

de cette façon, toujours ok ( et le jour où vous installez votre projet sur un autre serveur ou dans un sous-répertoire, vous n'avez qu'une constante / variable à modifier, et tout fonctionne toujours) p>

pour inclut / nécessite toujours des chemins absolus aussi; Une solution consiste à utiliser dirname code> , comme ceci: p>

include dirname(__FILE__) . '/my_file.php';
include dirname(__FILE__) . '/../my-other-file.php';


1 commentaires

Les traces ABS vous ralent-ils? Dis si vous ne gardez pas simplement vos liens hétéro, mais dans le flux de programme.



0
votes

Une autre réponse serait similaire à la combinaison des deux premières suggestions. Vous pouvez définir la constante: xxx

puis, en supposant que config.php doit être inclus dans de nombreux fichiers du site, vous pouvez utiliser la déclaration suivante pour accomplir Ceci: xxx

espère que cela aide.


0 commentaires

0
votes

Une autre option que j'ai utilisée pour les fonctions.php dans le passé est un autochargeur de classe.

//Class Autoloader
spl_autoload_register(function ($className) {

    $className = strtolower($className);
    $path = "includes/{$className}.php";

    if (file_exists($path)) {

        require_once($path);

    } else {

        die("The file {$className}.php could not be found.");

    }
});


0 commentaires