在每个php page inc子文件夹中包含css

I am creating my first (basic) php application and would like to start as I mean to go on as regards file paths and globals - this is quite new to me. WHat I have now works however I would like to be advised if there is a more efficient way (for future-proofing/expansion)

I have a simple file structure as follows;

- css
 -- bootstrap.css
- lib
 -- display.php
- template
 -- header.php
 -- footer.php
- admin
 -- login.php
- globals.php
- index.php

I would like to include my css (bootstrap.css) on each page. I have declared a single global in my global.php as follows;

<?php define('URL', 'http://localhost/myLocalSite'); ?>

The in my display.php I have included the css;

<link href="<?php echo URL ?>css/styles.css" rel="stylesheet">
<link href="<?php echo URL ?>css/bootstrap.min.css" rel="stylesheet">

I include these in my index.php by using the following;

<?php include('globals.php') ?>
<?php include('template/header.php') ?>
<?php include('lib/display.php') ?>

I include these in my login.php by using the following (not the sub-folder location);

<?php include('../globals.php') ?>
<?php include('../template/header.php') ?>
<?php include('../lib/display.php') ?>

Whenever working in a file within a sub-directory (as above login.php) do I always need to include the ../ in order to include the files or is there a better way?

Like I say it works and I am new to this so ay advice is appreciated.

Instead if you want to remove PHP Processing logic, i would suggest using HTML <base> tag in your HTML <head> section, You can see example usage here

<base href="http://www.yoursite.com/" target="_blank">

Then you have to change these below lines

<link href="<?php echo URL ?>css/styles.css" rel="stylesheet">
<link href="<?php echo URL ?>css/bootstrap.min.css" rel="stylesheet">

to

<link href="css/styles.css" rel="stylesheet">
<link href="css/bootstrap.min.css" rel="stylesheet">

This will eliminate PHP processing part

You can make index.php your Router and then rewrite request to it.
Then you can declare a constant in index file and load other files from it.

define('ROOT', dirname(__FILE__));

and then you can include files everywhere like this

require(ROOT.'/globals.php');
require(ROOT.'/template/header.php');
require(ROOT.'/lib/display.php');

For ONLY example router: .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Then you can do anything in index.php, for example:

   <?php
    $uri = $_SERVER["REQUEST_URI"];
    require "templates/header.php";
    switch ($uri) {
        case "/":
            include "views/index.php";
            break;
        case "/login":
            include "admin/login.php";
            break;
        case "/something":
            include "views/something.php";
            break;
        default:
            include "views/404.php";
            header("HTTP/1.0 404 Not Found");
            break;
    }
    require "template/footer.php";

Future improvements:

  • You can automate it in some way, to not create next case for each file

  • Some tutorial on php routing, but watch out for security reasons - dont include SECRET files