How to Build a Website From Scratch With PHP

In case you acquire a primary understanding of tips on how to construct a web site utilizing PHP, you’ll have data of file inclusions and producing output—the very fundamentals of customizing an internet web page. Possibly you’re questioning the place to start, or what subsequent steps to take when constructing extra performance into your web site.

On this tutorial, I current a easy web site construction that enables for easy updates. It additionally demonstrates some helpful PHP features so as to add worth.

The Web site You’ll Be Constructing in PHP

The pattern web site—accessible in a GitHub repository—is a straightforward web site about birds in all their feathery goodness. There are a few sections, some information pages, and a house web page. The ultimate web site isn’t as necessary because the methods you’ll examine, and the concepts they could encourage in you.

grab 2022-02-14 at 11.28.25

In case you can, obtain the location from GitHub and set up it in your native laptop earlier than studying on.

General Construction of the Website

Listed here are among the key information and directories it is best to examine.

web site/
  • Each web page corresponds to a PHP script within the web site listing. This introduces some redundancy, however it retains issues easy. When establishing your internet server, ensure you level your DOCROOT on the web site listing.
  • The md listing comprises markdown supply information that retailer the primary content material of some particular person pages.
  • The tpl listing comprises templates and information that outline the general HTML construction that a number of pages can share.
  • Many of the PHP performance is in funcs.php.


Associated: Easy methods to Set Up Your Personal WAMP Server

How the Website Works


Bootstrap is a front-end framework for constructing web sites. It has built-in types and JavaScript performance, protecting commonest internet dev wants. It’s a superb manner of shortly getting a web site up and working earlier than you spend time fine-tuning the design.

You possibly can set up and host the Bootstrap information in your server, however for max velocity, you possibly can simply reference them from a CDN. Check out tpl/head.php and it is best to see an instance like:


Fundamental Templating

Begin with web site/index.php. That is the file that represents the location’s dwelling web page. Relying on how your internet server is ready up, it is best to be capable of entry it at or, failing that,

Be aware the 2 consists of proper originally of this file: funcs.php and TPL_DIR.”/dwelling.php”. The funcs.php file defines that TPL_DIR fixed as the total absolute path of the tpl listing on the prime degree of the location.

Check out tpl/dwelling.php. That is the very outermost skeleton of an html doc: it solely features a doctype and an HTML aspect. Inside the HTML aspect, it makes use of two consists of for templates representing the pinnacle and physique.

<!DOCTYPE html>
<html lang="en">
<?php embody TPL_DIR."/head.php"; ?>
<?php embody TPL_DIR."/dwelling/physique.php"; ?>

In distinction, the template for the birds part masses a unique physique template, tpl/birds/physique.tpl. This comprises a unique structure for pages inside that part, one with a sidebar.

Parsing Markdown

Within the composer.json file, a third-party library referred to as erusev/parsedown is required. It is a Markdown-parsing library. It lets you, very simply, convert Markdown textual content into HTML.

Many static websites generate remaining HTML from paperwork written in one other language, corresponding to Markdown. It gives a nicer syntax for authoring, one which is extra readable than HTML. The pattern web site presents this as an possibility. Check out the show_content() operate in funcs.php:

