php部分
可以在一台物理服务器上运行/维护多个站点,用户通过不同的IP或域名来进行访问站点
虚拟主机的配置一共有两种方式来进行配置:
基于ip地址的配置(多个网卡来实现)
基于主机名的虚拟主机来进行配置(多个域名来映射到一个IP上)
直接传值:拷贝传值 $a = $b
引用传值:快捷方式 &$a = $b
拓展:
写实复制:在值传递或者是引用传递的时候,当系统中两个变量的值相同的时候,系统为了节省内存空间,不会再开辟一个新的内存来保存两份相同的地址,直到其中一个变量发生改变的时候,这时系统就会开辟一个新的内存来保存此变量,就称之为写实复制
以字母下划线数字组成,但不能以数字进行开头,区分大小写
Echo: 可以一次输出多个值,多个值之间用逗号分隔echo是语言结构(language construct),而并不是真正的函数;
Print_r: 可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示
Var_dump:可以使用任何变量,包括字符串,数组,数字,对象,还指明变量的类型及长度。此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构
一旦定义将不能再被修改,通常大写用来区分变量
定义:Define(‘PI’,’3.14’) 访问define(‘PI’)
定义:Const PI = 3.14 访问constent(‘PI’)
Defined() 查看某个常量是否存在
a) $_POST
b) $_GET
c) $_REQUEST
d) $_SERVER
e) $_SESSION
f) $_COOKIE
g) $GLOBALS // 专门用来存储全局中所用的变量
h) $_FILES[‘filename’] // /
a) PHP_OS 查看服务器的运行环境
b) PHP_VERSION 查看php的版本信息
c) PHP_INT_SIZE 查看php中基本的存储单位1bety=8bits 255中状态
d) PHP_INT_MAX 查看php中最大的整型数
e) __FIFE__ 当前文件的绝对路径(包含文件名)
f) __LINE__ 获取当前的行号
g) __DIR__ 当前文件的绝对路径(不包含文件名)
h) __FUNCTION__获取函数名
1)标量数据类型:
整型: 4个字节存储的值,当超过最大的整型后会自动转换为浮点型
浮点型:float:单精度 精度为7位左右 值为10^32
Double:双精度 精度为15位左右 值为10^308
可以使用E à 1.8E10科学计数法
布尔型
字符串型
2)复合数据类型:数组、对象
定界符 $str=
// 内容
DELIMIT(需顶格书写)
3)特殊数据类型:Null resource
在php中单引号不能解析变量,双引号可以(变量后若有字符用{}进行分隔即可)
在JS中单双引号都不能解析变量
单引号: 只能转译单引号和反斜杠
双引号: 除了单引号其他都能转译
算数、比较、赋值、链接、错误抑制、自操作、三目、
逻辑 && || ! (通常将与&&的false和将或||的true放在前边,效率高)
位运算
&:按位与,同为1则为1
| :按位或,有1则为1
~:按位取反,0变为1,1变为0
^:按位抑或,相同则为0,不同则为1
>>: 右移
顺序结构
分支结构:if 和 switch 结构
循环结构: for foreach(JS for…in…) while do..while
Continue:结束本次循环,继续执行下次循环,后边也可带参数跳出几层循环
Break:结束当前的循环体,继续执行循环体下边的内容,break后边可以带参数跳出几层循环
If for foreach while
① : ?>
②
①加载源代码à编译à词法分析(parse error)à语法分析(parse error)à生成opcodeà执行opcode (fatal error)à html代码
# 回调函数:在函数的内部使用可变变量来实现外部函数的调用,处理传递进来的参数
# 函数名不区分大小写
函数的作用域:全局和局部以函数为界限
局部访问全局: 引用传值,$GLOBALS(超全局预定义变量),global关键字
全局访问局部:global关键字,return返回值
$GLOBAL超全局预定义变量,可以在任何地方使用变量,且可以改变变量的值
Global关键字只能在函数中引入变量,并不能对其赋值,实质上就是在函数的内部创建了一个局部变量,使内存地址指向外部变量的地址,如果外部没有该变量则自己创建一个
初始化一次(编译保存在代码段),通常与递归进行搭配
Number Mixed callback void
False 0 0.0 ‘’ null array() object à 均为false
(int) (bool) (float) (string) (array) (object)
is_bool: 判断数据类型是否是布尔类型
is_float: 判断数据是否是浮点型
is_integer: 整型判断
is_object: 对象判断
is_array: 数组判断
is_string: 字符串判断
is_resource: 资源判断
is_scalar: 标量判断: 整型,浮点型,布尔型和字符串型都可以判断
is_null: 是否为空
is_numeric: 数值型判断(纯数值型字符串)
Gettype: 获得一个数据的数据类型:返回的字符串描述
Settype: 修改数据的数据类型(修改数据本身: 永久性)
Empty 检查变量是否为空
换句话说,””、0、”0″、NULL、FALSE、array()、var $var、未定义;以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE
Isset 检查变量是否设置
如果变量存在(非NULL)则返回 TRUE
拓展:
Null 即是一个不存在的对象的占位符
Undefined 变量已经被声明,但没用赋值
NaN 不是一个数字
意义:页面布局,代码复用
向上包含:通常是为了使用其他脚本中的结构(类和函数)
向下包含:通常是为了为了当前脚本的数据在对应的HTML中进行显示
include和require的区别:在包含文件的时候处理错误的态度不一样
include只是尝试包含,给出警告,后续的代码还是会继续执行
require 是强制包含,给出致命错误,后续的代码不会继续执行
include_once只包含一次,而include执行一次包含一次
require_once 同上
磁盘的绝对路径:D:/server/apache (仅限在服务器端使用,不能写入到HTML中)
网络的绝对路径:http://localhost/ (可以用于任何地方,从站点的根目录开始寻找)
./ 当前目录
../ 上层目录
/ 网站的根目录
绝对路径更加准确(__DIR__),相对路径效率高但可能出错
1)数组的三种定义方式:
$arr = array();
$arr = [];
$arr = null; $arr[] = 1;
2) 数组的分类:
索引数组、关联数组、混合数组 (都是通过下标来进行区分)
3)count($arr)函数: 查询出数组中的所有元素
4)数组的遍历
for():只能遍历索引数组
foreach():可以遍历所有的数组,利用了数组内部的数组指针
5)Each():通过数组的指针获取数组元素的函数,能够将当前数组指针所指向的元素的下标和值都可以获取到(数组的指针刚开始处于下标为0处),以关联和索引的形式个返回一组数据,是一个具有四个元素的数组(1和value保存值;0和key保存键名)
each()是指针的操作,当访问一次数组后,数组的指针将会下移一位;当指针移出数组后将返回false,each()可以来证明当前数组的指针处于什么地方
6)List():List 函数可以批量的为变量进行赋值
List(变量列表) = 数组; 通常list是搭配each针对数组进行遍历
7)数组相关函数
key: 获取当前数组指针指向的键名
Current:获取当前数组指针指向的键值
Next: 获取当前指针的下一个元素的值,并且将指针移动到下一位数组元素
Prev: 获取当前指针的上一个元素的值,并且将指针移动到上一位数组元素
end: 获取数组的最后一个元素,并将指针移动到最后一个元素
reset:重置,将数组指针移动到第一个元素
next或者prev无法将一个已经移除数组的指针移回来
end和reset 可以将指针移回来
array_keys:获取数组的所有的下标(键名),返回索引数组
array_values:获取数组的所有的值,返回索引数组
数据结构:数据的存储方式
常见的数据结构:栈(先进后出) 队列(先进先出)
Array_push 向数组的后边加入一个元素
array_pop 从数组的后边弹出一个元素
array_shift 从数组的前面弹出一个元素
array_unshift 从数组的前面加入一个元素
explode(‘,’,$str) 将一个字符串按照一定的方式爆炸为数组
implode(‘-’,$arr) 将数组按照一定的方式编织为字符串
1)+ 加运算:不区分索引和关联
运算方式:保留第一个数组中的所有的元素,去寻找第二个数组中的元素,如果存在相同的下标则不管,如果不存在则添加进来
2)array_merge():首先尝试保留第一个数组中所有的元素,去寻找第二个数组中相同的下标(索引)如果存在则后边的覆盖前边的,如果不存在则保留第一个,如果后边还有索引下标对应的元素,直接添加到第一个数组的后边,索引重置
29、数组验证码
1)利用range函数得到指定范围内的一个随机数range(0,9),range(a,z),range(A,Z)
2)合并数组array_range()
3) 通过array_rand($array,$num)函数获取随机下标
4)利用shuffle()打乱下标
5)通过遍历下标从合并的数组中得到验证码
字符串函数:
1)Strlen($str):获取字符串的长度
2)Substr($str,起始点,终止点)获取指定范围内的字符串,没有指定终点则到最后
3)Strtolower($str):将所有的字符串小写
4)Strtoupper($str):将所有的字符串大写
5)Strrev($str):reverse 将字符串进行反转
6)Strpos:获取指定字符的位置
7)Strrpos:从右边开始获取字符串的位置
8)Strchr($str,’|’)从匹配的地方截取字符串到最后(从左到右)
9)Strrchr($str,’.’) 从匹配的地方截取字符串(从后向前)
10) Trim() 消除字符串两边的空格或者是指定的字符
11)str_repeat:重复的输出某个指定的字符串
时间日期函数
1) time():获取当前时间的时间戳
2)Date():时间戳转日期
Date(‘Y-m-d H:i:s’) 获取当前的日期
Date(‘Y-m-d H:i:s’,time()) 同上
Strtotime():将字符串转换成时间戳
Microtime(): 获取微秒数
数学相关的函数
Abs:获取绝对值
Floor:向下取整
Ceil:向上取整
Round:四舍五入
Rand:取得一个指定区间内的随机数
mt_rand:取得一个指定区间内的随机数
1)浏览器的传值方式有两种:get和post即url和表单传值两种方式
2)URL的组成:http://(http协议)+localhost:80(主机)+URI(统一资源定位)
3) 表单的传值都是通过name属性名来加以区分,一旦出现同名将会被覆盖
4)$_REQUERST:不安全,会通过array_merge()函数来合并post和get数据,如果出现同名函数将会被覆盖:php.ini中request_order选项代表覆盖的顺序
文件的上传分为两个部分:客户端的上传和服务器的接收
1)服务器端必须接收文件:开启php.ini中文件的上传file_uploads = on
2)修改文件上传的临时文件存放目录:upload_tmp_dir =
3)对于大文件需要用post进行传递,故提交方式为post
4) 使用表单域进行传递
此处的name值通过$_FILE[‘upfile’]来进行接收
5) 通过get和post默认提交的数据为字符串类型,文件上传时属于二进制的形式故要使用post来帮助提交二进制数据,那么要指定提交数据类型为二进制