<base> работает выборочно / странно - это нормально? - PullRequest
0 голосов
/ 25 февраля 2012

Я использую следующее по всему проекту и до сих пор не заметил проблемы:

   include '../titleBar.php';
   require_once '../navBar.php';
   require_once '../theDatabase.php'; // functions for the UI and DB access
   require_once '../globals.php'; // variables and statics used throughout

Выше сказанное работало FINE в течение 3 недель.Причина, по которой ../ перед именами файлов заключается в следующем: приведенные выше операторы появляются в пользовательских подпапках в пользовательских файлах, таких как FOO_x.php , специфичных для данных, введенных пользователем, - только перечисленные выше включают иФайлы require_once содержат общий код, а общий код находится на один каталог выше подпапок в корневом каталоге веб-сайта.

Итак, я добавил этот новый бит кода, и он не тянет в таблице стилей:

   include '../titleBar.php';
   require_once '../navBar.php';
   require_once '../theDatabase.php';
   require_once '../globals.php';

   <html>
   <head>
    <link rel="stylesheet" type="text/css" href="../globalStyles.css" />   

Я изменил это на это, и таблица стилей в порядке в файл пользовательского FOO_x.php:

    <link rel="stylesheet" type="text/css" href="globalStyles.css" />  

ДЕРЖИТЕ В УМ - выше ссылка rel находится в файле FOO_x.php , который находится в подкаталоге корневого веб-сайта.И - файл 'globalStyles.css' находится ..... НЕ В подкаталоге, в котором находится FOO_x.php.

Файл 'globalStyles.css' находится на один уровень выше папки, содержащей FOO_x.php.

Так почему / как href = globalStyles.css может даже работать?Ну, ЭТО ДЕЛАЕТ.

Поскольку в течение последних 3 недель во втором файле 'navBar.php' в списке include / require в верхней части FOO_x.php содержалось следующее утверждение:

     <base href='http://localhost/theSiteRootFolder/'></base>

Поэтому, когда я попробовал

    <link rel="stylesheet" type="text/css" href="../globalStyles.css" /> 

и ни один из его стилей не появился на странице FOO_x.php, я переключил его на

   <link rel="stylesheet" type="text/css" href="globalStyles.css" />  

, и неожиданно появились стили.Затем я вспомнил «давным-давно», что поместил оператор «base» в navBar.php.

Далее я подумал: «Хорошо, если оператор rel rel использует оператор« base »из navBar.php -- затем require_once для файлов theDatabase.php и globals.php тоже НЕ НУЖНО ../ В конце концов, эти 2 файла появляются после «базовый» оператор в require_once navBar.php, точно так же, как оператор link rel ».Логично (для меня).

Итак, я изменил верхнюю часть файла FOO_x.php следующим образом:

   include '../titleBar.php';
   require_once '../navBar.php';
   // these next 2 file 'requires'  should work -- the navBar.php declared a 'base' to be the folder above this one
   require_once 'theDatabase.php';
   require_once 'globals.php';

Я понял, "как только navBar.php извлечен с его базовым оператором,так как очевидно, что ссылка rel настаивает на том, что globalStyles.css не может иметь ../ - тогда ни базы данных.php, ни globals.php не должны быть.* href = 'http://localhost/theSiteRootFolder относительный путь к корню.

И все же только ссылка rel' уважает 'или уделяет внимание выражению' base ', объявленному над ним в navBar.php.

Почему?Я не понимаю, почему, так как navBar.php устанавливает «базу», к которой разрешаются все относительные пути - почему тогда это НЕ работает:

    <link rel="stylesheet" type="text/css" href="../globalStyles.css" /> 

но они работают FINE?

   include '../titleBar.php';
   require_once '../navBar.php';
   // okay the 'base' was just established yet I still have to do this:
   require_once '../theDatabase.php';
   require_once '../globals.php';

1 Ответ

5 голосов
/ 25 февраля 2012

Анализатор PHP не анализирует HTML.Он анализирует только вещи между <?php ?> тегами.По сути, ваш тег <base> не имеет смысла для PHP.

Я предлагаю вам не использовать <base>, поскольку у меня никогда не было причин использовать его.

...