1
0
mirror of https://github.com/restoreddev/phpapprentice.git synced 2025-01-16 22:28:13 +01:00

Continuing transition to hugo

This commit is contained in:
Andrew Davis 2019-07-13 08:48:55 -05:00
parent e09557cf2c
commit 2ae912aada
36 changed files with 224 additions and 401 deletions

View File

@ -1,4 +1,4 @@
Copyright 2018 Andrew Davis <andrew@restoredsoftware.com>
Copyright 2019 Andrew Davis <andrew@restoredsoftware.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,11 +0,0 @@
<?php partial('header', ['title' => 'PHP Apprentice']) ?>
<div class="container center">
<a href="/" class="logo-404"><?= icon('elephant') ?></a>
<p class="message-404">Whoops! The page could not be found.</p>
<div class="toc-404">
<?php partial('table_of_contents') ?>
</div>
</div>
<?php partial('footer') ?>

View File

@ -1,3 +0,0 @@
</body>
</html>

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?= $title ?? 'PHP Apprentice' ?></title>
<meta name="description" content="<?= $subtitle ?? 'An online book for learning PHP' ?>">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="<?php echo asset('css/site.css') ?>">
<link rel="icon" href="/favicon-32.png">
<script src="<?php echo asset('js/site.js') ?>"></script>
</head>
<body>

View File

@ -1,6 +0,0 @@
<div class="menu">
<button class="menu-button" title="Open Menu">
<div class="icon"><?= icon('show-sidebar') ?></div>
Table of Contents
</button>
</div>

View File

@ -1,8 +0,0 @@
<div class="modal closed">
<div class="modal-content">
<button class="modal-button right" title="Close">
<div class="icon"><?= icon('close-outline') ?></div>
</button>
<?php partial('table_of_contents') ?>
</div>
</div>

View File

@ -1,38 +0,0 @@
<div class="table-of-contents">
<h4>Table of Contents</h4>
<ul class="list-plain">
<li><a href="/">Preface</a></li>
<li><a href="<?= page_path('installing-php') ?>">Installing PHP</a></li>
</ul>
<h5 class="section-title">Basics</h5>
<ol>
<li><a href="<?= page_path('basics') ?>">Basics</a></li>
<li><a href="<?= page_path('variables') ?>">Variables</a></li>
<li><a href="<?= page_path('arithmetic') ?>">Arithmetic</a></li>
<li><a href="<?= page_path('strings') ?>">Strings</a></li>
<li><a href="<?= page_path('comparisons') ?>">Comparisons</a></li>
<li><a href="<?= page_path('boolean-logic') ?>">Boolean Logic</a></li>
<li><a href="<?= page_path('conditionals') ?>">Conditionals</a></li>
<li><a href="<?= page_path('loops') ?>">Loops</a></li>
<li><a href="<?= page_path('arrays') ?>">Arrays</a></li>
<li><a href="<?= page_path('functions') ?>">Functions</a></li>
<li><a href="<?= page_path('classes') ?>">Classes</a></li>
<li><a href="<?= page_path('classes-inheritance') ?>">Classes: Inheritance</a></li>
<li><a href="<?= page_path('classes-visibility') ?>">Classes: Visibility</a></li>
<li><a href="<?= page_path('classes-constructor') ?>">Classes: Constructor</a></li>
<li><a href="<?= page_path('static') ?>">Static</a></li>
<li><a href="<?= page_path('interfaces') ?>">Interfaces</a></li>
<li><a href="<?= page_path('abstract') ?>">Abstract Classes</a></li>
<li><a href="<?= page_path('exceptions') ?>">Exceptions</a></li>
</ol>
<h5 class="section-title">Web</h5>
<ol>
<li><a href="<?= page_path('web/http') ?>">HTTP</a></li>
<li><a href="<?= page_path('web/http-post') ?>">HTTP POST</a></li>
<li><a href="<?= page_path('web/http-server') ?>">PHP HTTP Server</a></li>
</ol>
<a href="<?= page_path('credits') ?>">Credits</a>
</div>

