PHP Включить Пути - PullRequest
       7

PHP Включить Пути

1 голос
/ 04 мая 2010

Я новичок в PHP и у меня возникла проблема при попытке связать мои CSS-файлы с помощью include.

В основном мне нужно, чтобы мои файлы ссылались на определенный каталог, независимо от того, как далеко находится файл. Я пытался использовать

<?php
    include $_SERVER['DOCUMENT_ROOT'] . '/sysprogs/required/header.html'; 
?>

Но header.html содержит ссылки на мои css-файлы, поэтому каталог, в котором он ищет css-файлы, равен

http://localhost/SysProgs/software/CSS/style.css

вместо того, где я хочу, чтобы это было

http://localhost/SysProgs/required/CSS/style.css

Надеюсь, это имело смысл, и я надеюсь, что вы можете мне помочь

Спасибо за вашу помощь всем!

Ответы [ 5 ]

7 голосов
/ 04 мая 2010

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

Вместо этого я бы рекомендовал установить константы PHP для общих каталогов. Например:

Код PHP:

<?php
    define('CSS_DIR', '/SysProgs/required/CSS/');
?>

HTML-код:

<link href="<?php echo CSS_DIR ?>style.css" rel="stylesheet" type="text/css" />
3 голосов
/ 04 мая 2010

Одна идея

Используйте полный URL-адрес в header.html. Это будет однозначно и надежно.

<head>
<link href="/FULL_BASE_URL/style/style.css" rel="stylesheet" type="text/css" />
</head>

Другая идея

Используйте тег заголовка <base>. Это позволяет указать базовый URL для ссылок, включая CSS, и может потребовать наименьшего количества работы в краткосрочной перспективе ( см. Примечание ниже ).

<head>
<base href="FULL_BASE_URL" />
<link href="style/style.css" rel="stylesheet" type="text/css" />
</head>

Больше в w3schools

Примечание: Как отмечается в комментариях ниже base может в конечном итоге вызвать больше путаницы, чем оно того стоит.

2 голосов
/ 04 мая 2010

Мне нравится определять как абсолютный путь, так и webroot в центральном месте вашего приложения:

<?php

  define("APP_WEBROOT", "/myapp"); 
  define("APP_ROOTDIR", "/home/www/example.com/htdocs/myapp");

 ?>

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

<?php echo APP_WEBROOT; ?>/software/CSS/style.css

Я предпочитаю это

  • более <base>, поскольку этот тег создает путаницу и затрудняет поддержку кода в долгосрочной перспективе

  • из-за использования абсолютных путей /software/CSS/style.css, поскольку они не позволяют установить ваше приложение в подкаталоге по вашему выбору: вы всегда будете связаны с корневым каталогом.

0 голосов
/ 05 мая 2010

Я часто сталкиваюсь с этой проблемой при разработке сайтов. Когда у меня есть пользовательская CMS, я использую следующее:

$basedir = "root_directory/";
$basedirPHP = $_SERVER['DOCUMENT_ROOT'].$basedir;
$basedirHTML = "http://".$_SERVER['SERVER_NAME'].$basedir;

Я определяю $ basedir, чтобы без каких-либо усилий переместить сайт в разные подкаталоги на сервере. $ BasedirPHP и $ basedirHTML, поэтому я могу вызывать файлы либо с php, либо, как вы упомянули, при связывании CSS, JS и т. Д.

Если вы работаете в WordPress, просто используйте старый код bloginfo('template_directory');, чтобы сделать то же самое в файлах шаблонов.

0 голосов
/ 04 мая 2010

Первое, что вы должны понять - ваш вопрос не имеет отношения к PHP. Это так же просто, как просто имена файлов в вашем HTML-квесте. Без PHP это останется прежним. Просто используйте абсолютный путь к вашему файлу CSS

И еще одна вещь, о которой стоит подумать: подумайте над тем, чтобы принять несколько вопросов.

...