2 votes

Chemins d'accès lors de l'inclusion et de la demande d'AJAX

Je me demandais s'il y avait un moyen de faire un chemin relatif vers le dossier principal (où se trouve l'index.php) à partir de chaque fichier qui doit être inclus ou demandé par AJAX.

Je veux combiner AJAX et PHP include pour que la page se charge d'abord avec PHP, puis pour pouvoir rafraîchir des parties de la page avec AJAX, mais les fichiers sont les mêmes et se trouvent dans des sous-dossiers.

J'ai des problèmes avec le chemin d'accès et bien que je puisse définir un chemin d'accès absolu, je dois le modifier à chaque fois que le serveur change. Je veux un chemin relatif à l'endroit où se trouve mon projet, mais pas DOCUMENT_ROOT, car celui-ci ne fonctionne pas avec les alias. (ou savez-vous comment le faire fonctionner avec les alias ? )

Merci !

EDIT* Voici à quoi ressemble la structure de mon répertoire :

[main_dir]/index.php - le fichier d'index principal

[main_dir]/phpinc - les fichiers php include - qui ne fonctionnent qu'avec include (pas d'appel AJAX sur eux)

[main_dir]/modules - les modules sont des parties de la page, qui peuvent être incluses avec PHP ou appelées par AJAX depuis n'importe où (peu importe, elles seront chargées comme un fichier HTML individuel, de sorte que les chemins en PHP sont relatifs à l'endroit où le module est physiquement situé.

Lorsque vous les incluez dans PHP, ils prennent normalement le chemin [main_dir] (parce que index.php les a inclus).

Mon problème est donc le suivant : à partir des fichiers du module, je veux inclure certains fichiers dans le dossier phpinc, mais il pourrait s'agir de ../phpinc/file.php ou de phpinc/file.php .

Existe-t-il une méthode plus élégante que celle qui consiste à mettre un

if (is_dir("phpinc")) {
 $inc_path = "phpinc";   
} else if (is_dir("../phpinc")) {
 $inc_path = "../phpinc";
}

au début de chaque module ?

0voto

SteAp Points 5498

Je propose d'utiliser l'autoloader de PHP :

J'ai créé une classe CAutoloadManager qui possède cette méthode :

static public addRepositoryForFilePattern( String $aPath, String $sPattern ) {}

Dans le fichier index.php, j'appelle

AutoloadManager::addRepositoryForFilePattern( './actions/', 'C*Action.inc.php' );
AutoloadManager::addRepositoryForFilePattern( './includes/', '*.inc.php' );

pour demander à l'autoload d'essayer d'abord de localiser une classe dans ./actions/ pour des noms tels que CShowWelcomeAction.inc.php ou CLoginAction.inc.php. Le CAutoloadManager a recherché d'autres classes dans ./includes/.

La fonction PHP autoload() est utilisée comme suit :

function __autoload($class_name) {

    include $class_name . '.php';

}

PHP l'appelle à chaque fois qu'il ne parvient pas à charger une classe.

En fait, cela fonctionne très bien, mais uniquement pour les classes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X