Search code examples
phpinclude-path

PHP File Path With Include


This is how my project is currently set up:

-index.php
-css
--index.css
-includes
--head.php

head.php

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/index.css">
<title> My Website </title>
</head>
<body>

index.php

<?php
include(__DIR__.'/includes/head.php');
?>

The problem is that index.css does not work. I don't see what I'm doing wrong at this point. Any help would be greatly appreciated. Thanks.


Solution

  • The problem is in the way PHP include() works; it literally includes the code from head.php into index.php, without updating any relative links. As such, you index.php is looking for the CSS file in ../css/index.css. And while your head.php does indeed need to go up one directory before looking in the CSS folder, your index.php file does not.

    To resolve this, you have a number of options:

    • You can update the relative path to css/index.css to work from your index.php file.
    • You can use the root-relative path /css/index.css to reference the CSS file from any folder.
    • You can use the absolute path https://yourwebsite.com/css/index.css to reference the CSS file from not only your website, but any other website. This further eliminates confusion, but will cause issues if you change the domain.

    Personally I would recommend the root-relative path, as it makes things less confusing when using things like includes and partials.