How to get full URL of the current page in PHP
John Mwaniki / Updated on 07 Jul 2024In this article, you will learn how to get the full URL of the current page using PHP.
But before doing so, let's first examine how a URL is structured.
Structure of a URL
Uniform Resource Locator (URL) is the address of a specific resource on a computer network such as a webpage or file.
It specifies the location of the resource on the network, and the mechanism of retrieving it.
The URL comprises 3 main parts which include the protocol, the domain name, and the file path as shown below:
The protocol indicates how the web browser should retrieve the information about a resource. The web standard protocol is http://
or https://
(for secure connections). Other web protocols include ftp:
(for handling file transfers) or mailto:
(for opening the default mail client).
The domain name (also referred to as hostname) is the human-readable name of the specific location of a resource, which in most cases is a website.
On a website, there are files, and folders, which may also have subfolders. Resources such as web pages or different kinds of files can be placed on the domain root folder or within nested folders. To access these resources, you have to include the path to which the file is located and the name of the file in the URL.
Anything in a URL, that comes after the domain name is referred to as the path. A URL can also have parameters(for passing certain information), or anchors that allow visitors to navigate to a certain point within the resource.
Now that you understand the structure of a URL, let's proceed to the main topic.
Getting the URL in PHP
We will do this with the help of the PHP superglobal variable, $_SERVER
.
$_SERVER is a built-in variable in PHP that is available in all scopes and holds an array of information about headers, paths, and script locations.
The table below comprises all the necessary $_SERVER elements that we will need in getting the page URL:
Element/Code | Description |
---|---|
$_SERVER["HTTPS"] | Contains information regarding if the script was queried using a secure(https) protocol. |
$_SERVER["HTTP_HOST"] | Contains the host/domain name from where the user is accessing the current page. |
$_SERVER["PHP_SELF"] | Contains the path and file name of the currently running script. |
$_SERVER["REQUEST_URI"] | Contains the URI of the currently running script. |
How it works
We have a PHP file with the URL below. In it we will add code that should print out its full URL.
https://www.webdevsplanet.com/myfiles/myscript
Note: In our URL we have removed/hidden the file extension (.php).
From the URL structure section, we found out it has 3 main sections: Protocol, domain/hostname, and the path. We will find each at a time then concatenate them.
Getting the protocol
We use isset()
function to check whether HTTPS is enabled or not. If it is, and the value of $_SERVER[‘HTTPS’] is “on”, we assign to $protocol variable "https://". Else, we assign it "http://".
<?php
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'){
$protocol = "https://";
}
else{
$protocol = "http://";
}
?>
Getting the domain name
To get the domain name, we get the value of $_SERVER["HTTP_HOST"]
as shown below.
<?php
$domain = $_SERVER["HTTP_HOST"];
echo $domain;
?>
From our example URL, the output for this code will be: www.webdevsplanet.com
Getting the file path
Lastly, we get the file path, which follows the domain name.
There are two different ways of getting it.
i). Using $_SERVER["PHP_SELF"]
. This returns the full filepath with the file extension eg. .php, .html, etc regardless of whether it has been removed/hidden with the .htaccess file.
<?php
$path = $_SERVER["PHP_SELF"];
echo $path;
?>
The output for this code will be: /myfiles/myscript.php
ii). Using $_SERVER["REQUEST_URI"]
. Unlike PHP_SELF, this gives the exact URI as used in requests to access the file. If URL rewriting has been done to remove the file extension, then this will return it as such.
<?php
$path = $_SERVER["REQUEST_URI"];
echo $path;
?>
The output for this code will be: /myfiles/myscript
You can now get the full URL by concatenating the 3 parts from the examples above as shown below:
<?php
$url = $protocol.$domain.$path;
?>
The output of the above will be:
https://www.webdevsplanet.com/myfiles/myscript
If you used $_SERVER["REQUEST_URI"]
or
https://www.webdevsplanet.com/myfiles/myscript.php
If you used $_SERVER["PHP_SELF"]
Putting it all together
Let's now combine everything above into one code.
<?php
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'){
$url = "https://";
}
else {
$url = "http://";
}
$url.= $_SERVER['HTTP_HOST']; // Appending the domain name
$url.= $_SERVER['REQUEST_URI']; // Appending the requested resource location
echo $url;
?>
Below is even a much shorter of doing it.
<?php
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https://" : "http://") .$_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI'];
echo $url;
?>