[TOC]

0x00 快速入门

Q:什么是PHP?

PHP (Hypertext Preprocessor 缩写) 超级文本预处理器,PHP 是一种创建动态交互性站点的服务器端脚本语言。


PHP发展历史简述
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf 为了要维护个人网页而制作的一个简单的用Perl语言编写的程序,后来又用C语言重新编写,包括可以访问数据库,他将这些程序和一些表单直译器整合起来,称为 PHP/FI,PHP/FI 可以和数据库连接,产生简单的动态网页程序。


PHP编程语言特点

  • 1.是开放源代码的,服务器端的脚本语言.
  • 2.独立于操作系统,可以运行在几乎所有系统(Win/Linux)中(兼容所有操作系统和web服务器)
  • 3.支持大部分的服务器
  • 4.支持大量的数据库
  • 5.可以创建图象
  • 6.其他功能在后面的高级技术详细介绍。


PHP编程语言能做到事

1、生成动态页面内容;
2、能够创建、打开、读取、写入、删除以及关闭服务器上的内容文件;
3、能够接收表单数据;
4、能够发送并取回 cookies;
5、能够对(各类)数据库中的数据进行增删改查等操作;
6、能够限制用户访问网站中的某些页面;
7、语法混合了 C、Java、Perl 以及 PHP 自创新的语法;
8、处理 XML 文件;
9、会话控制Session Cookies;


PHP开发使用方向

1、服务器端脚本运行
2、命令行脚本运行
3、客户端图形界面(GUI)程序


0x01 牛刀小试

第一个PHP代码程序
此处,假设你已经安装好php相关环境,若没有安装可以参考此篇文章《》或者自行Google、百度。

首先,通过编辑器创建一个以.php结尾的文件,然后通过浏览器访问Web服务器管理下的PHP文件,就可以运行PHP文件。

1
2
3
<?php
echo "<b style='color:red'>Hello , PHP !<b>";
?>
WeiyiGeek.Hello-php第一个PHP代码程序图

WeiyiGeek.Hello-php第一个PHP代码程序图


0x02 基础语法

1.标记符

从上面的示例,我们不难看出,php代码是以<?php 为PHP标识符的起始,?> 为PHP终止标识符来退出PHP模式, 除此之外还有其他三种短标签。

1
2
3
4
5
6
7
# 语言标记及指令分隔符“分号”
<?php echo "默认标记"; ?>

# 短标签
<script language="php"> <script>
<? ?>
<% %>

Q: 如何开启短标记标识其他的三种语言?
在php.ini配置文件中找到short_open_tag=Off,经Off设置为On即可,非常注意设置完成后必须重启Apache服务。

1
2
3
4
5
6
7
<p style="color:red"> /*** PHP短标记使用 **/ </p>
<?php echo "Method 1 <br>"; ?>
<? echo "Method 2 <br>"; ?>
<script language="php"> echo "Method 3 <br>";</script>

<p>//下面这个貌似PHP不支持</p>
<% echo "Method 4"; %>
WeiyiGeek.开启php短标记标识图

WeiyiGeek.开启php短标记标识图


PHP同C或Perl以及Java一样,语句分为两种功能执行语句代码结构语句, 其不同之处在于, 前者的PHP需要在每个指令后用分号结束, 和其他语言不一样的是, 在PHP中右括号(?>)前的分号不是必选的。

1
2
3
4
5
6
7
8
9
10
// 功能执行语句  (必加 ;) 
<?php echo "Hello,World!!"; ?>

// 代码结构语句 (不加 ;)
<?php if(test){
......
} else {
......
}
?>


在实践使用中,可根据自己的需要在HTML文件中像这样开启或关闭PHP模式,通常也是将PHP语言嵌入HTML中进行一起使用,例如CSS、JavaScript、PHP、ASP以及JSP等。

简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title> <?php echo "PHP 语言标记的使用" ?> </title>
</head>
<body <?php echo 'bgcolor="#cccccc"' ?> >
<?php if($expression){?>
<p align=" <?php echo 'center' ?> ">This is true</p>
<?php }else{ ?>
<p>This is false</p>
<?php } ?>
</body>
</html>


