PHP включает и подпапку

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

http://beginsathome.org.uk/BAAF/images/file_system.png

Как вы можете, я хотел бы, чтобы все файлы ?.php находились в корне документа, а все включаемые файлы, связанные с php (например, сведения о подключении к базе данных), находились в папке «inc».

Для html и соответствующих css, изображений и т. д. я создал папку «шаблоны» для хранения всех деталей с подпапкой под названием «включает», которая будет содержать html, такие как заголовок, нижний колонтитул и т. д.

К сожалению, хотя мои изображения и css находятся в том же месте, что и мои html-шаблоны, css и изображения, похоже, не отображаются при просмотре сайта (хотя текстовая часть верхнего/нижнего колонтитула отображается).

http://www.beginsathome.org.uk/BAAF/images/screenshot.png

Я пытался провести некоторое исследование и понять, что использование чего-то вроде


$path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/common/header.php";
   include_once($path);

может быть путь вперед, но я новичок в PHP и не был уверен, куда его поместить или какой маршрут указать. Я также понимаю, что этот метод может варьироваться в зависимости от того, находится ли он на сервере Apache, Linux или Windows. в идеале я хочу, чтобы метод работал на всех серверах. В настоящее время я разрабатываю локальный сервер Apache на Mac.

Большое спасибо за вашу помощь Тереза


person Theresa    schedule 05.03.2010    source источник
comment
Я изменил свой путь CSS на /b@h/templates/css/baaf.css, что работает... но, очевидно, я хочу, чтобы корень документа начинался внутри b@h, так как я могу это сделать? Использую ли я .htaccess или назначаю свой document_root переменной и вызываю эту переменную? Спасибо!   -  person Theresa    schedule 05.03.2010


Ответы (4)


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

Поэтому вам необходимо перейти в каталог CSS: ../templates/css/FILE.css.

person Cryophallion    schedule 05.03.2010
comment
Привет, спасибо... но я пробовал и ничего не изменилось :( - person Theresa; 05.03.2010
comment
сделайте мне одолжение: echo getcwd(); и обновите свой вопрос. Кроме того, используете ли вы какие-либо файлы .htaccess или виртуальные корни? Если вы не знаете, вы, вероятно, нет. - person Cryophallion; 05.03.2010
comment
эхо getcwd(); = /Applications/MAMP/htdocs/b@h/templates. Нет, я не использую файлы .htaccess atm - я использовал их только на веб-серверах, и это моя первая локальная разработка. - person Theresa; 05.03.2010
comment
Что ж, добро пожаловать в локальный dev на php. Итак, поскольку мы знаем, что вы находитесь в папке шаблонов, css/FILE.css должен быть тем, что вы ищете. - person Cryophallion; 05.03.2010
comment
На самом деле, подождите секунду. Похоже, вы кодируете на Mac. Каковы разрешения на эти каталоги? Также может быть, что у сервера нет прав на просмотр файлов (но если бы вы открыли файл, он бы работал, так как вы загружаете файл вручную, а не с локального хоста). - person Cryophallion; 05.03.2010
comment
Я изменил свой путь CSS на /b@h/templates/css/baaf.css, что работает... но, очевидно, я хочу, чтобы корень документа начинался внутри b@h, так как я могу это сделать? Использую ли я .htaccess или назначаю свой document_root переменной и вызываю эту переменную? - person Theresa; 05.03.2010
comment
Это зависит. Вы можете сделать одну из трех вещей: использовать символическую ссылку на папку css (symfony делает это так), использовать и htaccess или определить корень документа в файле настроек или констант (я также использую это для переменных доступа к БД) с помощью константа (us3.php.net/manual/en/language.constants.php ) - person Cryophallion; 05.03.2010

Нет, $_SERVER['DOCUMENT_ROOT'] не зависит от ОС или веб-сервера, если он правильно настроен (обычно так и есть). Этот метод является одним из лучших способов создания абсолютного пути, начиная с корня файловой системы.

Но затем ваш браузер запрашивает файл CSS. Он запрашивает его не из файловой системы сервера, а с виртуального веб-сервера. Все, что вам нужно для ваших CSS-файлов, — это установить его путь от корня сервера, сделав его абсолютным (то есть «доступным отовсюду»). Абсолютный путь всегда начинается с символа /.

Итак, судя по вашей картинке, /templates/css/baaf.css подойдет.

person Your Common Sense    schedule 05.03.2010
comment
Я пробовал /templates/css/baaf.css, но это не работает. Странно то, что в моем файле error.html.php я использовал ‹?php include 'includes/header.inc.html.php'; ?› и включаемые файлы, очевидно, вызываются правильно, потому что они выглядят (не стилизованными). Поэтому я использовал тот же метод для моего css 'css/baaf.css', но он не работает. - person Theresa; 05.03.2010
comment
вы включаете файл, но css — это не файл, а URI. Файл вызывается вашим скриптом, но css вызывается браузером. Вы должны проверить реальные пути вашей системы. Если вызвать /templates/css/baaf.css прямо в адресной строке браузера, какую ошибку вы увидите - 404 или что-то другое? папка с вашими шаблонами находится в корне веб-сервера? - person Your Common Sense; 05.03.2010
comment
Привет. Я использую MAMP, поэтому это MAMP/htdocs/b@h/templates (b@h — мой корень для этого приложения). Я просмотрел localhost:8888/b@h/templates/css/baaf .css, и он показывает мне css. Если я обращаюсь к своему шаблону напрямую 'localhost:8888/b@h/templates/error .html.php', то CSS и изображения отображаются правильно... - person Theresa; 05.03.2010
comment
бинго! это /b@h/ то, что вам нужно. /b@h/templates/css/baaf.css — абсолютный путь - person Your Common Sense; 05.03.2010
comment
Гений! Ага сделал это. Но даже несмотря на то, что htdocs находится в корневом каталоге моего документа apache, с точки зрения моего приложения я бы хотел, чтобы b@h был корнем моего приложения - так как мне это сделать (еще раз спасибо!) - person Theresa; 05.03.2010
comment
htdocs не находится в корне документа, это это сам корень документа - person Your Common Sense; 05.03.2010

Попробуйте использовать ../ в своем пути, чтобы сначала перейти из текущего каталога.

person Gary Willoughby    schedule 05.03.2010
comment
Привет, это то, что я пробовал (поскольку это работает с html), но нет, это не меняется. - person Theresa; 05.03.2010

Если я могу предложить вам изменить структуру каталога на что-то вроде:

  • docroot
    • css
    • картинки
    • JavaScript

для корня вашего документа, просто убедитесь, что для php_include_path установлено значение:

  • includes
    • templates
    • _примечания
    • и т.д.

должно немного упростить организацию

person mote    schedule 05.03.2010