Nathaniel's blog
Back to posts

PHP learning

Nathaniel LinJuly 10, 20163 min read2 views
PHP learning

环境搭建

鉴于我使用的是OSX系统,那么只需要把/etc/apache2/httpd.conf下的LoadModule php5_module libexec/apache2/libphp5.so这一行取消注释,即可使用PHP了

可以在自己的\Library\Webserver\Documents\下放一个这样的PHP页面检测是否成功,

<?php 	// Show all information, defaults to INFO_ALL 	phpinfo(); ?>

如果成功出现PHP相关的信息,则说明PHP启用成功

基础语法

本文建立在你已有C/C++/Java 等传统语言基础,并且知道数据库是什么的前提之下

C/C++/Java完全相同的部分被省去,仅讨论不同部分。

首先 PHP 是服务端语言,和Java系的 JSP

.NET 系的ASP 对应

主要用作动态页面显示,服务端操作等,由于其完全开源免费,所有得到了广泛的应用

位置

所有的php 语句都要包含在下面这样的 类html 标签里面

<?php 	// PHP code goes here ?>

弱类型

和C/C++/Java不同,PHP是弱类型的,它使用$varible_name的方式来定义、使用变量。

变量作用域

  • 普通的全局变量在函数内不可见

  • 只有在函数内使用global关键字(类似extern)后才能使用

  • 另可使用GLOBALS['x']的方式访问全局变量

基础输出

echoprint的区别
  • 均可打印普通文本、变量、html标签

  • echo没有返回值,print返回1

  • echo 可有多个参数(用逗号隔开)

  • echo速度稍微快一点

数据

var_dump()

显示数据类型+值

  • 未初始化的值默认都是NULL

  • 类必须显示声明

  • Resource 类型 用于存 PHP外部资源

命名

  • 变量大小写敏感

  • 函数大小写不敏感

  • 常量可以自定义是否大小写敏感,默认敏感

define(name, value, case-insensitive)

运算符

** 指数运算符 PHP 5.6 以后支持

==

!=

<> 仅看值是否相等 如 100 == "100"

===

!== 值和类型都要相等

100 !== "100"

有显式的 and

or

xor 运算符

String类有特殊的连接运算符. .=

$txt1 .= $txt2 运行后 text2 的内容接到了text1上

if else

elseif 中间不能有空格

for

支持foreach

foreach ($array as $value) {

 code to be executed; }

数组

三类数组

  • 下标数组(默认)

  • 关联数组(类似<map>)

  • 多维数组

关联数组语法(含对应foreach 用法)

<?php 	$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); 	echo "Peter is " . $age['Peter'] . " years old."; 	foreach($age as $x => $x_value) {

 	echo "Key=" . $x . ", Value=" . $x_value;

 	echo "<br>"; 	} ?>
数组排序

| sort() | 基础升序 | | ------ | -------- | | 带r

| 降序

| | 带a

| 按值排序 | | 带k

| 按键排序 |

特殊全局变量

  • $GLOBALS

$GLOBALS['z']


用于直接访问全局变量

- $_SERVER

- ```php

<?php

	echo $_SERVER['SERVER_NAME'];

	echo $_SERVER['HTTP_USER_AGENT'];

	echo $_SERVER['SCRIPT_NAME'];

?>

用于存储头文件、路径、脚本文件位置

  • $_REQUEST

Name:


收集HTML表单提交信息

- $_POST

- 收集`post`中的表单信息

- 如`$_POST['fname']`可以获取`<form>`中的`fname`的值

- $_GET

- 收集`get`中的表单信息

- ```php

<a href="test_get.php?subject=PHP&web=W3schools.com">Test $GET</a>

可以通过$_GET[subject]获取subject 的值

PHP与表单

GET 与 POST的区别

  • GETPOST是两种服务端与客户端通信的方法,分别创建了特殊的关联数组

  • GET使用 URL参数传值,而POST使用HTTP标准POST方法传值

  • GET传递的值对所有人可见,易于加入收藏、二次使用,限长约2000字符

  • POST传递的信息隐蔽,无限长,更安全一些,不可加入收藏

安全性的保障

有时候用户输入可能是恶意的,因此我们需要使用

**htmlspecialchars()**函数来防止 XSS攻击

总是要记得处理用户输入,主要工作:

  1. 使用 trim() 去除 无用的字符(空格 tab 换行符)

  2. 使用 stripslashes() 去掉转移符 \

  3. 使用htmlspecialchars() 去掉 <> 等会转义为html内容的符号

  4. 使用preg_match()来匹配正则表达式

进阶PHP

多维数组

$cars = array

 (

 array("Volvo",22,18),

 array("BMW",15,13),

 array("Saab",5,2),

 array("Land Rover",17,15)

 );

数组内可有多种不同的类型的数据

Include指令

可以使用includerequire 指令来包含一个文件

Includerequire 区别

  • Include 在找不到文件等错误情况下继续执行php语句

  • require则不会

文件处理

readfile() 函数

读取指定文件的内容,如果成功则返回所读取的字节数

文件处理模式

x 模式,仅创建新文件,且创建后只能写,如果同名文件之前已存在则返回FALSE

文件上传

要进行文件上传,首先需要在/etc/php.ini/中增加一行

file_uploads = On

文件上传只能使用POST模式

可通过内置函数控制上传的文件大小、格式等,在此不详述。

Cookies

setcookie() 函数用法

setcookie(name, value, expire, path, domain, secure, httponly);

可以使用$_COOKIE来在php中操纵cookies

修改 再次使用setcookie();

删除 使用setcookie() 并且把expire 设成过去的某个时间

Session

用于简单的身份认证,直至用户关闭浏览器

可以使用全局比变量$_SESSION来操纵Session

session_start()函数用法

必须在整个文件中最先出现,比任何html 标记都要先出现

所有的session变量都存储在$_SESSION全局变量下

使用 session_unset()

session_destroy() 来清除session变量 ,终止session

Filters

主要用于验证、处理外部输入

filter_list() 可列出所有支持的Filter

由于外部输入形式各异,必须使用Filter以保证系统安全性

filter_var() 同时验证和处理数据

整数验证时, 注意0要特殊处理,因为0也可被当成bool看待

同理可验证 邮箱 URL IP 等

错误处理

默认的错误处理很基础,仅仅显示错误的文件名+行数+简单的描述

但如果你的错误处理做的不好,可能会导致安全问题

die() 能显示指定的错误消息,并结束php程序

构建自定义错误处理器,语法如下

error_function(error_level,error_message, error_file,error_line,error_context)

第二行的参数为非必需的

Share this post

Reactions