PHP: включает и папки - PullRequest
       20

PHP: включает и папки

1 голос
/ 20 июля 2011

У меня небольшой PHP-сайт с большинством моих страниц в форме:

<?php include("heading.php"); ?>

<!-- Content of the page -->

<?php include("footing.php"); ?>

Где «основание» содержит некоторые элементы, которые нужно поместить в конец каждого файла, и «заголовок» большого количества элементов (включая другое включение для меню). Проблема в том, что у меня много php-файлов и я хочу поместить некоторые из них в папки. Простой способ сделать это - изменить код файлов в папке на:

<?php include("../heading.php"); ?>

<!-- Content of the page -->

<?php include("../footing.php"); ?>

Но это не работает, так как include буквально копирует код вместо выполнения его в папке исходного файла, поэтому любые include и css в heading.php не будут найдены, если я не скопирую эти файлы в новую папку.

Ответы [ 5 ]

2 голосов
/ 20 июля 2011

Вы также можете редактировать путь включения, либо в php.ini, либо непосредственно в своем коде:

//Must be called before every include, if not stated in your php.ini
$PATH=get_include_path();
set_include_path($PATH.":/absolute/path/to/your/include/folder/");

Затем вы можете использовать это включение, даже если вы находитесь в подкаталоге:

<?php
  include "heading.php"; //no brackets
  include "whatever.php";
?>
2 голосов
/ 20 июля 2011

Измените heading.php, чтобы пути к загружаемым файлам были абсолютными.Например, если вы загружаете файл CSS из css/style.css, используйте /css/style.css или http://example.com/css/style.css.

1 голос
/ 26 июля 2015

Звучит так, как будто вы просто теряете место в своей структуре каталогов.Использование .. / возвращает вас на один уровень назад, а использование . / (или просто / ) возвращает вас в корневой каталог и .. /../ возвращает вас обратно на два уровня.

Хитрость заключается в том, чтобы узнать, где вы находитесь в структуре каталогов и где находится файл, который вы хотите включить.Если вы включаете или ссылаетесь на файл в папке css , но находитесь в файле, который находится в папке inc , необходимо вернуться в корневой каталог и затем перейти к css , поэтому вы должны поместить / css / filename.ext

Однако, если вы находитесь в папке fonts / glyphicons и хотите сослаться нашрифт в папке fonts / font-awesome , который вы можете просто использовать .. / font-awesome .Очистить как грязь?

Что я делаю, это создаю три (или более) папки.Это помогает упорядочить различные файлы с сокращенными буквами, а именно:

  • css (для таблиц стилей, таких как bootstrap.css, style.css и т. Д.)
  • img (для изображений,графика, значки и т. д.)
  • шрифт (для шрифтов, глифов, потрясающих шрифтов и т. д.)
  • inc (для включаемых / 'сниппетов', таких как heading.php и footing.php)
  • js (для javascripts, таких как html5shiv.js, boostrap.js и т. Д.)

Затем в моем файле heading.html (я использую html для верхнего и нижнего колонтитула)Я включаю некоторые элементы, например, так:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title><?php echo $page_title; ?></title>
        <meta name="Description" content="<?php echo $page_description; ?>">
        <meta name="Keywords" content="<?php echo $page_keywords; ?>">
        <meta name="Author" content="<?php echo $author_name; ?>">
        <meta name="Viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <link href="/css/quicksite-redsand.css" rel="stylesheet">
        <link href="/img/mm.png" type="image/x-icon" rel="shortcut icon">
        <!--[if lt IE 9]><script src="/js/html5shiv.js"></script>
        <script src="/js/respond.min.js"></script><![endif]-->
    </head>
    <body>

Затем на своих страницах, таких как index.php (домашняя страница), я настраиваю некоторые параметры для этой конкретной страницы и включаю некоторые фрагменты, такие как заголовок, меню (я), другие элементы основного текста и нижний колонтитул, например, так:

    <?php 
    $page_name = 'Homepage';
    $page_author = 'My Name...';
    $page_keywords = 'home, home page, homepage';
    $page_description = 'This is the home page for the ...';
    $active_home = 'class="active"';
    $select_home = 'class="selected"';
    include ('inc/config.php');  //common to all pages
    include ('inc/header.html'); //common to all pages
    include ('inc/menus.html');  //common to all pages
    include ('inc/banner.html');
    include ('inc/review.html');
    include ('inc/footer.html'); //common to all pages
    ?>

Поскольку в вашем index.php и, вероятно, на большинстве ваших страниц вы находитесь на корневом уровне, так сказать, в домашнем каталоге, вам нужно только inc без / .Похоже, PHP не любит ненужных /, поскольку он выдал мне ошибку при попытке ...

Я знаю, что это длинный ответ, но я подумал, что хотел бы проиллюстрировать его для лучшего понимания.

0 голосов
/ 20 июля 2011

Я не уверен, правильно ли я понимаю вашу проблему, но у меня есть следующий ответ, я думаю, что вы должны использовать относительные пути CSS к адресу вашего сайта, например, если у нас есть файл CSS, он должен быть таким:

<link ...src="/styles/somecss.css">

, поэтому, где бы вы ни поместили его в свое приложение, он будет иметь путь http://wesiteaddres/style/somecss.css

, и вы можете установить свой путь включения для любого каталога, который вам нужен set_include_path ();

Hopeэто поможет

0 голосов
/ 20 июля 2011

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

<html>
    <head></head>
    <body>
        etc...

        <?php include_once '/path/to/content.php'; ?>

        etc...

   </body>
</html>
...