View File

@ -1,41 +0,0 @@
<?php partial('header', ['title' => 'PHP Apprentice - Credits']) ?>
<div class="container small center">
<?php partial('menu_button') ?>
<div>
<h1>Credits</h1>
<p>
PHP Apprentice was inspired by
<a href="https://gobyexample.com/">Go By Example</a> and by <a href="https://elixirschool.com/">Elixir School</a>. Both sites offer excellent, quality documentation in Go and Elixir and I want PHP Apprentice to provide the same
experience for the PHP programming language.
</p>
<p>
Sites used as a reference while writing PHP Apprentice:
<ul>
<li><a href="https://secure.php.net/" target="_blank">php.net</a></li>
<li><a href="https://www.phptherightway.com/" target="_blank">PHP The Right Way</a></li>
</ul>
</p>
<p>
PHP Apprentice was built using several open source projects, besides PHP itself.
Thank you to each of these maintainers for providing great libraries!
<ul>
<li><a href="https://prismjs.com/" target="_blank">Prism.js</a></li>
<li><a href="https://www.zondicons.com/" target="_blank">Zondicons by Steve Schoger</a></li>
<li><a href="https://postcss.org/" target="_blank">PostCSS</a></li>
<li><a href="https://symfony.com/doc/current/components/console.html" target="_blank">Symfony CLI</a></li>
<li><a href="https://symfony.com/doc/current/frontend.html" target="_blank">Symfony Encore</a></li>
<li><a href="https://parsedown.org/" target="_blank">Parsedown</a></li>
</ul>
</p>
<hr />
<p>
Created and managed by <a href="https://twitter.com/restoreddev" target="_blank">Andrew Davis @restoreddev</a>.
</p>
</div>
</div>
<?php partial('menu_modal') ?>
<?php partial('footer') ?>

View File

@ -1,29 +0,0 @@
<?php partial('header', ['title' => $title, 'subtitle' => $subtitle]) ?>
<div class="container small center">
<?php partial('menu_button') ?>
<h1><?= escape($title) ?></h1>
<h3 class="subtitle"><?= escape($subtitle) ?></h3>
<?= $chapter ?>
<div class="clearfix"></div>
<div class="navigate-links">
<?php if (!empty($previous)): ?>
<a href="<?= page_path($previous) ?>" title="Previous" id="prev-link">
<div class="icon"><?= icon('cheveron-outline-left') ?></div>
Previous
</a>
<?php endif ?>
<?php if (!empty($next)): ?>
<a href="<?= page_path($next) ?>" title="Next" id="next-link">
Next
<div class="icon"><?= icon('cheveron-outline-right') ?></div>
</a>
<?php endif ?>
</div>
</div>
<?php partial('menu_modal') ?>
<?php partial('footer') ?>

View File

@ -1,35 +0,0 @@
<?php partial('header', ['title' => 'PHP Apprentice']) ?>
<div class="container small center">
<div>
<div class="home-title-wrapper">
<div class="home-logo"><?= icon('elephant') ?></div>
<h1 class="home-title">PHP Apprentice</h1>
<h3 class="home-subtitle">An online book for learning PHP</h3>
</div>
<p>
PHP Apprentice is an online, open source book about the PHP programming language. PHP is one of the most popular platforms for building websites and web services. It is a great language that is easy to learn and allows you to build powerful and complex web applications very quickly.
</p>
<p>
The goal of PHP Apprentice is to be an easy to understand resource for learning how to write good code in PHP. There are a lot of PHP tutorials on the internet that use outdated practices or insecure code. I want this book to show how to write PHP code with quality.
</p>
<p>
The contents of PHP Apprentice are for beginners and experienced PHP developers. The book currently has content for learning the basics of the language. In the future, more pages will be added for more advanced topics like building websites, database integration and security.
</p>
<p>
PHP Apprentice is currently a work in progress. If you would like to give feedback or request a certain discussion topic, check out the <a href="https://github.com/restoreddev/phpapprentice" target="_blank">GitHub repository</a>.
</p>
<div class="home-buttons">
<a href="<?= page_path('basics') ?>" class="button">
<div class="icon"><?= icon('book-reference') ?></div>
Open First Chapter
</a>
<?php partial('menu_button') ?>
</div>
<hr />
<p>Created and managed by <a href="https://twitter.com/restoreddev" target="_blank">Andrew Davis @restoreddev</a>
</div>
</div>
<?php partial('menu_modal') ?>
<?php partial('footer') ?>