现在问题来了,上面的对面PHP与HTML解析过几次?

  1. 在服务器端执行PHP解析。
  2. 在客服端浏览器中执行HTML解析。


实践示例
利用php获取服务端相关信息,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>获取服务器信息的第一个PHP程序</title>
</head>
<body>
<?php
$sysos = $_SERVER["SERVER_SOFTWARE"]; //获取服务器标识的字串
$sysversion = PHP_VERSION; //获取PHP服务器版本

//以下两条代码连接MySQL数据库并获取MySQL数据库版本信息
mysql_connect("localhost", "root", "");
$mysqlinfo = mysql_get_server_info();

//从服务器中获取GD库的信息
if(function_exists("gd_info")){
$gd = gd_info();
$gdinfo = $gd['GD Version'];
}else {
$gdinfo = "未知";
}

//从GD库中查看是否支持FreeType字体
$freetype = $gd["FreeType Support"] ? "支持" : "不支持";

//从PHP配置文件中获得是否可以远程文件获取
$allowurl= ini_get("allow_url_fopen") ? "支持" : "不支持";

//从PHP配置文件中获得最大上传限制
$max_upload = ini_get("file_uploads") ? ini_get("upload_max_filesize") : "Disabled";

//从PHP配置文件中获得脚本的最大执行时间
$max_ex_time= ini_get("max_execution_time")."秒";

//以下两条获取服务器时间,中国大陆采用的是东八区的时间,设置时区写成Etc/GMT-8
date_default_timezone_set("Etc/GMT-8");
$systemtime = date("Y-m-d H:i:s",time());

/* ******************************************************************* */
/* 以HTML表格的形式将以上获取到的服务器信息输出给客户端浏览器 */
/* ******************************************************************* */
echo "<table align=center cellspacing=0 cellpadding=0>";
echo "<caption> <h2> 系统信息 </h2> </caption>";
echo "<tr> <td> Web服务器: </td> <td> $sysos </td> </tr>";
echo "<tr> <td> PHP版本: </td> <td> $sysversion </td> </tr>";
echo "<tr> <td> MySQL版本: </td> <td> $mysqlinfo </td> </tr>";
echo "<tr> <td> GD库版本: </td> <td> $gdinfo </td> </tr>";
echo "<tr> <td> FreeType: </td> <td> $freetype </td> </tr>";
echo "<tr> <td> 远程文件获取: </td> <td> $allowurl </td> </tr>";
echo "<tr> <td> 最大上传限制: </td> <td> $max_upload </td> </tr>";
echo "<tr> <td> 最大执行时间: </td> <td> $max_ex_time </td> </tr>";
echo "<tr> <td> 服务器时间: </td> <td> $systemtime </td> </tr>";
echo "</table>";
?>
<body>
</html>
WeiyiGeek.使用PHP获取服务器系统信息图

WeiyiGeek.使用PHP获取服务器系统信息图


2.注释

程序员在编程时使用注释是一种良好的习惯,它可以帮助开发者写帮助文档、调试程序、以及协同开发,或者方便接锅侠接手😳。

其实在前面的示例中,我们可以看到对php程序注释信息,此处我们再罗列完整PHP支持C、C++和Shell脚本风格的注释,如下:

1
2
3
4
5
6
7
8
9
10
11
12
方式1.
//... ... 单行注释

方式2.
/* ...
多行注释 (注意:不能嵌套)
*/

/** 文档注释 */

方式3.
# ... ... 脚本注释


3.开发规范

使用空白的处理
空白符(空格、Tab制表符、换行)在PHP中无关紧要,可以将一个语句展开成任意行,或者将语句紧缩在一行, 可以利用这个灵活的格式来使代码更具有可读性(通过排列分配、缩进等),一些懒惰的程序员利用这种自由的格式创建根本无法阅读的代码,这是不提倡的。

  • 使用两个空行情况:一个源文件的两个代码段,两个类的声明。

  • 使用一个空行情况:两个函数声明之间 ,函数内的局部变量和函数的第一条语句之间,注释或者单行注释之前,一个函数的两个逻辑代码段。