2010-04-21 9 views
2

Je me demandais s'il existait un moyen de créer un chemin relatif vers le dossier principal (où réside index.php) à partir de chaque fichier devant être inclus ou demandé par AJAX. Je veux combiner à la fois AJAX et PHP, donc la première fois que la page se charge avec PHP, et ensuite pouvoir rafraîchir des parties de la page avec AJAX, mais les fichiers sont les mêmes et se trouvent dans des sous-dossiers.Chemins lorsque tous les deux incluaient et demandaient AJAX

J'ai des problèmes avec le chemin et bien que je puisse définir un chemin absolu, je dois le changer chaque fois que le serveur change. Je veux un chemin relatif vers 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 des alias?)

Merci!

EDIT * Voici comment ma structure de répertoire ressemble:

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

[main_dir]/phpinc - le php include des fichiers - qui fonctionnent uniquement avec include (pas d'appel AJAX sur eux)

[main_dir]/modules - les modules sont des parties de la page, peuvent être soit inclus avec PHP ou AJAX appelé de n'importe où (peu importe, ils seront chargés en tant qu'individu Fichier HTML, donc les chemins en PHP sont relatifs à l'emplacement physique du module

Lorsque vous les inclure dans PHP, ils seront normalement prendre la [main_dir] chemin (parce que index.php les a inclus)

Donc mon problème est: à partir des fichiers du module que je veux inclure des fichiers dans le phpinc dossier, mais il pourrait être soit ../phpinc/file.php ou phpinc/file.php.

Y at-il une façon plus élégante que de mettre un

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

au début de chaque module?
Espérons que cette clarification est assez bonne.

+0

Pouvez-vous inclure un exemple de ce que vous essayez? – Dolph

+0

Ok. J'essaierai. Je vais modifier la description du problème pour l'ajouter. – Cristian

+0

voir mes mises à jour! –

Répondre

0

Je propose d'utiliser le chargeur automatique de PHP:

J'ai créé un CAutoloadManager de classe qui a cette méthode:

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

Dans index.php j'appelle

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

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

fonction autoload() de PHP est utilisé comme ceci:

function __autoload($class_name) { 

    include $class_name . '.php'; 

} 

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

En fait, cela fonctionne très bien - bien que pour les cours seulement.