View File

@ -1,29 +0,0 @@
<?php partial('header', ['title' => 'PHP Apprentice - Installing PHP']) ?>
<div class="container small center">
<?php partial('menu_button') ?>
<div>
<h1>Installing PHP</h1>
<h2>Windows 10</h2>
<ol class="body-ol">
<li>Download PHP from the <a href="https://windows.php.net/download">PHP For Windows</a> site. I recommend downloading the non-thread safe PHP 7.1 or 7.2 (unless you want to use Apache and you know if you do). You will also need to choose 32 bit (x86) or 64 bit (x64) depending on your version of Windows.</li>
<li>Download the corresponding Visual C++ Redistributable from the same site. For PHP 7.1, it is VC14 and for PHP 7.2, it is VC15.</li>
<li>Install the VC redistrubutable using the downloaded executable.</li>
<li>The PHP download comes in a zip folder. Extract the zip folder into your user directory in a folder named <code>php</code>. The path should look like <code>C:\Users\username\php</code>.</li>
<li>Next, we need to add PHP to your environment variables path. Open "System" under "Control Panel". Go to the "Advanced" tab and select "Environment Variables". In the "User variables" section, select "Path" and click the "Edit" button. You will see a list of different folder paths. Add the PHP path to the list using the "Add" button. The PHP path is the same folder where you extracted PHP.</li>
<li>Now, you can open PowerShell or Command Prompt and type <code>php -v</code> to verify PHP was installed correctly. It will return the installed version of PHP on your system.</li>
</ol>
<h2>MacOS</h2>
<p>Good news! Each version of MacOS comes with PHP by default. However, if you are running an older version of MacOS or OS X, then you will need to manually install a new version of PHP. To check your current version, open Terminal and type <code>php -v</code>. You will need at least PHP 7.1 on your computer to use all the features in these tutorials.</p>
<ol class="body-ol">
<li>Install <a href="https://brew.sh/">Homebrew</a>.</li>
<li>Run <code>brew install php</code> in Terminal.</li>
<li>Check your version is correct by running <code>php -v</code> in Terminal.</li>
</ol>
</div>
</div>
<?php partial('menu_modal') ?>
<?php partial('footer') ?>

View File

