ProEvilz
ProEvilz

Reputation: 5455

PHP include paths within directories

I have looked around at a few different questions about the same sort of problem I'm having. I have took a solution and adapted it to my own project.

Here is my directory structure.

/css
    -style.css
/includes
    -shop.css
    -header.php
    -footer.php
/php
/js
/shop
    -index.php

-index.php <-- homepage
-config.php  

Inside my config.php I have

define('ROOT_PATH',$_SERVER['DOCUMENT_ROOT']);

My header.php

<?php include './config.php';?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <?php echo '<link href="'.ROOT_PATH.'/css/style.css" rel="stylesheet">';?>
  <?php if ($_SERVER['REQUEST_URI'] == '/shop/'){echo '<link href="'.ROOT_PATH.'/includes/shop.css" rel="stylesheet">';} ?>
</head>

The only problem is, for any other page other than the root index.php file, the path for the config.php file becomes incorrect. Thus the CSS paths then become incorrect as ROOT_PATH isn't defined anywhere.

What would be the best way to handle paths when using includes?

Upvotes: 0

Views: 111

Answers (4)

argamentor
argamentor

Reputation: 148

You are using the server's actual filesystem path to refer to your stylesheets. That's like trying to do something like:

<link href="C:\your_website_path/includes/shop.css"...

and wont work.

I would recommend to change that to something like:

define('ROOT_PATH', 'http://www.your-website-url.com/');

Regards,

Upvotes: 1

Utkarsh Dixit
Utkarsh Dixit

Reputation: 4275

Use $_SERVER['HTTP_HOST'].$_SERVER['DOCUMENT_ROOT'] gets the document root for eg var/com/images. $_SERVER['HTTP_HOST'] will get current url like http://example.com/images.TYour code should look like this

define('ROOT_PATH',$_SERVER['HTTP_HOST']);

And include this way

<?php include'../config.php';

Hope this helps you

Upvotes: 1

pthomsen
pthomsen

Reputation: 34

Maybe using relative paths for the include in the other index.php file.

<?php include '../config.php'; ?>

Upvotes: 1

blamb
blamb

Reputation: 4290

what you need to do is make the include for your config absolute, not relative. you begin the path with a dot ./config which means its relative. instead set up your header to include the config file with an absolute path like this

<?php include '/home/user/config.php';?>

This way, any page can find the file no matter its location in the directory structure.

Upvotes: 0

Related Questions