(window.webpackJsonp=window.webpackJsonp||[]).push([[2459],{2867:function(t,e,s){"use strict";s.r(e);var a=s(31),n=Object(a.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"getting-started-with-php"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#getting-started-with-php"}},[t._v("#")]),t._v(" Getting started with PHP")]),t._v(" "),s("h2",{attrs:{id:"html-output-from-web-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#html-output-from-web-server"}},[t._v("#")]),t._v(" HTML output from web server")]),t._v(" "),s("p",[t._v("PHP can be used to add content to HTML files. While HTML is processed directly by a web browser, PHP scripts are executed by a web server and the resulting HTML is sent to the browser.")]),t._v(" "),s("p",[t._v("The following HTML markup contains a PHP statement that will add "),s("code",[t._v("Hello World!")]),t._v(" to the output:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token doctype"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("head")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("title")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("PHP!"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n")])])]),s("p",[t._v("When this is saved as a PHP script and executed by a web server, the following HTML will be sent to the user's browser:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("DOCTYPE")]),t._v(" html"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("html"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("head"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("title"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("PHP")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("title"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("head"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("Hello world"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("p"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("body"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("html"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\n")])])]),s("p",[s("code",[t._v("echo")]),t._v(" also has a shortcut syntax, which lets you immediately print a value. Prior to PHP 5.4.0, this short syntax only works with the "),s("a",{attrs:{href:"http://php.net/manual/en/ini.core.php#ini.short-open-tag",target:"_blank",rel:"noopener noreferrer"}},[t._v("short_open_tag"),s("OutboundLink")],1),t._v(" configuration setting enabled.")]),t._v(" "),s("p",[t._v("For example, consider the following code:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n")])])]),s("p",[t._v("Its output is identical to the output of the following:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n")])])]),s("p",[t._v("In real-world applications, all data output by PHP to an HTML page should be properly "),s("strong",[t._v("escaped")]),t._v(" to prevent XSS ("),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/2781/security/11883/cross-site-scripting-xss",target:"_blank",rel:"noopener noreferrer"}},[t._v("Cross-site scripting"),s("OutboundLink")],1),t._v(") attacks or text corruption.")]),t._v(" "),s("p",[t._v("See also: "),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/232/types/1027/strings",target:"_blank",rel:"noopener noreferrer"}},[t._v("Strings"),s("OutboundLink")],1),t._v(" and "),s("a",{attrs:{href:"http://www.php-fig.org/psr/psr-1/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PSR-1"),s("OutboundLink")],1),t._v(", which describes best practices, including the proper use of short tags ("),s("code",[t._v("")]),t._v(").")]),t._v(" "),s("h2",{attrs:{id:"hello-world"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hello-world"}},[t._v("#")]),t._v(" Hello, World!")]),t._v(" "),s("p",[t._v("The most widely used language construct to print output in PHP is "),s("code",[t._v("echo")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello, World!\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("Alternatively, you can also use "),s("code",[t._v("print")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello, World!\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("Both statements perform the same function, with minor differences:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("echo")]),t._v(" has a "),s("code",[t._v("void")]),t._v(" return, whereas "),s("code",[t._v("print")]),t._v(" returns an "),s("code",[t._v("int")]),t._v(" with a value of "),s("code",[t._v("1")])]),t._v(" "),s("li",[s("code",[t._v("echo")]),t._v(" can take multiple arguments (without parentheses only), whereas "),s("code",[t._v("print")]),t._v(" only takes one argument")]),t._v(" "),s("li",[s("code",[t._v("echo")]),t._v(" is "),s("a",{attrs:{href:"http://www.phpbench.com/",target:"_blank",rel:"noopener noreferrer"}},[t._v("slightly faster"),s("OutboundLink")],1),t._v(" than "),s("code",[t._v("print")])])]),t._v(" "),s("p",[t._v("Both "),s("code",[t._v("echo")]),t._v(" and "),s("code",[t._v("print")]),t._v(" are language constructs, not functions. That means they do not require parentheses around their arguments. For cosmetic consistency with functions, parentheses can be included. Extensive examples of the use of "),s("code",[t._v("echo")]),t._v(" and "),s("code",[t._v("print")]),t._v(" are "),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/6695/outputting-the-value-of-a-variable/730/echo-and-print",target:"_blank",rel:"noopener noreferrer"}},[t._v("available elsewhere"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("C-style "),s("code",[t._v("printf")]),t._v(" and related functions are available as well, as in the following example:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("printf")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"%s\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello, World!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("See "),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/6695/outputting-the-value-of-a-variable",target:"_blank",rel:"noopener noreferrer"}},[t._v("Outputting the value of a variable"),s("OutboundLink")],1),t._v(" for a comprehensive introduction of outputting variables in PHP.")]),t._v(" "),s("h2",{attrs:{id:"non-html-output-from-web-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#non-html-output-from-web-server"}},[t._v("#")]),t._v(" Non-HTML output from web server")]),t._v(" "),s("p",[t._v("In some cases, when working with a web server, overriding the web server's default content type may be required. There may be cases where you need to send data as "),s("code",[t._v("plain text")]),t._v(", "),s("code",[t._v("JSON")]),t._v(", or "),s("code",[t._v("XML")]),t._v(", for example.")]),t._v(" "),s("p",[t._v("The "),s("a",{attrs:{href:"http://php.net/manual/en/function.header.php",target:"_blank",rel:"noopener noreferrer"}},[s("code",[t._v("header()")]),s("OutboundLink")],1),t._v(" function can send a raw HTTP header. You can add the "),s("code",[t._v("Content-Type")]),t._v(" header to notify the browser of the content we are sending.")]),t._v(" "),s("p",[t._v("Consider the following code, where we set "),s("code",[t._v("Content-Type")]),t._v(" as "),s("code",[t._v("text/plain")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("header")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Content-Type: text/plain"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello World"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("This will produce a plain text document with the following content:")]),t._v(" "),s("blockquote"),t._v(" "),s("p",[t._v("Hello World")]),t._v(" "),s("p",[t._v("To produce "),s("a",{attrs:{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse",target:"_blank",rel:"noopener noreferrer"}},[t._v("JSON"),s("OutboundLink")],1),t._v(" content, use the "),s("code",[t._v("application/json")]),t._v(" content type instead:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("header")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Content-Type: application/json"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Create a PHP data array.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$data")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"response"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello World"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// json_encode will convert it to a valid JSON string.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("json_encode")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token variable"}},[t._v("$data")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("This will produce a document of type "),s("code",[t._v("application/json")]),t._v(" with the following content:")]),t._v(" "),s("blockquote"),t._v(" "),s("p",[t._v('{"response":"Hello World"}')]),t._v(" "),s("p",[t._v("Note that the "),s("code",[t._v("header()")]),t._v(" function must be called before PHP produces any output, or the web server will have already sent headers for the response. So, consider the following code:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Error: We cannot send any output before the headers")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// All headers must be sent before ANY PHP output")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("header")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Content-Type: text/plain"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"World"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])])]),s("p",[t._v("This will produce a warning:")]),t._v(" "),s("blockquote"),t._v(" "),s("p",[s("strong",[t._v("Warning:")]),t._v(" Cannot modify header information - headers already sent by (output started at /dir/example.php:2) in "),s("strong",[t._v("/dir/example.php")]),t._v(" on line "),s("strong",[t._v("3")])]),t._v(" "),s("p",[t._v("When using "),s("code",[t._v("header()")]),t._v(", its output needs to be the first byte that's sent from the server. For this reason it's important to not have empty lines or spaces in the beginning of the file before the PHP opening tag "),s("code",[t._v("")]),t._v(" from files that contain only PHP and from blocks of PHP code at the very end of a file.")]),t._v(" "),s("p",[t._v("View the "),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/541/output-buffers#t=201607211507355441007",target:"_blank",rel:"noopener noreferrer"}},[s("strong",[t._v("output buffering section")]),s("OutboundLink")],1),t._v(" to learn how to 'catch' your content into a variable to output later, for example, after outputting headers.")]),t._v(" "),s("h2",{attrs:{id:"php-built-in-server"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-built-in-server"}},[t._v("#")]),t._v(" PHP built-in server")]),t._v(" "),s("p",[t._v("PHP 5.4+ comes with a built-in development server. It can be used to run applications without having to install a production HTTP server such as nginx or Apache. The built-in server is only designed to be used for development and testing purposes.")]),t._v(" "),s("p",[t._v("It can be started by using the "),s("code",[t._v("-S")]),t._v(" flag:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[t._v("php "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("S")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("host"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("port"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\n")])])]),s("h3",{attrs:{id:"example-usage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-usage"}},[t._v("#")]),t._v(" Example usage")]),t._v(" "),s("ol",[s("li",[t._v("Create an "),s("code",[t._v("index.php")]),t._v(" file containing:")])]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("port"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("directory"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\n")])])]),s("p",[t._v("E.g. if you have a "),s("code",[t._v("public/")]),t._v(" directory in your project you can serve your project from that directory using "),s("code",[t._v("php -S localhost:8080 -t public/")]),t._v(".")]),t._v(" "),s("h3",{attrs:{id:"logs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#logs"}},[t._v("#")]),t._v(" Logs")]),t._v(" "),s("p",[t._v("Every time a request is made from the development server, a log entry like the one below is written to the command line.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Mon Aug "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("18")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("19")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2016")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("52455")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("\n\n")])])]),s("h2",{attrs:{id:"php-cli"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#php-cli"}},[t._v("#")]),t._v(" PHP CLI")]),t._v(" "),s("p",[t._v("PHP can also be run from command line directly using the CLI (Command Line Interface).")]),t._v(" "),s("p",[t._v("CLI is basically the same as PHP from web servers, except some differences in terms of standard input and output.")]),t._v(" "),s("h3",{attrs:{id:"triggering"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#triggering"}},[t._v("#")]),t._v(" Triggering")]),t._v(" "),s("p",[t._v("The PHP CLI allows four ways to run PHP code:")]),t._v(" "),s("ol",[s("li",[t._v("Standard input. Run the "),s("code",[t._v("php")]),t._v(" command without any arguments, but pipe PHP code into it: "),s("pre",[t._v("echo ' echo "Hello world!";\nHello world!')])])]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[t._v("Example.php"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n```php\n"),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\nStdout 6\n\n")])])]),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[t._v("$ php Example"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("php "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("stderr"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("log "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("stdout"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\\\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STDOUT")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" cat stdout"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\\\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STDERR")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" cat stderr"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("log\\\n\n"),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STDOUT")]),t._v("\nStdout "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nStdout "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("STDERR")]),t._v("\nStderr "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("PHP")]),t._v(" Notice"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Stderr "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("Example"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("php on line "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token constant"}},[t._v("PHP")]),t._v(" Fatal error"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Uncaught RuntimeException"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Stderr "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),t._v("\n in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("Example"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("php"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v("\nStack trace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("#0 {main}")]),t._v("\n thrown in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("Example"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(".")]),t._v("php on line "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v("\n\n")])])]),s("h3",{attrs:{id:"input"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#input"}},[t._v("#")]),t._v(" Input")]),t._v(" "),s("p",[t._v("See: "),s("a",{attrs:{href:"http://stackoverflow.com/documentation/php/2880/command-line-interface-cli",target:"_blank",rel:"noopener noreferrer"}},[t._v("Command Line Interface (CLI)"),s("OutboundLink")],1)]),t._v(" "),s("h2",{attrs:{id:"instruction-separation"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#instruction-separation"}},[t._v("#")]),t._v(" Instruction Separation")]),t._v(" "),s("p",[t._v("Just like most other C-style languages, each statement is terminated with a semicolon. Also, a closing tag is used to terminate the last line of code of the PHP block.")]),t._v(" "),s("p",[t._v("If the last line of PHP code ends with a semicolon, the closing tag is optional if there is no code following that final line of code. For example, we can leave out the closing tag after "),s("code",[t._v('echo "No error";')]),t._v(" in the following example:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("html")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("body")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n\n")])])]),s("p",[t._v("We can also leave out the semicolon of the last statement in a PHP code block if that code block has a closing tag:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v(" \n\n")])])]),s("p",[t._v("It is generally recommended to always use a semicolon and use a closing tag for every PHP code block except the last PHP code block, if no more code follows that PHP code block.")]),t._v(" "),s("p",[t._v("So, your code should basically look like this:")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Some HTML code goes here"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("p")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("Some HTML code goes here"),s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token tag"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n\n")])])]),s("h3",{attrs:{id:"echo-tags"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#echo-tags"}},[t._v("#")]),t._v(" Echo Tags")]),t._v(" "),s("p",[t._v("These tags are available in all PHP versions, and since PHP 5.4 are always enabled. In previous versions, echo tags could only be enabled in conjunction with short tags.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n\n")])])]),s("h3",{attrs:{id:"short-tags"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#short-tags"}},[t._v("#")]),t._v(" Short Tags")]),t._v(" "),s("p",[t._v("You can disable or enable these tags with the option "),s("code",[t._v("short_open_tag")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token php language-php"}},[s("span",{pre:!0,attrs:{class:"token delimiter important"}},[t._v("")])]),t._v("\n\n")])])]),s("p",[t._v("Short tags:")]),t._v(" "),s("ul",[s("li",[t._v("are disallowed in all major PHP "),s("a",{attrs:{href:"http://www.php-fig.org/psr/psr-1/",target:"_blank",rel:"noopener noreferrer"}},[t._v("coding standards"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("are discouraged in "),s("a",{attrs:{href:"https://secure.php.net/manual/en/language.basic-syntax.phptags.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("the official documentation"),s("OutboundLink")],1)]),t._v(" "),s("li",[t._v("are disabled by default in most distributions")]),t._v(" "),s("li",[t._v("interfere with inline XML's processing instructions")]),t._v(" "),s("li",[t._v("are not accepted in code submissions by most open source projects")])]),t._v(" "),s("h3",{attrs:{id:"asp-tags"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#asp-tags"}},[t._v("#")]),t._v(" ASP Tags")]),t._v(" "),s("p",[t._v("By enabling the "),s("code",[t._v("asp_tags")]),t._v(" option, ASP-style tags can be used.")]),t._v(" "),s("div",{staticClass:"language-php extra-class"},[s("pre",{pre:!0,attrs:{class:"language-php"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("echo")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string double-quoted-string"}},[t._v('"Hello World"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n\n")])])]),s("p",[t._v("These are an historic quirk and should never be used. They were removed in PHP 7.0.")]),t._v(" "),s("h4",{attrs:{id:"remarks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#remarks"}},[t._v("#")]),t._v(" Remarks")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://i.stack.imgur.com/xEvI0.png",target:"_blank",rel:"noopener noreferrer"}},[s("img",{attrs:{src:"https://i.stack.imgur.com/xEvI0.png",alt:"enter image description here"}}),s("OutboundLink")],1)]),t._v(" "),s("p",[s("strong",[s("a",{attrs:{href:"https://php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP"),s("OutboundLink")],1)]),t._v(" (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source programming language. It is especially suited for web development. The unique thing about PHP is that it serves both beginners as well as experienced developers. It has a low barrier to entry so it is easy to get started with, and at the same time, it provides advanced features offered in other programming languages.")]),t._v(" "),s("p",[s("strong",[t._v("Open-Source")])]),t._v(" "),s("p",[t._v("It's an open-source project. Feel free to "),s("a",{attrs:{href:"https://secure.php.net/get-involved.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("get involved"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[s("strong",[t._v("Language Specification")])]),t._v(" "),s("p",[t._v("PHP has a "),s("a",{attrs:{href:"https://github.com/php/php-langspec",target:"_blank",rel:"noopener noreferrer"}},[t._v("language specification"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[s("strong",[t._v("Supported Versions")])]),t._v(" "),s("p",[t._v("Currently, there are three "),s("a",{attrs:{href:"https://secure.php.net/supported-versions.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("supported versions"),s("OutboundLink")],1),t._v(": 5.6, 7.0 and 7.1.")]),t._v(" "),s("p",[t._v("Each release branch of PHP is fully supported for two years from its initial stable release. After this two year period of active support, each branch is then supported for an additional year for critical security issues only. Releases during this period are made on an as-needed basis: there may be multiple point releases, or none, depending on the number of reports.")]),t._v(" "),s("p",[s("strong",[t._v("Unsupported Versions")])]),t._v(" "),s("p",[t._v("Once the three years of support are completed, the branch reaches its end of life and is no longer supported.")]),t._v(" "),s("p",[t._v("A "),s("a",{attrs:{href:"https://secure.php.net/eol.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("table of end of life branches"),s("OutboundLink")],1),t._v(" is available.")]),t._v(" "),s("p",[s("strong",[t._v("Issue Tracker")])]),t._v(" "),s("p",[t._v("Bugs and other issues are tracked at "),s("a",{attrs:{href:"https://bugs.php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://bugs.php.net/"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[s("strong",[t._v("Mailing Lists")])]),t._v(" "),s("p",[t._v("Discussions about PHP development and usage are held on the "),s("a",{attrs:{href:"http://php.net/mailing-lists.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("PHP mailing lists"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[s("strong",[t._v("Official Documentation")])]),t._v(" "),s("p",[t._v("Please help to maintain or to translate the "),s("a",{attrs:{href:"https://secure.php.net/docs.php",target:"_blank",rel:"noopener noreferrer"}},[t._v("official PHP documentation"),s("OutboundLink")],1),t._v(".")]),t._v(" "),s("p",[t._v("You might use the editor at "),s("a",{attrs:{href:"http://edit.php.net/",target:"_blank",rel:"noopener noreferrer"}},[t._v("edit.php.net"),s("OutboundLink")],1),t._v(". Check out our "),s("a",{attrs:{href:"http://doc.php.net/tutorial/",target:"_blank",rel:"noopener noreferrer"}},[t._v("guide for contributors"),s("OutboundLink")],1),t._v(".")])])}),[],!1,null,null,null);e.default=n.exports}}]);