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