PHP( Hypertext Preprocessor)超级文本预处理器,是一种在服务器端执行的嵌入HTML文档的脚本语言
变量的声明:
以$开始,后面是大小写、数字、下划线,但不可以是数字开头,大小写要区分,不允许使用内
置关键字,尽量少用特殊字符
变量的类型:
标量型:布尔型(boolen)、整型(intteger)、浮点型(float、double)、字符串(string)
复合型:数组(array)、对象(object)
特殊型:资源型(resource)、null型
is_scalar():判断是否为标量
is_numeric():判断是否是任何类型的数字和数字字符串
is_callable():判断是否是有效的函数名
unset() :释放指定的变量即删除
isset():检查变量时否被设置过,存在为true否则为false
empty():与isset()相反
常量:
是一个简单的标识符,一旦被定义就不能再改变或取消定义,常量一般都为大写,常量合法的命
名一般是以字母或下划线开始,常量的范围是全局的
使用const和define()定义常量
例:
define('DB_HOST','localhost') const DB_PWD = '12344'
用get_defined_constans()获取所有已经定义的常量,以数组的方式返回
其他数据类型:
mixed:混合类型,可以是任意一种数据类型
callable、callback :可以回调
number:int或float数字
PHP中的运算:
%:求模或取余
取余的结果正负完全取决于第一个数字是正还是负
取余的如果是小数将会先将小数转换成整数(直接舍去小数部分)
如果第一个数小于第二个数结果就是第一个数 第二个数不能为0
在PHP字符串参加运算只计算第一个是数字的
在PHP中只要有浮点数参加运算,结果均为浮点数
在PHP中布尔值参加运算true为1,false为0
在PHP运算中空字符串和字符串'0',都转换为假,其他为真
在PHP中数字转换为真假:空数组为假,其余都为真累加、累减的运算:
布尔值不参加自增、自减运算
如果字符串是纯字母,他会进行升序(a -> b)操作,如果是汉字字符串保持原内容不变逻辑运算符 逻辑与(&&)和逻辑或(||)的短路问题:
&&如果第一个表达式返回false讲不会再检查第二个表达式
||如果第一个表达式返回true讲不会再检查第二个表达式位运算符:
&(位与)如果两个操作数都为1的位,设置为1,否则为0
|(位或)如果两个操作数中任何一个位为1的位设置为1
^(按位异或)参与运算的两位不同才为1,否则为0
<<(位左移)二进制的位置向左移,后面缺少的用0补齐
>>(位右移)二进制的位置向右移
三元运算符:
运算元1 ? 运算原2 : 运算元3
运算元1为条件,运算元2为成功的表达式,运算元3为失败的表达式
在PHP中设置字符集:header("content-type:text/html;charset=utf-8")
全局有效的常量:
__FILE__ 返回当前文件的绝对路径
__LINE__ 返回当前所在的行数
__CLASS__ 获取当前类名
__FUNCTION__ 获取当前函数名
URL的HTTP协议:
例:
http:// 协议
主机地址
:80 默认的端口,一般不显示
dianna/abc.php 目录以及请求的资源位置
http://www.baidu.com:80/dianna/abc.php?weizi=asd&kkk=and#ddd
www.baidu.com
weizi=asd URL里面的参数
#ddd 片段表示符,请求的是abc.php这个文件里面的ddd这个片段
条件语句:
1、if(表达式){语句块}
2、if(表达式){语句块1}else{语句块2}
3、if(表达式1){语句块1}elseif(表达式2){语句块2}elseif(表达式3){语句块3}...else{语句块N+1} 4、switch(表达式){case 值1: 语句块1; break; case 值2: 语句块2; break; ....case 值n: 语句块n;
break; default: 语句块n+1;}
switch语句后面的控制表达式的数据类型只能是整型或字符串,不能是布尔型
判断一个表达式的范围进行分支处理用elseif语句
把同一个变量或表达式与很多不同的值比较并根据等于那个值执行不同的代码,用switch语句
循环结构:
1、while(表达式){语句块}
2、do{语句块}while(表达式)
3、for(初始化;条件表达式;增/减量){语句块}
do...while语句不管条件是什么总会执行一次语句块
while语句要看条件是否成立在决定执行几次
for语句是先初始化变量赋值,在判断条件是否成立,真执行语句块,假不执行,完成后再执行
增/减控制变量,回到条件继续判断
while循环常用来做条件循环,for循环多用在范围循环中
几个常用结束循环的词语的意义:
break() :结束当前循环,括号加数字的话是指结束几层循环
continue:只能在循环的内部使用,是 跳过该次循环,下一次继续执行
exit:只要执行到,不管在哪个结构中都会直接退出当前脚本,不在往下执行
函数:
定义:被命名的,独立的代码段,执行特定的任务,可以给调用它的函数一个返回值
声明:function 函数名(形参(可以有多个,可以带有默认值)){函数体;return 返回值;}
在函数中使用全局变量,要使用关键字global访问
要声明函数变量为静态的,要用关键字static,并且只在脚本的执行期间函数第一次被调用时被
初始化
引用参数:在函数定义的时候,形参上加了一个&,就是引用参数
使用引用参数时,&要放在形参上
要用引用参数时,参数必须是变量,不能使用值
在形参上给的值就是默认参数,默认参数必须是一个值,不能是变量
设置默认参数一定要放在后面,不要放在其他传递参数的前面,因为传值是一一对应的
变量函数:将变量的值作为函数的名字加上括号来运行
回调函数:在写函数的时候传递一个参数进去,但是有时候参数不能满足我们的需求,我们传递一个过程进去,让这个过程协助我们改变函数的行为,实际上就是将函数的名字以字符串的形式传递进去,然后用变量函数的方法来运行
递归函数:就是自己调用自己,自己调用自己这个代码段来完成一件事,然后去做上一次没有完
成的事
递归函数一定要有一个条件限制,否则会进去死循环
加载/引入文件:
include():在脚本被执行的时候包含,如果包含错误将会产生一个警告
require():将一个文件在预处理期间被导入,如果包含错误将产生一个致命的错误,整个程序将
不能运行,多用来包含重要的文件
数组:
索引数组的下标可以不连续
在写关联数组时要添加上引号,否则会当成常量来处理,如果这个常量不存在会转换成字符串
浮点数会被转换成整型,小数部分直接舍去
布尔型会被转换成整型true为1,false为0
null会被转换成空字符串,键名为null的话实际存储为' '空
定义数组时多个元素下标相同的值,则最后一个下标的值会被保留
用unset()删除数组中的元素,删除后的元素下标不会被重新索引
for循环的数组只能是索引数组,下标必须是连续的
数组的遍历:
1、foreach(要遍历的数组 as 下标 => 值){循环体}
2、list(..,..,..,...) = 数组
3、while(list(下标,值) = each(数组)){循环子}
in_arrray():检查数组中是否存在某个值
array_flip():交换数组中的键和值
array_reverse():将数组中的元素顺序翻转
array_unique():删除数组中重复的值,并返回没有重复的值
array_filter():用回调函数过滤数组中的元素,返回按回调函数过滤的新数组
array_multisort():对多个数组或多维数组进行排序
array_slice():在数组中根据条件去除一段值并返回
array_spllice():选取数组中的一段值用其他内容代替
array_combine():合并两个数组,其中一个的值为键,另一个为值,如果其中一个数组为空或
者两个数组的元素个数不同,则返回false
array_merge():把一个或多个数组合并成一个数组,如果键名有重复,该键的值为最后一个键
的值,如果数组为数字索引,则键名会以连续的方式重新索引
array_diff():返回两个数组的差集
array_insersect():计算数组中的交集
array_push():向一个数组的尾部添加一个或多个元素
array_pop():删除数组中的最后一个元素
array_shift():删除数组中的第一个元素并返回
array_unshuift():向一个数组的头部添加一个或多个元素
超全局数组:
1、$_SERVER 获取关于服务器的一些变量
HTTP_HOST 用户主机
HTTP_USER_AGENT 用户的浏览器
SERVER_NAME 服务器名
SERVER_ADDR 服务器的IP地址
REMOTE_ADDR 浏览器当前脚本的IP地址
HTTP_REFERER 链接到当前页面的前一个页面的URL地址
SERVER_PORT 服务器所使用的端口
REQUEST_URI 获取当前的URL
2、$_GET 接收HTTP协议已get请求方式传递的值 3、$_POST ..............................post.............................
4、$_COOKIE 获得cookie值
5、$_SESSION 获得session的值
6、$_FILES 获得上传文件的信息
7、$_GLOBALS 接收脚本中所有的变量
常用的字符串格式化函数:
trim:从字符串的两端删除空白字符和其他预定义字符
str_pd():把字符串填充为新的长度
strtolower():把字符串转换为小写
strtoupper():把字符串转换为大写
ucfirst():把字符串中的首字母转换为大写
ucword():把字符串中的每个单词的首字符转换为大写
htmlentities():把字符转换为HTML实体
htmlspecialchars():把一些预定义字符转换为HTML实体
strip_tags():剥去HTML、XML、PHP的标签 number_format():通过千位分组来格式化数字 strrev():反转字符串
explode():使用一个字符串把另一个字符串分割成数组
implode():把数组的元素合并为一个字符串
strcmp():区分大小写的比较字符串
strcasecmp():忽略字符串中的大效写进行比较
PHP中的错误和异常处理:
error_reporting(E_ALL &~ E_NOTICE) 错误提示设置 处理NOTICE提醒
E_ERROR 致命的运行时错误 数字为1
E_WARNIG 运行时警告 数字为2
E_PARSE 从语法中解析错误
E_NOTICE 运行时注意的消息 数字为8
E_COMPILE_ERROR 致命的编译时错误
E_ALL 所有的错误、警告、提醒
set_error_handler('自定义函数名') 自定义错误报告要在文件头加上这句话
ini_get():获得匹配信息的函数
ini_set(配置选项,值):暂时设置配置文件,脚本结束时失效
flie_get_contents():将一个文件读入到字符串中
PHP时间函数:
time():可以获取当前的时间戳
mktime():根据日期时间等获得时间戳
date():根据格式,格式化时间戳
date()函数所支持的格式化代码:
a:小写的上午或下午
d:月份中的第几天带前导零
D:星期中的第几天
g:12小时格式,没有前导零 G:24.......................................
h:12.................,有.............. H:24......................................
i:有前导零的分钟
I:是否为夏令时 否为0,是为1
j:月份中的第几天没有前导零
L:是否为闰年 否为0 是为1
m:数字月份有前导零
M:三个字母缩写表示月份
n:数字表示月份没有前导零
t:给定月份所应有的天数
T:本机所在的市区
w:星期中的第几天,从0开始
W:一年中的第几周
Y:四位数字完整的年份
z:年份中的第几天
date_default_timezone_set():设置时区
Asia/chongqing Asia/Hong-Kong Asia/shanghai PRC
strtotime():获得支持格式的unix时间戳
microtime() 微秒
PHP文件处理:
程序在运行的时候,程序本身和数据存放在服务器内存里面,程序运行结束以后,存放在内存里
面的数据释放,所以操作目录、文件都是在内存中以资源的形式进行处理的
在Windows下面的字符集是GBK,文件名要用iconv进行转码
iconv(原字符集,要转字符集,要转内容)
filetype():获取文件的类型
is_file():判断给定的文件名是否是一个正常的文件
is_dir():判断给定的文件是否是一个目录
is_link():判断给定的文件名是否为一个符号链接
file_exists():检查文件或者目录是否存在
filesize():取得文件的大小,返回的单位是字节
is_readable():判断文件名是否可读
is_writable():判断文件名是否可写
filectime():获取文件的创建时间
filemtime():获取文件的修改时间
fileatime():获取文件的访问时间
stat():获取文件的大部分属性值,返回数组
clearstatcache():清除被PHP缓存的该文件的信息
basename():返回路径中的文件名部分
dirname():返回去除了文件名之后的目录名
pathinfo():返回一个关联数组,其中包括指定路径中的目录名、基本名、扩展名三部分
basename 基本名 dirname 目录名 extension 扩展名
rewinddir():倒回目录句柄
遍历目录:
1、opendir() 打开指定的目录
2、readdir() 读取指定的目录注意:
读取到最后一个会返回false
第一次读取返回一个“.”,代表的是目录本身 第二次读取返回一个“..”,代表的是上一级目录 在做遍历、复制、删除时一定要排除上面那两个
3、closedir() 关闭指定资源
mkdir('路径',模式):建立一个新目录
模式:例:0755
所有者权限:7 rwx 所属组权限:5 rx 其他人权限:5 rx
以0开头,r 可读 4 ,w 可写 2 ,x 可执行 1
rmdir():删除目录,只能删除一个空目录并且必须存在,如果是非空旧需要先就如到目录用
unlink()将目录中的文件删除掉,在回来删除这个空目录
rename(旧文件名,新文件名) 重命名
copy(原位置,新位置) 拷贝文件,也可以在拷贝的时候改名字
touch():如果不存在创建一个文件,如果存在则改变文件的访问和修改时间
文件的打开和关闭:
fopen(要打开的文件,如何打开) :打开一个文件,在打开的同时还要指定如何使用它
如何打开:r 只读打开
r+ 读写打开
w 只写打开,将源文件清空,没有这个文件自动创建 w+ 读写打开,将源文件清空,没有这个文件自动创建
a 只写打开,从源文件末尾接着写,没有这个文件自动创建 a+ 读写打开,从原文件末尾接着写,没有这个文件自动创建
fwrite():将字符串内容写入文件中
fread():读取打开的文件指定的字符数
file_get_contents():将文件读入到字符串
file_put_contents():将一个字符串写入文件
fgets():从打开的文件中返回一行
fgetc():从打开的文件中读取一个字符
feof():测试文件指针是否到达结束的位置,出错或结束时返回true,否则发挥false
file():把文件读入到一个数组中
readfile():读取一个文件,并输出到缓冲
ftell():返回文件指针的当前位置
fseek():移动文件指针到指定的位置
rewind():移动文件的指针到文件的开头
fclose():关闭文件资源
DIRECTORY_SEPARTOR 这是一个常量,获取现在系统目录的分隔符是什么
basename(路径/文件名,".后缀名") 获得不带后缀的文件名
disk_total_space('盘符') 返回一个目录的磁盘的总大小
disk_free_space('盘符') 返回的是磁盘的可用空间
PHP中文件的上传下载:
上传文件要在form中添加 enctype="multipart/form-data",用来指定表单编码数据格式
PHP配置文件:
file_uploads 确定服务器上的PHP脚本是否接受HTTP文件上传
upload_tmp_dir 上传文件存放的临时路径
$_FILES中的元素说明:
$_FILES['myfile']['name'] 客户端机器文件的原名称
$_FILES['myfile']['size'] 已经上传的文件的大小,单位是字节
$_FILES['myfile']['tmp_name'] 文件上传后再服务器端存储的临时文件名
$_FILES['myfile']['type'] 获取从客户端上传文件的MIME类型
$_FILES['myfile']['error'] 伴随文件上传是产生的错误信息
0:表示没有错误,上传成功
1:表示上传文件大小超出了文件中的设置 upload_max_filesize设置限制的值
2:表示文件上传大小超出HTML表单中MAX_FILE_SIZE所设置的值
3:表示文件只被部分上传 4:表示没有上传任何文件
is_uploaded_file():判断指定的文件是否是通过HTTP POST上传的,是返回true
move_uploaded_file():文件上传后,先存储在服务器的临时目录中,可以用这个移动到指定的
位置
在文件要下载的时候要先设置头部信息(以下载图片test.gif为例):
header("content-type:image/gif"); 发送指定文件MIME类型的头信息
header("content-Disposition:attachment;filename='test.gif'"); 发送描述文件头信
息、附件和文件名
header("content-Length:3390"); 发送指定文件大小的信息,单位为字节