@ -1,177 +0,0 @@
<?php
use Apprentice\Page;
return [
/*
*
* Directory for SVG icons that can be used in templates
*
*/
'icon_dir' => __DIR__ . '/assets/icons',
/*
*
* Directory holding chapter files
*
*/
'chapter_dir' => __DIR__ . '/chapters',
/*
*
* Directory to PHP templates used by pages
*
*/
'templates_dir' => __DIR__ . '/assets/templates',
/*
*
* Output directory for html files and assets
*
*/
'output_dir' => __DIR__ . '/.build',
/*
*
* Static files that should be loaded into output directory
*
*/
'files_dir' => __DIR__ . '/assets/files',
/*
*
* Configuration for all pages on the site
*
*/
'pages' => [
Page::create('index', null, [], 'index.phtml'),
Page::create('installing-php', null, [], 'installing-php.phtml'),
Page::create('credits', null, [], 'credits.phtml'),
Page::create('404', null, [], '404.phtml'),
Page::create('basics', 'basics/01-basics.md', [
'title' => 'Basics',
'subtitle' => 'Getting started',
'next' => 'variables',
]),
Page::create('variables', 'basics/02-variables.md', [
'title' => 'Variables',
'subtitle' => 'The building blocks of PHP',
'previous' => 'basics',
'next' => 'arithmetic',
]),
Page::create('arithmetic', 'basics/03-arithmetic.md', [
'title' => 'Arithmetic',
'subtitle' => 'Doing math like a pro',
'previous' => 'variables',
'next' => 'strings',
]),
Page::create('strings', 'basics/04-strings.md', [
'title' => 'Strings',
'subtitle' => 'Working with text',
'previous' => 'arithmetic',
'next' => 'comparisons',
]),
Page::create('comparisons', 'basics/05-comparisons.md', [
'title' => 'Comparisons',
'subtitle' => 'Equality checking',
'previous' => 'strings',
'next' => 'boolean-logic',
]),
Page::create('boolean-logic', 'basics/06-boolean-logic.md', [
'title' => 'Boolean Logic',
'subtitle' => 'Is it a yes or a no?',
'previous' => 'comparisons',
'next' => 'conditionals',
]),
Page::create('conditionals', 'basics/07-conditionals.md', [
'title' => 'Conditionals',
'subtitle' => 'Checking the if before the what',
'previous' => 'boolean-logic',
'next' => 'loops',
]),
Page::create('loops', 'basics/08-loops.md', [
'title' => 'Loops',
'subtitle' => 'Increase your repetitions',
'previous' => 'conditionals',
'next' => 'arrays',
]),
Page::create('arrays', 'basics/09-arrays.md', [
'title' => 'Arrays',
'subtitle' => 'Time to make a list',
'previous' => 'loops',
'next' => 'functions',
]),
Page::create('functions', 'basics/10-functions.md', [
'title' => 'Functions',
'subtitle' => 'Reusable code',
'previous' => 'arrays',
'next' => 'classes',
]),
Page::create('classes', 'basics/11-classes.md', [
'title' => 'Classes',
'subtitle' => 'Object-oriented programming',
'previous' => 'functions',
'next' => 'classes-inheritance',
]),
Page::create('classes-inheritance', 'basics/12-classes-inheritance.md', [
'title' => 'Classes: Inheritance',
'subtitle' => 'Extend your objects',
'previous' => 'classes',
'next' => 'classes-visibility',
]),
Page::create('classes-visibility', 'basics/13-classes-visibility.md', [
'title' => 'Classes: Visibility',
'subtitle' => 'Privatizing your objects',
'previous' => 'classes-inheritance',
'next' => 'classes-constructor',
]),
Page::create('classes-constructor', 'basics/14-classes-constructor.md', [
'title' => 'Classes: Constructor',
'subtitle' => 'Construct your objects',
'previous' => 'classes-visibility',
'next' => 'static',
]),
Page::create('static', 'basics/15-static.md', [
'title' => 'Static',
'subtitle' => 'Class properties and methods',
'previous' => 'classes-constructor',
'next' => 'interfaces',
]),
Page::create('interfaces', 'basics/16-interfaces.md', [
'title' => 'Interfaces',
'subtitle' => 'Writing code contracts',
'previous' => 'static',
'next' => 'abstract',
]),
Page::create('abstract', 'basics/17-abstract.md', [
'title' => 'Abstract Classes',
'subtitle' => 'Inheriting an interface',
'previous' => 'interfaces',
'next' => 'exceptions',
]),
Page::create('exceptions', 'basics/18-exceptions.md', [
'title' => 'Exceptions',
'subtitle' => 'Throwing errors',
'previous' => 'abstract',
'next' => 'web/http',
]),
Page::create('web/http', 'web/01-http.md', [
'title' => 'HTTP',
'subtitle' => 'Understanding the format of the web',
'previous' => 'exceptions',
'next' => 'web/http-post',
]),
Page::create('web/http-post', 'web/02-http-post.md', [
'title' => 'HTTP POST',
'subtitle' => 'Sending data to a server',
'previous' => 'web/http',
'next' => 'web/http-server',
]),
Page::create('web/http-server', 'web/03-http-server.md', [
'title' => 'PHP HTTP Server',
'subtitle' => 'Handling HTTP Requests in PHP',
'previous' => 'web/http-post',
'next' => '',
]),
],
];

View File

