PHP ( PHP的递归首字母缩写:Hypertext Preprocessor)是一种广泛使用的开源编程语言。它特别适合Web开发。 PHP的独特之处在于它既适合初学者,也适合经验丰富的开发人员。它具有较低的入门门槛,因此很容易上手,同时它还提供其他编程语言提供的高级功能。
开源
这是一个开源项目。随意参与其中 。
语言规范
PHP有一个语言规范 。
支持的版本
目前,有三个受支持的版本 :5.6,7.0和7.1。
PHP的每个发布分支在其最初的稳定版本发布后的两年内完全受支持。在这两年的积极支持期后,每个分支机构将再支持一年,以解决重大安全问题。在此期间的发布是根据需要进行的:根据报告的数量,可能会有多个点发布,或者没有发布。
不受支持的版本
一旦三年的支持完成,分支即达到使用寿命,不再受支持。
可以使用生命终结分支表 。
问题跟踪器
在https://bugs.php.net/上跟踪错误和其他问题。
邮件列表
有关PHP开发和使用的讨论在PHP邮件列表中进行 。
官方文件
请帮助维护或翻译官方PHP文档 。
您可以使用edit.php.net上的编辑器。查看我们的贡献者指南 。
版 | 支持直到 | 发布日期 |
---|---|---|
7.1 | 2019年12月1日 | 2016年12月1日 |
7 | 2018年12月3日 | 2015年12月3日 |
版 | 支持直到 | 发布日期 |
---|---|---|
5.6 | 2018年12月31日 | 2014年8月28日 |
5.5 | 2016年7月21日 | 2013年6月20日 |
5.4 | 2015年9月3日 | 2012-03-01 |
5.3 | 2014年8月14日 | 2009-06-30 |
5.2 | 2011-01-06 | 2006-11-02 |
5.1 | 2006-08-24 | 2005-11-24 |
5 | 2005-09-05 | 2004-07-13 |
版 | 支持直到 | 发布日期 |
---|---|---|
4.4 | 2008-08-07 | 2005-07-11 |
4.3 | 2005-03-31 | 2002-12-27 |
4.2 | 2002-09-06 | 2002-04-22 |
4.1 | 2002-03-12 | 二〇〇一年十二月十日 |
4 | 2001年6月23日 | 2000年5月22日 |
版 | 支持直到 | 发布日期 |
---|---|---|
3.0 | 2000-10-20 | 1998年6月6日 |
2.0 | 1997年11月1日 | |
1.0 | 1995年6月8日 |
PHP可用于向HTML文件添加内容。虽然HTML由Web浏览器直接处理,但PHP脚本由Web服务器执行,生成的HTML将发送到浏览器。
以下HTML标记包含将添加Hello World!
的PHP语句Hello World!
到输出:
<!DOCTYPE html>
<html>
<head>
<title>PHP!</title>
</head>
<body>
<p><?php echo "Hello world!"; ?></p>
</body>
</html>
当它保存为PHP脚本并由Web服务器执行时,以下HTML将发送到用户的浏览器:
<!DOCTYPE html>
<html>
<head>
<title>PHP!</title>
</head>
<body>
<p>Hello world!</p>
</body>
</html>
echo
还有一个快捷语法,可让您立即打印一个值。在PHP 5.4.0之前,此短语法仅适用于启用了short_open_tag配置设置。
例如,请考虑以下代码:
<p><?= "Hello world!" ?></p>
其输出与以下输出相同:
<p><?php echo "Hello world!"; ?></p>
在实际应用程序中,应该正确地转义 PHP输出到HTML页面的所有数据,以防止XSS( 跨站点脚本 )攻击或文本损坏。
另请参阅: 字符串和PSR-1 ,它描述了最佳实践,包括正确使用短标签( <?= ... ?>
)。
用于在PHP中打印输出的最广泛使用的语言构造是echo
:
echo "Hello, World!\n";
或者,您也可以使用print
:
print "Hello, World!\n";
两个语句执行相同的功能,但有细微差别:
echo
有一个void
返回值,而print
返回一个值为1
的int
echo
可以接受多个参数(仅限括号),而print
只接受一个参数echo
比print
快一点 echo
和print
都是语言结构,而不是函数。这意味着他们不需要围绕他们的论点括起来。为了与功能的外观一致,可以包括括号。 其他地方有大量使用echo
和print
例子。
还提供C风格的printf
和相关功能,如下例所示:
printf("%s\n", "Hello, World!");
有关在PHP中输出变量的全面介绍,请参阅输出变量的值 。
就像大多数其他C风格的语言一样,每个语句都以分号结束。此外,结束标记用于终止PHP块的最后一行代码。
如果PHP代码的最后一行以分号结尾,则如果最后一行代码后面没有代码,则结束标记是可选的。例如,我们可以在echo "No error";
之后省略结束标记echo "No error";
在以下示例中:
<?php echo "No error"; // no closing tag is needed as long as there is no code below
但是,如果PHP代码块后面有任何其他代码,则结束标记不再是可选的:
<?php echo "This will cause an error if you leave out the closing tag"; ?>
<html>
<body>
</body>
</html>
如果该代码块具有结束标记,我们也可以省略PHP代码块中最后一个语句的分号:
<?php echo "I hope this helps! :D";
echo "No error" ?>
通常建议始终使用分号并对除最后一个PHP代码块之外的每个PHP代码块使用结束标记,如果该代码块后面没有更多代码。
所以,你的代码基本上应该是这样的:
<?php
echo "Here we use a semicolon!";
echo "Here as well!";
echo "Here as well!";
echo "Here we use a semicolon and a closing tag because more code follows";
?>
<p>Some HTML code goes here</p>
<?php
echo "Here we use a semicolon!";
echo "Here as well!";
echo "Here as well!";
echo "Here we use a semicolon and a closing tag because more code follows";
?>
<p>Some HTML code goes here</p>
<?php
echo "Here we use a semicolon!";
echo "Here as well!";
echo "Here as well!";
echo "Here we use a semicolon but leave out the closing tag";
在某些情况下,使用Web服务器时,可能需要覆盖Web服务器的默认内容类型。例如,可能存在需要以plain text
, JSON
或XML
发送数据的情况。
header()
函数可以发送原始HTTP头。您可以添加Content-Type
标头以通知浏览器我们正在发送的内容。
考虑以下代码,我们将Content-Type
设置为text/plain
:
header("Content-Type: text/plain");
echo "Hello World";
这将生成包含以下内容的纯文本文档:
你好,世界
要生成JSON内容,请改用application/json
内容类型:
header("Content-Type: application/json");
// Create a PHP data array.
$data = ["response" => "Hello World"];
// json_encode will convert it to a valid JSON string.
echo json_encode($data);
这将生成application/json
类型的文档,其中包含以下内容:
{“回复”:“Hello World”}
请注意,必须在PHP生成任何输出之前调用header()
函数,否则Web服务器将已为响应发送标头。因此,请考虑以下代码:
// Error: We cannot send any output before the headers
echo "Hello";
// All headers must be sent before ANY PHP output
header("Content-Type: text/plain");
echo "World";
这会产生警告:
警告:不能更改头信息-头已经发出(输出开始/dir/example.php:2)在/dir/example.php第3行
使用header()
,其输出需要是从服务器发送的第一个字节。因此,在PHP开始标记<?php
之前,在文件开头没有空行或空格很重要。出于同样的原因,最好的做法(参见PSR-2 )从包含PHP的文件和文件最末端的PHP代码块中省略PHP结束标记?>
。
查看输出缓冲部分 ,了解如何将内容“捕获”到变量中以便稍后输出,例如,在输出标题后。
PHP 5.4+附带内置开发服务器。它可用于运行应用程序,而无需安装生产HTTP服务器,如nginx或Apache。内置服务器仅用于开发和测试目的。
可以使用-S
标志启动它:
php -S <host/ip>:<port>
index.php
文件,其中包含: <?php
echo "Hello World from built-in PHP server";
从命令行运行命令php -S localhost:8080
。不要包含http://
。这将使用您作为文档根目录的当前目录启动侦听端口8080的Web服务器。
打开浏览器并导航到http://localhost:8080
。你应该看到你的“Hello World”页面。
要覆盖默认文档根目录(即当前目录),请使用-t
标志:
php -S <host/ip>:<port> -t <directory>
例如,如果项目中有public/
目录,则可以使用php -S localhost:8080 -t public/
从该目录为项目提供服务。
每次从开发服务器发出请求时,都会将如下所示的日志条目写入命令行。
[Mon Aug 15 18:20:19 2016] ::1:52455 [200]: /
也可以使用CLI(命令行界面)直接从命令行运行PHP。
除了标准输入和输出方面的一些差异外,CLI与来自Web服务器的PHP基本相同。
PHP CLI允许四种方式来运行PHP代码:
php
命令,但将PHP代码插入其中: echo '<?php echo "Hello world!";' | php
php
命令作为第一个参数: php hello_world.php
php
命令中使用-r
选项,然后运行代码。 <?php
open标签不是必需的,因为参数中的所有内容都被视为PHP代码: php -r 'echo "Hello world!";'
php
命令中的-a
选项启动交互式shell。然后,键入(或粘贴)PHP代码并点击返回 : $ php -a Interactive mode enabled php > echo "Hello world!"; Hello world!
在Web服务器PHP中生成HTML输出的所有函数或控件都可用于在stdout流(文件描述符1)中生成输出,并且在Web服务器PHP中的错误日志中生成输出的所有操作都将在stderr流中生成输出(文件描述符2)。
Example.php
<?php
echo "Stdout 1\n";
trigger_error("Stderr 2\n");
print_r("Stdout 3\n");
fwrite(STDERR, "Stderr 4\n");
throw new RuntimeException("Stderr 5\n");
?>
Stdout 6
Shell命令行 $ php Example.php 2>stderr.log >stdout.log;\
> echo STDOUT; cat stdout.log; echo;\
> echo STDERR; cat stderr.log\
STDOUT
Stdout 1
Stdout 3
STDERR
Stderr 4
PHP Notice: Stderr 2
in /Example.php on line 3
PHP Fatal error: Uncaught RuntimeException: Stderr 5
in /Example.php:6
Stack trace:
#0 {main}
thrown in /Example.php on line 6
请参阅: 命令行界面(CLI)
有三种标记用于表示文件中的PHP块。 PHP解析器正在查找开始和(如果存在)结束标记以分隔要解释的代码。
这些标记是将PHP代码嵌入文件的标准方法。
<?php
echo "Hello World";
?>
所有PHP版本都提供这些标记,因为PHP 5.4始终启用。在以前的版本中,echo标签只能与短标签一起启用。
<?= "Hello World" ?>
您可以使用short_open_tag
选项禁用或启用这些标记。
<?
echo "Hello World";
?>
短标签:
通过启用asp_tags
选项,可以使用ASP样式的标记。
<%
echo "Hello World";
%>
这是一个历史性的怪癖,永远不应该被使用。它们在PHP 7.0中被删除。