Links in PHP and HTML

A growing reference for myself as much as anyone else :)

Relative to site root

Include statements in PHP files:

include_once $_SERVER["DOCUMENT_ROOT"]."/header.php";

Links in HTML elements, including links, stylesheets, scripts, and images:

// Yes! The leading / refers to the site root
<a href="/mypage.php">My Link</a>

// NO!
// This can end up with a link like 'C:server/htdocs/mypage.php', which is "correct"
// but won't execute.
<a href=<?php echo $_SERVER["DOCUMENT_ROOT"]."/mypage.php"?>>My Link</a>

Relative to Current Page

Good news! They work the same way!

// in current directory
include_once "file.php";
<a href="mypage.php">My Link</a>

// in a parent folder
include_once "../file.php";
<a href="../mypage.php">My Link</a>

// in a child folder
include_once "folder/file.php";
<a href="folder/mypage.php">My Link</a>

PHP also supports this, which I've found useful in some cases. This is going up through the file structure. It can be used to just get the name or to actually include files in that location.

// current directory = /path/to/file/index.php

$dir = dirname(__DIR__, 2);

echo $dir; // Result = "/path"

$include(dirname(__DIR__, 1)."my-file.php");

Other things that may be situationally useful

You can set a base URL to use for all relative links in HTML elements on a page.

<base href="">