@ -1,3 +1,11 @@
+++
title = "Variables"
description = "The building blocks of PHP"
tags = ["php", "variables"]
slug = "variables"
previous = "basics.html"
next = "arithmetic.html"
+++
The variable is the basic building block of any programming language.
In PHP, all variables start with a dollar sign.
```php

View File

@ -1,3 +1,11 @@
+++
title = "Arithmetic"
description = "Doing math like a pro"
tags = ["php", "arithmetic", "math"]
slug = "arithmetic"
previous = "variables.html"
next = "strings.html"
+++
Now that we know how to create variables, let's look at doing some math.
```php
<?php

View File

@ -1,3 +1,11 @@
+++
title = "Strings"
description = "Working with text"
tags = ["php", "strings"]
slug = "strings"
previous = "arithmetic.html"
next = "comparisons.html"
+++
As seen in the first chapter, a string is a group of characters created by
surrounding text in single or double quotes.
```php

View File

@ -1,3 +1,11 @@
+++
title = "Comparisons"
description = "Equality checking"
tags = ["php", "comparisons"]
slug = "comparisons"
previous = "strings.html"
next = "boolean-logic.html"
+++
A boolean is a value that is always 0 or 1, yes or no, on or off.
In PHP, a boolean is represented by the words true and false.
While programming, you will often want to know if something is positive or negative.

View File

@ -1,3 +1,11 @@
+++
title = "Boolean Logic"
description = "Is it a yes or a no?"
tags = ["php", "booleans"]
slug = "boolean-logic"
previous = "comparisons.html"
next = "conditionals.html"
+++
Boolean logic is used to combine booleans to return another boolean.
Using double ampersands tells PHP to check if both values are true.

View File

@ -1,3 +1,11 @@
+++
title = "Conditionals"
description = "Checking the if before the what"
tags = ["php", "conditionals", "if", "switch"]
slug = "conditionals"
previous = "boolean-logic.html"
next = "loops.html"
+++
When writing code, there will be times when you need to perform actions only under certain circumstances.
There are several ways to control execution in PHP.
We will start with an if statement.

View File

@ -1,3 +1,11 @@
+++
title = "Loops"
description = "Increase your repetitions"
tags = ["php", "loop", "foreach", "for"]
slug = "loops"
previous = "conditionals.html"
next = "arrays.html"
+++
A loop tells PHP to run a block of code more than once.
A classic loop is a while loop.
A `while` loop will continue to run the block of code as long as the value in parentheses is true.

View File

@ -1,3 +1,11 @@
+++
title = "Arrays"
description = "Time to make a list"
tags = ["php", "array", "list"]
slug = "arrays"
previous = "loops.html"
next = "functions.html"
+++
In PHP, arrays are used to store a list of items in a single variable.
There are two ways to create an array.

View File

@ -1,3 +1,11 @@
+++
title = "Functions"
description = "Reusable code"
tags = ["php", "function"]
slug = "functions"
previous = "arrays.html"
next = "classes.html"
+++
A function allows you to store code under a name and then execute
that code later.

View File

@ -1,3 +1,11 @@
+++
title = "Classes"
description = "Object-oriented programming"
tags = ["php", "class", "object-oriented programming"]
slug = "classes"
previous = "functions.html"
next = "classes-inheritance.html"
+++
Classes allow you to define your own data types. All classes start with the
class keyword followed by the name of the class and opening and closing curly braces.
```php

View File

@ -1,3 +1,11 @@
+++
title = "Classes: Inheritance"
description = "Extend your objects"
tags = ["php", "extend", "inheritance"]
slug = "classes-inheritance"
previous = "classes.html"
next = "classes-visibility.html"
+++
In PHP, a class can extend another class, inheriting the parent class'
properties and methods. To make a class a child of another, use the `extends`
keyword after the class name.

View File

@ -1,3 +1,11 @@
+++
title = "Classes: Visibility"
description = "Privatizing your objects"
tags = ["php", "private", "protected", "visibility"]
slug = "classes-visibility"
previous = "classes-inheritance.html"
next = "classes-constructor.html"
+++
In the last chapter, we defined properties and methods on the class using the public keyword.
You can also define them using the `protected` and `private` keywords.
Both keywords prevent the properties and functions from being accessible outside the object.