operate show_content() {
$file = MD_DIR.PAGE.'.md';
if (file_exists($file)) {
$Parsedown = new Parsedown();
echo $Parsedown->textual content(file_get_contents($file));
} else if (function_exists("content material")) {
echo content material();

If a Markdown file comparable to the requested web page exists, a Parsedown object converts its contents into HTML and outputs it. If there’s no Markdown file, it appears for a operate named content material() as an alternative. Particular person pages can outline this operate (see web site/index.php for an instance) if their content material must transcend what static Markdown can obtain.

Loading Metadata

Check out the get_json operate in funcs.php:

operate get_json($file) {
$data_file = DATA_DIR."/".$file;
if (!file_exists($data_file)) {
return array();
if (($json = file_get_contents($data_file)) === false) {
return array();
if (($out = json_decode($json, true)) === null) {
return array();
return $out;

Basically, the operate calls two others to fetch and parse knowledge from a given file. It attire that up with numerous error-checking to return an empty array if something goes mistaken. Calling json_decode() like this returns an associative array which makes it very straightforward to work with the info instantly. This strategy is so handy that you just may favor it to utilizing a database, notably for easy duties like world configuration.

The location makes use of two metadata information: knowledge/titles.json and knowledge/featured.json. The previous shops the title of every web page, helpful for auto-linking and in different circumstances.

"/": "House",
"/about": "About",
"/birds": "Chicken profiles",

It is a helpful manner of holding all web page titles in a single place (file) which is simple to replace when it’s essential. These titles contribute to the navigation within the prime menu, breadcrumb record, and facet panels.

operate page_title($web page = PAGE) {
$titles = get_titles();
return array_key_exists($web page, $titles) ? $titles[$page] : basename($web page);

A simple website page showing information about a bird with its photo

Right here’s the primary a part of the breadcrumbs() operate (from funcs.php) which builds an array of web page titles for every a part of the URL. For instance, for the /birds/blue-tit web page, it fetches the title for the / web page, then the title for /birds, then lastly the title for /birds/blue-tit. The breadcrumb record will then consist of 1 hyperlink for every web page within the hierarchy.

operate breadcrumbs() {
$objects = array();
$titles = get_titles();
$components = explode("/", PAGE);
$href = "";
foreach ($components as $half) {
$href .= ($href == "/" ? "" : "/").$half;
$objects[$href] = $titles[$href];

Getting Maintain of Different Metadata

In case you view the About web page, a selected information story, or a selected hen profile, it is best to be capable of spot a Final up to date message within the footer. The location’s footer is saved in tpl/footer.php. Open this file and word the snippet of PHP inside it:

if (file_exists($file = MD_DIR.PAGE.'.md')) {
echo 'Final up to date: '.date('r', filemtime(MD_DIR.PAGE.'.md'));

It is a easy instance of fetching metadata instantly from a file slightly than a database or different supply. The filemtime operate returns the final modified time of a file. Be aware that it is a very handy technique for getting the content material’s date, however it’s not with out its flaws.

See additionally: Understanding Linux File Timestamps: mtime, ctime, and atime

It’s typically essential to reuse content material throughout a web site, to indicate information summaries on a contents web page, for instance. With a full-blown CMS, you may retailer this knowledge as further fields in a database. With a easy flat-file strategy, it’s essential assume in another way.

The information tales on this web site are saved as Markdown information, so the uncooked content material is offered. Common expressions are a helpful software in a developer’s equipment, supplying you with the power to match and extract content material. The information/index.php file does simply that to indicate its content material. It fetches the contents of every file within the md/information listing as a string. It then runs a number of common expressions to extract knowledge.

A simple website showing two news stories about birds, with photographs

The title is a line that begins with a # image, in accordance with Markdown syntax. Non-obligatory whitespace then follows, earlier than the precise title. The common expression ^#s+(.+) matches that sample of textual content and preg_match() returns every little thing that matched between the brackets: the title.

if (preg_match("/^#​s+(.+)/", $contents, $matches)) {
$title = $matches[1];

Two extra common expressions comply with to extract the picture and first sentence from the information markdown file. There are downsides to this strategy; specifically, it requires self-discipline to make sure Markdown information are all the time formatted precisely because the code expects.

See additionally: The Newbie’s Information to Common Expressions With Python

Deciding on Random Content material

The /birds web page doesn’t do a lot, so a random hen picture livens it up. That is straightforward to realize with a little bit of file system inspection and a operate constructed into PHP. The magic occurs in web site/birds/index.php:

operate content material() {
$information = scandir(SITE_DIR."/img");
$information = array_filter($information, operate($file) { return $file[0] != '.'; });
$file = $information[array_rand($files)];
echo '<h1>Birds</h1>';
echo '<img src="/img/'.$file.'" />';

The trick is organizing all photos for this particular operate right into a single listing. The scandir() operate then reads the information from this listing into an array and array_rand() offers us a random key from the array so the operate can choose a person file.

Constructing Web sites and Talent in PHP

I hope you’ve got discovered a minimum of one new factor from this text. Extra importantly, I hope it has impressed you to contemplate numerous approaches and demonstrated how you should use PHP in many various methods.

When you’re aware of PHP, you’ll begin pondering of different options to every downside. It is a pure development and means you’re beginning to assume at a better degree, focussing much less on the programming language itself and extra on what you are able to do with it.

Person typing on a laptop
Add Authentication to Any PHP App Utilizing MySQL

Discover the ability of PHP and MySQL with this tutorial that guides you thru creating authentication in your internet app.

Learn Subsequent

About The Writer

Leave a Comment