php复习

      • 基础知识
      • 函数
        • 数学函数
        • 日期函数
      • 数组
        • 数组函数
      • 字符串
        • 字符串函数
        • 正则表达式
      • php常用功能模块
        • php错误处理
        • php图片处理函数
      • 文件处理
      • 数据库
      • 会话控制

基础知识

  1. 双引号""解释字符串中的变量
    单引号 ''不解释字符串中的变量(所以单引号解析速度快)

  2. header(“content-type:text/html;charset=utf-8”);
    解决中文乱码(header头前不能有输出)

  3. 数据库密码错误时也可以访问test数据库

  4. php是一种解析型语言(弱类型语言),只需拿解析器解析。因为网站脚本语言没有必要编译后再使用,一般需要编译的语言都是强类型语言,例如c,java

  5. 三种变量输出:
    echo //输出变量
    var_dump //输出数组,并打印类型和长度
    print_r //输出数组

  6. 常量的定义:
    const COUNT=0.8;
    define(“HOST”,“localhost”);
    常量一旦被定义就不能被修改

  1. const可在类中使用,define不能。
  2. const定义的常量大小写敏感,而define可通过第三个参数(为TRUE表示大小写不敏感)来指定大小写是否敏感。define(‘TXE’,100,TRUE);
  3. const不能在条件语句中定义常量,而define函数可以。if($a>10){define(‘LE’,‘hello’);}
  • const与#define的区别和优点:https://blog.csdn.net/weibo1230123/article/details/81981384
  1. 预定义常量:
PHP_OS        当前php所在操作系统
PHP_VERSION   当前的php版本信息
__LINE__      当前所在行
__FILE__      当前文件绝对路径
__FUNCTION__  在函数内知道函数名
M_PI          圆周率
//__CLASS__   在类中知道类名
//__METHOD__  在类的函数中知道函数名
PHP_INT_MAX   整数类型的最大值
PHP_INT_SIZE  整数类型的字节长度
E_ERROR       运行时的致命性错误(1)
E_NOTICE      运行时的提醒信息(8)
  1. @运算符:屏蔽函数的报错
  2. ->:对象运算符,eg:$user->say();
  3. 运算符优先级
    php复习_第1张图片

sublime中   :%s/班级/学员/g   把文档内字符串中的“班级”全部替换成“学员”

函数

  1. 回调函数callback:一个函数的参数是另一个函数
  2. 包含文件函数
    include如果出错,脚本继续执行
    require如果出错,脚本立刻终止
  3. break结束本层循环,continue结束本次循环(一层循环里面有很多次循环)
  4. isset和empty两个函数的区别
isset 变量是否存在
       不存在的情况:1.没有定义
                    2.定义的值为null
empty 变量是否为空
         为空的情况:1.0
					2.""
					3."0"
					4.false
					5.array()
					6.null
					7.没有定义
  1. func_num_args()返回函数参数数组的个数
    func_get_args()获取函数参数列表的数组
    array_sum()对数组中所有值求和
eg:

function sum(){
	echo func_num_args();
	echo "
"
; echo array_sum(func_get_args()); } sum(1,2,3,4,5,6,7,8,9,10); ?> //输出:10,55
  1. php执行过程:加载页面 -> 语法检测(1.语法检测 2.加载函数)-> 执行脚本
    (因为php在语法检测阶段已经加载过函数,所以函数的调用可以在函数定义之前也可以在定义之后)

数学函数

max()
min()
mt_rand()    取随机数
ceil(x)   向上取整      
floor(x)    向下取整      
round(x)   四舍五入后的整数
pi()    取圆周率,相当于预定义常量M_PI
fmod()     浮点数的取模运算
is_nan()   判断一个值是否为非数值[如果指定的值是非数值,该函数返回 true (1)]

日期函数

time();当前时间戳
date();把时间戳格式化成日期和时间
strtotime();把日期字符串转成时间戳(确定时间点的时间戳)
microtime();微秒 (1=1000毫秒=1000000微秒)
//microtime(1);方便参与数学运算,算脚本运行的时间date_default_timezone_set("PRC");设置时区
• date_default_timezone_get();获取时区
Y-m-d : 2019-08-09
y-n-j : 19-8-9
H:i:s : 14:32:28 
h:i:s : 02:32:28
w : 0-6(周日-周六)
A : AM或PM
a : am或pm
L : 是否闰年
t : 当前月的天数

数组

  1. 数组由多个元素组成,每个元素由key-value对组成,value分为8种变量类型

  2. 索引数组:下标是数字的是索引数组
    关联数组:下标是字符串的是关联数组

  3. 数组遍历foreach和while…list…each

foreach($arr as $key=>$val){
	echo "{$key}:{$val}";
}

