Пути при включении и запросе AJAX - PullRequest
2 голосов
/ 21 апреля 2010

Мне было интересно, есть ли способ сделать относительный путь к главной папке (где лежит index.php) из каждого файла, который должен быть включен или запрошен AJAX.

Я хочу объединить как AJAX, так и PHP, поэтому сначала страница загружается с помощью PHP, а затем можно обновить части страницы с помощью AJAX, но файлы одинаковы и находятся в подпапках.

У меня проблемы с путем, и хотя я могу установить абсолютный путь, мне приходится менять его каждый раз, когда меняется сервер. Я хочу относительный путь к моему проекту, но не DOCUMENT_ROOT, потому что он не работает с псевдонимами. (или вы знаете, как заставить его работать с псевдонимами?)

Спасибо!

EDIT * Вот как выглядит моя структура каталогов:

[main_dir] /index.php - основной индексный файл

[main_dir] / phpinc - файлы включения php - которые работают только с include (без вызова AJAX)

[main_dir] / modules - модули являются частями страницы, могут быть включены в PHP или AJAX, вызываться из любого места (не имеет значения, они будут загружены как отдельный файл HTML, поэтому пути в PHP относительно того, где находится модуль физически.

Когда вы включаете их в PHP, они обычно выбирают путь [main_dir] (потому что index.php включил их)

Итак, моя проблема: из файлов модуля я хочу включить некоторые файлы в папку phpinc, но это может быть либо ../phpinc/file.php, либо phpinc / file.php.

Есть ли более элегантный способ, чем просто поставить

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

в начале каждого модуля?
Надеюсь, что это разъяснение достаточно хорошо.

1 Ответ

0 голосов
/ 17 февраля 2011

Я бы предложил использовать автозагрузчик PHP:

Я создал класс CAutoloadManager, который имеет этот метод:

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

В index.php я вызываю

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

, чтобы дать автозагрузке команду сначала попытаться найти класс в ./actions/ для имен, таких как CShowWelcomeAction.inc.php или CLoginAction.inc.php.CAutoloadManager искал ./include/ для других классов.

Функция PHP autoload () используется следующим образом:

function __autoload($class_name) {

    include $class_name . '.php';

}

PHP вызывает ее каждый раз, когда не удается загрузить класс.

На самом деле, это работает очень хорошо - хотя только для классов.

...