View File

@ -1,3 +1,11 @@
+++
title = "Classes: Constructor"
description = "Construct your objects"
tags = ["php", "construct", "constructor", "new"]
slug = "classes-constructor"
previous = "classes-visibility.html"
next = "static.html"
+++
Whenever you create an object in PHP, you put parentheses after the class name.
In the previous examples, we always left the parentheses empty.
```php

View File

@ -1,3 +1,11 @@
+++
title = "Static"
description = "Class properties and methods"
tags = ["php", "static"]
slug = "static"
previous = "classes-constructor.html"
next = "interfaces.html"
+++
When writing a class, all of the properties and methods are being defined for the object
that will be created from the class.
```php

View File

@ -1,3 +1,11 @@
+++
title = "Interfaces"
description = "Writing code contracts"
tags = ["php", "interface"]
slug = "interfaces"
previous = "static.html"
next = "abstract.html"
+++
The word `interface` is a confusing term because it is used for so many different concepts.
Most often, we use it to describe the appearance of an app and how a user interacts with it.
However, in PHP, an interface is a special construct that acts as a contract for classes.

View File

@ -1,3 +1,11 @@
+++
title = "Abstract"
description = "Inheriting an interface"
tags = ["php", "abstract"]
slug = "abstract"
previous = "interfaces.html"
next = "exceptions.html"
+++
Abstract classes are similar to interfaces in that they define methods that a sub-class must implement.
However, an abstract class can also have normal methods. To create an abstract class, use the `abstract`
keyword followed by `class` and the name of the class.

View File

@ -1,3 +1,11 @@
+++
title = "Exceptions"
description = "Throwing errors"
tags = ["php", "exception"]
slug = "exceptions"
previous = "abstract.html"
next = "web/http.html"
+++
Sometimes things go wrong when someone uses your code. How do we handle this situation?
PHP has Exceptions to define errors and the ability to `throw` them to stop code
execution and tell the user of your code that something is wrong.

33
content/credits.md Normal file
View File

@ -0,0 +1,33 @@
+++
title = "Credits"
+++
<div>
<p>
PHP Apprentice was inspired by
<a href="https://gobyexample.com/">Go By Example</a> and by <a href="https://elixirschool.com/">Elixir School</a>. Both sites offer excellent, quality documentation in Go and Elixir and I want PHP Apprentice to provide the same
experience for the PHP programming language.
</p>
<p>
Sites used as a reference while writing PHP Apprentice:
<ul>
<li><a href="https://secure.php.net/" target="_blank">php.net</a></li>
<li><a href="https://www.phptherightway.com/" target="_blank">PHP The Right Way</a></li>
</ul>
</p>
<p>
PHP Apprentice was built using several open source projects, besides PHP itself.
Thank you to each of these maintainers for providing great libraries!
<ul>
<li><a href="https://prismjs.com/" target="_blank">Prism.js</a></li>
<li><a href="https://www.zondicons.com/" target="_blank">Zondicons by Steve Schoger</a></li>
<li><a href="https://postcss.org/" target="_blank">PostCSS</a></li>
<li><a href="https://symfony.com/doc/current/components/console.html" target="_blank">Symfony CLI</a></li>
<li><a href="https://symfony.com/doc/current/frontend.html" target="_blank">Symfony Encore</a></li>
<li><a href="https://parsedown.org/" target="_blank">Parsedown</a></li>
</ul>
</p>
<hr />
<p>
Created and managed by <a href="https://twitter.com/restoreddev" target="_blank">Andrew Davis @restoreddev</a>.
</p>
</div>

22
content/installing-php.md Normal file
View File