while(list($key,$val)=each($arr)){
	echo "$key.$val";
  1. 超全局数组
$_SERVER 查看服务器信息
$_GET    获取get提交的数据
$_POST   获取post提交的数据
$_REQUEST 获取a标签get或表单post提交的数据
$_FILES   获取表单中的文件,并生成一个数组
$_COOKIES 同一个变量在多个页面获取到(用户登录)
$_SESSION 同一个变量在多个页面获取到(用户登录)
$GLOBALS  

(超全局变量:在页面的任何一个地方都可以使用,无论在函数内还是函数外)

数组函数

  1. 数组的键值操作函数
array_values();		获取数组中的值
array_keys();		获取数组中的键
in_array();			检查一个值是否在数组中
array_key_exists();	检查一个键是否在数组中
array_flip();		键和值对调 
array_reverse();	数组中的值反转
  1. 统计数组的元素和唯一性
count();	统计数组中元素的个数
array_count_values();	统计数组中值出现的次数
array_unique();		删除数组中重复值
  1. 使用回调函数处理数组的函数
array_filter();	数组值过滤
array_map() ;	将回调函数作用到给定数组的单元上
  1. 数组的排序函数
 1. sort();		按值把数组值进行排序,升序,不保留key 
 2. rsort(); 	按值把数组值进行排序,降序,不保留key
 
 3. asort();	按值把数组值进行排序,升序,保留key
 4. arsort(); 	按值把数组值进行排序,降序,保留key

 5. ksort(); 	按键把数组值进行排序,升序,保留key 
 6. krsort(); 	按键把数组值进行排序,降序,保留key

 7. natsort(); 		按自然数排序 
 8. natcasesort();	 忽略大小写的自然数排序
 9. array_multisort(); 	用一个数组对另外一个数组进行排序

5.拆分、合并、分解与结合函数

1. explode(); 		 	把字符串分解成数组
2. jion();  implode();  把数组连接成字符串 
3. array_slice(); 		截取一段值
4. array_splice();	    截取一段值,保留一段值 (裁剪,和替换)
5. array_combine();	    合并,一个是key,一个是value 
6. array_merge();  		合并数组,键值相同,后面覆盖前面,
                                 键值不同,前后相同的值都显示。
7. array_chunk();       分割数组
8. array_intersect();	交集
9. array_diff();		差集

6.数组与数据结构

1. array_pop(); 		将数组最后一个单元弹出(出栈) 
2. array_push();		将一个或多个单元压入数组的末尾(入栈)

3. array_shift();		将数组开头的单元移出数组 
4. array_unshift();		在数组开头插入一个或多个单元

7.其他有用的数组处理函数

1. array_rand();   随机取一个key
2. shuffle();	   打乱数组 
3. array_sum();	   数组所有值的和
4. range();        获取一个范围内数组

字符串

字符串函数

  1. 字符串拆分函数

1. pathinfo()


	$str="http://localhost/www/test/index.php";
	$arr=pathinfo($str);
	echo "
";
	print_r($arr);
	echo "
"
; ?> //Array( [dirname] => http://localhost/www/test //目录名 [basename] => index.php //返回路径中的文件名 [extension] => php //文件扩展名,即文件后缀名 [filename] => index //文件名 )

2. parse_url()

$str="http://localhost/www/test/index.php?id=11111&name=aaaaa";
$arr=parse_url($str);
print_r($arr);
//Array(
	[scheme] => http                      //协议
	[host] => localhost                   //主机
	[path] => /www/test/index.php         //路径
	[query] => id=11111&name=aaaaa        //查询请求
)

3. parse_str(); 拆分参数

$str="http://localhost/www/test/index.php?id=11111&name=aaaaa";
$arr=parse_url($str);
parse_str($arr['query'],$arr2);
print_r($arr2);
//Array(
	[id] => 11111
	[name] => aaaaa
)

4. preg_split(); 正则拆分

$arr2=preg_split('/&|=/',$arr['query']);
  1. 字符串输出函数
1. echo "hello world";
2. print "hello world";
3. die("输出一条错误信息");
4. printf("%s,%d",$a,$b);
5. $str=sprintf("%s,%d",$a,$b); 
   echo $str;   //printf和sprintf的区别
变量输出函数:echo,var_dump,print_r,print,printf
  1. 去除空格和字符串填补函数
ltrim() 	去除左空格
rtrim() 	去除右空格
trim()   	去除左右空格
str_pad() 		用另一个字符填充字符串到指定长度
str_repeat() 	重复一个字符串
  1. 字符串大小写转换函数
strtolower() 	全部转换成小写
strtoupper() 	全部转换成大写
ucfirst() 		首单词首字母大写
ucwords() 	    每个单词的首字母大写
  1. 其他字符串格式化函数
