Есть блюз PHP, включающий путь. Быстрая и простая загрузка?

#php #filepath

#php #путь к файлу

Вопрос:

Я довольно далеко продвинулся в проекте, и у меня возникли проблемы с правильным включением всего. У меня есть несколько файлов в разных каталогах, которые должны включать одни и те же файлы, но поскольку некоторые вызываются через ajax или через includes в разных ситуациях, путь варьируется. У меня был настроен путь php_include через .htaccess, но тестовый сервер, на котором мне нужно настроить, не запускается с командами php в .htaccess! Я пытаюсь найти быстрый способ связать все вместе.

У меня есть несколько файлов, все из которых включают один и тот же файл «project», который, в свою очередь, Включает функции и т. Д. У меня настроена переменная $ROOT для хранения абсолютного пути к моим каталогам, но это невозможно использовать в includes без использования php.ini, что я не могу сделать легко, и оно все равно включается впоследствии.

Я немного разбираюсь в начальной загрузке, и я бы хотел маршрутизировать все через htaccess, но у меня действительно нет представления о том, как реализовать что-то подобное действительно быстро и легко (и будет ли это работать для файлов, вызываемых через ajax?)

Я не могу полагаться на server_document_root, потому что он может находиться в подкаталоге.

Это не основано на классах, но имеет объекты значений для содержимого базы данных.. есть основной home.php , view.php etc в корневом каталоге, затем program / directory с основными скриптами и объектами значений, затем папками utilities и components, которые содержат миниатюрные классы типов представления.

Я бы все переделал, если бы у меня было время, но прямо сейчас я пытаюсь найти способ заставить все просто работать (желательно, не сбрасывая все в одну папку: p)

Комментарии:

1. Взгляните на шаблон Model View Controller (MVC) для вашего следующего аналогичного проекта. Вы будете благодарны себе. CodeIgniter — хороший фреймворк MVC.

2. У меня ТАК много идей о том, что я сделаю по-другому в следующий раз

3. взгляните на cakephp.org это лучше, чем кодовый воспламенитель

4. Мой план состоял в том, чтобы проверить Yii .. я слышал только очень хорошие вещи об этом.

Ответ №1:

В home.php « view.php основной» файл или включите его, это будет включать остальную часть вашего приложения.

 require 'base.php';
  

Все в порядке, если home.php or view.php находятся в каком-то другом каталоге, просто сделайте все, что вам нужно сделать в этом файле, чтобы загрузить base.php что-то подобное, будет работать так же:

 require '../base.php';
  

Затем в base.php

 $root = dirname(__FILE__);
require $root.'/lib/mylib1.php';
require $root.'/lib/mylib2.php';
  

Это __FILE__ полный путь к текущему файлу, dirname получает его каталог, затем вы можете записать все ваши includes / requires относительно местоположения base.php .

Я надеюсь, что это поможет указать вам полезное направление.

Комментарии:

1. У меня уже есть переменная $root .. она задается вручную, поэтому dirname было бы улучшением, но оно не отображается при вызове файлов с помощью ajax, и в этом случае путь к base.php отличается при разном использовании одного и того же файла

2. Даже если вы вызываете файл через ajax, его расположение в файловой системе будет таким же. require и include используйте файловую систему, поэтому не имеет значения, есть ли у нее несколько разных URL-адресов, по которым она доступна. Это то, что вы имеете в виду?

3. однако файл ajax, если он находится в другом каталоге, будет отличаться по отношению к нему, поскольку это первый загружаемый php-файл. Похоже, мне может понадобиться попытаться выделить файлы с поддержкой ajax, а затем включить базу, а затем файл, которым он был раньше .. ?

4. У него может быть другой путь для включения базы, но это не проблема, допустим, путь к файлу ajax такой же сложный, как «myapp/lib/handlers/ajax/create.php «. Это нормально, потому что в верхней части вы ставите «require’ ../ ../ ../base.php «(или все, что вам нужно). Затем $root in base.php вступает во владение и игнорирует всю исходную информацию поиска, потому что ее интересуют только пути относительно каталога, который base.php физически находится внутри. Затем остальные файлы php включаются на основе $root , поэтому путь к самому первому файлу (ajax) больше не имеет значения.

5. Я использую только относительные URL-адреса в includes прямо сейчас, потому что «http: // оболочка отключена в конфигурации сервера с помощью allow_url_include=0» и ограничен доступ к php.ini.

Ответ №2:

Простым решением для этого может быть использование переменной, установленной перед включением файла. Затем вы можете проверить, определена ли эта переменная, и если это не так, используйте путь для ajax вместо пути включения.

 $included = true;
include("ajax_inc.php");
  

Предполагая, что ваши основные файлы находятся в /, а ваши файлы ajax находятся в /ajax:

 if (isset($included)) {
    $path = "/";
} else $path = "../";
  

Вы также можете выполнить некоторые проверки с помощью getcwd() и chdir()

http://php.net/manual/en/function.getcwd.php