@ -0,0 +1,22 @@
+++
title = "Installing PHP"
+++
<div>
<h2>Windows 10</h2>
<ol class="body-ol">
<li>Download PHP from the <a href="https://windows.php.net/download">PHP For Windows</a> site. I recommend downloading the non-thread safe PHP 7.1 or 7.2 (unless you want to use Apache and you know if you do). You will also need to choose 32 bit (x86) or 64 bit (x64) depending on your version of Windows.</li>
<li>Download the corresponding Visual C++ Redistributable from the same site. For PHP 7.1, it is VC14 and for PHP 7.2, it is VC15.</li>
<li>Install the VC redistrubutable using the downloaded executable.</li>
<li>The PHP download comes in a zip folder. Extract the zip folder into your user directory in a folder named <code>php</code>. The path should look like <code>C:\Users\username\php</code>.</li>
<li>Next, we need to add PHP to your environment variables path. Open "System" under "Control Panel". Go to the "Advanced" tab and select "Environment Variables". In the "User variables" section, select "Path" and click the "Edit" button. You will see a list of different folder paths. Add the PHP path to the list using the "Add" button. The PHP path is the same folder where you extracted PHP.</li>
<li>Now, you can open PowerShell or Command Prompt and type <code>php -v</code> to verify PHP was installed correctly. It will return the installed version of PHP on your system.</li>
</ol>
<h2>MacOS</h2>
<p>Good news! Each version of MacOS comes with PHP by default. However, if you are running an older version of MacOS or OS X, then you will need to manually install a new version of PHP. To check your current version, open Terminal and type <code>php -v</code>. You will need at least PHP 7.1 on your computer to use all the features in these tutorials.</p>
<ol class="body-ol">
<li>Install <a href="https://brew.sh/">Homebrew</a>.</li>
<li>Run <code>brew install php</code> in Terminal.</li>
<li>Check your version is correct by running <code>php -v</code> in Terminal.</li>
</ol>
</div>

View File

@ -1,3 +1,11 @@
+++
title = "HTTP"
description = "Understanding the format of the web"
tags = ["web", "http"]
slug = "http"
previous = "exceptions.html"
next = "web/http-post.html"
+++
HTTP stands for Hypertext Transfer Protocol. It is a standard for how requests and responses should be formatted for
a server and a web browser. When you open a link in your web browser, you are sending a HTTP request to a server and it
is responding with a HTTP response. The browser then takes the response, parses it and displays it to the user.

View File

@ -1,3 +1,11 @@
+++
title = "HTTP Post"
description = "Sending data to a server"
tags = ["web", "http", "post"]
slug = "http-post"
previous = "web/http.html"
next = "web/http-server.html"
+++
HTTP uses multiple different request types for indicating actions that should be performed on the server. The most common ones
you will use are:
- GET -> Retrieve a resource

View File

@ -1,3 +1,10 @@
+++
title = "PHP HTTP Server"
description = "Handling HTTP Requests in PHP"
tags = ["php", "http", "server"]
slug = "http-server"
previous = "web/http-post.html"
+++
In PHP, you usually use a separate web server program that accepts HTTP requests and passes them to PHP to create a response. Common examples of separate web server programs are Apache and Nginx. However, PHP has a built in web server we can use during development.
To use the development web server, open a terminal and a new folder for holding your code. Create a file called `index.php` and put this PHP code in it:

View File

@ -1,7 +1,9 @@
<div class="container center">
<a href="/" class="logo-404"><?= icon('elephant') ?></a>
<p class="message-404">Whoops! The page could not be found.</p>
<div class="toc-404">
<?php partial('table_of_contents') ?>
{{ define "main" }}
<div class="container center">
<a href="/" class="logo-404">{{ readFile "static/elephant.svg" | safeHTML }}</a>
<p class="message-404">Whoops! The page could not be found.</p>
<div class="toc-404">
{{ partial "table_of_contents.html" . }}
</div>
</div>
</div>
{{ end }}

View File

@ -3,7 +3,7 @@
{{ partial "menu_button.html" . }}
<h1>{{ .Title }}</h1>
<h3 class="subtitle">{{ .Description }}</h3>
<h2 class="subtitle">{{ .Description }}</h2>
{{ .Content }}
<div class="clearfix"></div>