strrev() 		字符串翻转
strlen() 		获取字符串长度
number_format() 	格式化数字字符串
md5() 		单向不可逆加密,32位字符串
str_shuffle() 	随机输出字符串
  1. 与 html 标签相关联的字符串函数
nl2br() 		       把\n转成br标签
htmlspecialchars() 	   转实体,转""><&
strip_tags($str,"");   去掉html标签,也可以保留一部分""里的标签
addslashes()           转义'、"、\,在它们前面加\,默认php开启
stripslashes() 	       去掉addslashes默认加的\

正则表达式

  1. 原子
.     任意一个字符
*     任意多个字符
()    模式单元,()内所有字符代表一个单元
[]    原子表,[]中的任意一个字符
[^]   除了[]中字符的其他任意字符
转义字符:
\d    数字
\D	  非数字
\w    字母、数字、下划线
\W    除了字母、数字、下划线
\s    空白字符、空格、tab
\S    除了空白字符、空格、tab
  1. 元字符
*	   0个、一个、多个	
+  	   一个、多个		
?	   0个、一个		
|	   或				
^	   以什么开头		
$	   以什么结尾		
\b	   词边缘			
\B	   非词边缘			
{2}	    2个原子			
{2,}    2个以上原子		
{2,5}   2-5个前面的原子	
  1. 模式修正符
i	忽略大小写	
m	视为多行		
s	视为一行		
U	非贪婪模式      
e	替换的时候可以用函数对替换的结果再加工

关于正则表达式的详细教程:https://www.jb51.net/tools/zhengze.html

正则表达式函数

1.匹配与查找
 preg_match();
 preg_match_all();
 preg_grep();  查找、搜索
2.替换 preg_replace();
3.字符串的分割与连接 preg_split();

4.正则表达式的web验证应用 
1)电子邮件地址
2)url地址 
3)电话号码

php常用功能模块

万年历:https://blog.csdn.net/weixin_43376075/article/details/104088225

php错误处理

关闭和开启报错
dispaly_errors=on
display_errors=off

报错级别:
E_ALL 所有错误
E_PARSE  语法错误 //脚本终止
E_ERROR   严重错误 //脚本终止
E_WARNING  警告错误 //脚本不终止
E_NOTICE   提示错误 //脚本不终止

报什么级别的错误:
error_reporting = E_ALL
error_reporting = E_ALL & ~E_NOTICE  //报所有错误,但除了提示错误

报错地方:
display_errors=off|on    //是否从浏览器上输出错误
log_errors=off|on     //是否把错误输出到错误日志中
error_log=d:\phplogs\php.log     //错误日志文件路径

php图片处理函数

验证码

imagecreatetruecolor()    //新建一个真彩色图像 
imagecolorallocate()      //为一幅图像分配颜色 
imagefill()               //区域填充
imageellipse()            //画一个椭圆 
imagefilledellipse()      //画一椭圆并填充 
imagesetpixel();          //画像素点
imageline();              //画线
imagerectangle();         //画一个矩形
imagefilledrectangle();   //画一个矩形并填充
imagepolygon();           //画多边形
imagearc();               //画弧形
imagestring();            //写字符串
imagechar();              //写单个字符
imagettftext();           //用TrueType字体向图像写入文本 

header("content-type:image/png"); //修改类型为图片
imagepng($im);            //以png格式输出图像//imagejpeg(),imagegif()
imagepng($im,"aaa.png");  //以png格式保存图片
imagedestory();           //释放画布资源 
页面跳转
1.echo "";
2.header("location:index.html");//php跳转方式,前面不能有输出(不推荐使用)

图片处理函数实用场景:1. 验证码 2. 缩放 3. 裁剪 4. 水印
验证码、图片缩放、水印:https://blog.csdn.net/weixin_43376075/article/details/104088225

缩放、裁剪、水印

获取图片的宽度:
1. getimagesize();
2. imagesx();
3. imagesy();
已经存在的图片形成画布资源:
imagecreatefromjpeg();
图片缩放函数/裁剪函数
imagecopyresampled();  //不失真(图片等比例缩放)
图片水印函数:
imagecopy();

文件处理

文件处理函数 https://blog.csdn.net/weixin_43376075/article/details/104102681

文件操作
文件测试

1.filetype();    #测试文件类型 
2.is_dir();      #是否是目录 
3.is_file();     #是否是文件 
4.file_exists(); #文件是否存在 
5.filesize();    #文件大小,单位是字节,目录大小为0 

文件操作

1.新建文件 fopen();
2.文件删除 unlink();
3.文件复制 copy();
4.文件命名 rename();
5.文件剪切 先copy();后unlink();
6.打开文件 fopen("filename","打开模式");//返回一个resource
7.关闭文件 fclose($fp);
//move_uploaded_file — 将上传的文件移动到新位置

