#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
inbase.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()