diff --git a/assets/css/site.css b/assets/css/site.css
index 1726644..2bd3d15 100644
--- a/assets/css/site.css
+++ b/assets/css/site.css
@@ -17,13 +17,13 @@ button {
}
code {
background-color: #F0F0F0;
- font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-family: Menlo, Monaco, Consolas, "Noto Mono", "Liberation Mono", "Courier New", monospace !important;
font-size: 14px;
padding: 0.10em 0.25em;
}
pre, pre code {
background-color: transparent;
- font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-family: Menlo, Monaco, Consolas, "Noto Mono", "Liberation Mono", "Courier New", monospace !important;
font-size: 14px;
margin: 0 !important;
border-radius: 0 !important;
diff --git a/assets/templates/_table_of_contents.phtml b/assets/templates/_table_of_contents.phtml
index cb71f4e..87cbbfa 100644
--- a/assets/templates/_table_of_contents.phtml
+++ b/assets/templates/_table_of_contents.phtml
@@ -31,6 +31,7 @@
- HTTP
- HTTP POST
+ - PHP HTTP Server
Credits
diff --git a/chapters/web/02-http-post.md b/chapters/web/02-http-post.md
index 1141a2a..8b68561 100644
--- a/chapters/web/02-http-post.md
+++ b/chapters/web/02-http-post.md
@@ -32,5 +32,3 @@ POST requests are used to send data to a server. A server will process the data
We have been talking a lot about how a server can process requests and send responses. How do programmers develop a server to handle HTTP requests? With PHP!
PHP was built with web server development in mind. Let us write our first PHP server script.
-
-
diff --git a/chapters/web/03-http-server.md b/chapters/web/03-http-server.md
new file mode 100644
index 0000000..667105d
--- /dev/null
+++ b/chapters/web/03-http-server.md
@@ -0,0 +1,58 @@
+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:
+```php
+";
+foreach ($headers as $key => $header) {
+ echo "$key: $header
";
+}
+```
+Reload `localhost:8080` and you will see the main request line and all of the headers printed on the web page. The `
` tag is HTML for a new line. Since we are outputting to a web browser, we can no longer use `"\n"` to create a new line.
+
+By default, PHP will generate the necessary response line and headers. If you open your browser console and open the network tab, you can see the response code and headers.
+```http
+HTTP/1.1 200 OK
+Host: localhost:8080
+Date: Sun, 28 Apr 2019 10:19:25 -0500
+Connection: close
+X-Powered-By: PHP/7.2.17
+Content-type: text/html; charset=UTF-8
+```
+PHP set the response code to `200 OK` and the content type to `text/html`. Even though PHP will output good defaults, we can change them in our code if we want. Update your `index.php` file with this code:
+```php
+ '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' => '',
]),
],
diff --git a/package-lock.json b/package-lock.json
index 175c934..e8ec015 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3895,7 +3895,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"aproba": {
"version": "1.2.0",
@@ -3916,12 +3917,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -3936,17 +3939,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"core-util-is": {
"version": "1.0.2",
@@ -4063,7 +4069,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"ini": {
"version": "1.3.5",
@@ -4075,6 +4082,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -4089,6 +4097,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -4096,12 +4105,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"minipass": {
"version": "2.2.4",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"safe-buffer": "^5.1.1",
"yallist": "^3.0.0"
@@ -4120,6 +4131,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"minimist": "0.0.8"
}
@@ -4200,7 +4212,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"object-assign": {
"version": "4.1.1",
@@ -4212,6 +4225,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"wrappy": "1"
}
@@ -4297,7 +4311,8 @@
"safe-buffer": {
"version": "5.1.1",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"safer-buffer": {
"version": "2.1.2",
@@ -4333,6 +4348,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -4352,6 +4368,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
+ "optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -4395,12 +4412,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
},
"yallist": {
"version": "3.0.2",
"bundled": true,
- "dev": true
+ "dev": true,
+ "optional": true
}
}
},