打开文件模式
r     只读,文件指针指向文件头
r+   读写,文件指针指向文件头(边擦边写)
w     只写,文件指针指向文件头。将文件大小清空为零,如果文件不存在则创建
w+  读写,文件指针指向文件头。将文件大小清空为零,如果文件不存在则创建(清空再写)
a     写入,文件指针指向文件尾,如果文件不存在则创建
a+   读写,文件指针指向文件尾,如果文件不存在则创建

读写文件

读:
fread($fp,filesize($file)); 
file(); //不需要资源 //把文件以数组形式返回
readfile(); //不需要资源 
file_get_contents(); //不需要资源 

写:
fwrite();
file_put_contents();

文件指针操作:

feof();     #判断指针是否到了文件结尾(bool) 
ftell();    #告诉你当前位置
fseek();    #到指定位置
rewind();   #指针返回到文件开头

目录操作
与路径有关的函数

basename();
dirname();
__FILE__
realpath();    #相对地址转绝对地址(./ 表示当前目录; ../表示上一级目录)
DIRECTOPY_SEPARATOR   #查当前系统的目录分隔符
PATH_SEPARATOR     
pathinfo();
parse_url();
parse_str();
mkdir();   #创建目录
rmdir();   #删除目录
opendir(); #打开目录
readdir(); #读取目录
遍历目录
目录大小
删除目录
复制目录
剪切目录

文件上传和下载
文件上传:

  1. 上传页面表单
<form action="upload.php" method='post' enctype='multipart/from-data'>
	<input type="file" name="file">
form>
  1. 上传的php页面
    move_uploaded_file — 将上传的文件移动到新位置

  2. 错误编码

  0 -> 上传成功 
  1 -> 大小超过upload
  2 -> 大小超过表单中MAX_FILE_SIZE
  3 -> 只上传了部分文件
  4 -> 没有上传任何文件
  空 -> 大小超过php.ini设定的post

文件下载:

 header("content-type:application/octet-stream");
 header("content-disposition:attachment;filename={$imgfile}");
 header("content-lengrh:{$imgsize}");
 readfile($path);

常见数据格式:

  1. 图片文件:image/gif,iamge/jpg,image/jpeg,image/png
  2. 纯文件和html: text/plain,text/html
  3. 二进制文件: application/octet-stream
  4. 音频格式: audio.mpeg
  5. 视频格式: video/avi,video/x-ms-wmv

数据库

主键索引:primary key 普通索引:index (添加索引后检索的快)

检测sql语句:desc select * from user where id=3 \G

通过PHP连接mysql数据库:
mysql_connect("localhost","root","123");

选择数据库:
mysql_select_db("test");

设置客户端和连接字符集:
mysql_query("set names utf8");

通过PHP进行insert操作:
$sql="insert into ......";
mysql_query($sql);

释放结果集资源:
mysql_free_result($result);

释放连接资源:
mysql_close($conn);

从结果集中取数据
mysql_fetch_assoc();   //关联数组(推荐)
mysql_fetch_row();      //索引数组
mysql_fetch_array();    //混合数组
mysql_fetch_object();  //对象  (取值:$obj->username)

mysql_insert_id();   查询到最后一次进行insert操作的用户id
mysql_affected_rows();   取得insert、update、delete操作所影响的行数
mysql_num_rows();      取得select操作所影响的行数

php和mysql实现分页技术及用户模块管理

会话控制

cookie和session超全局数组解决了多页面使用同一个变量的问题

cookie技术

设置cookie:
setcookie("username","user1",0,"/"); 

删除cookie:
setcookie("username","",time()-3600,"/"); 

查看cookie:
print_r($_COOKIE);

session技术

设置session:
session_start();
$_SESSION['username']=$username;

查看session:
print_r($_SESSION);

删除session:
unset($_SESSION['user']);
$_SESSION=array();
session_destroy();


补充:
避免用户直接访问页面2,导致获取不到页面1的数据而报错:
页面1:define(‘APP’,‘itcast’);
页面2:if(!define(‘APP’)){echo ‘error!’;}

http_build_query — 生成 URL-encode 之后的请求字符串

$error=iconv(‘gbk’, ‘utf-8’, mysqli_connect_error());
连接数据库时如果出现中文乱码可以使用iconv将gbk编码的错误信息变为utf8编码再显示

防止sql注入:$username = mysqli_real_escape_string( $link, $username);


       2020年2月4日,我终于看完了php视频。。。这好像是实验室前两年布置的任务吧(无奈),拖了这么久终于完成了,19岁生日快乐,以后不拖拉了

你可能感兴趣的:(#,PHP,php)