双引号""解释字符串中的变量
单引号 ''不解释字符串中的变量(所以单引号解析速度快)
header(“content-type:text/html;charset=utf-8”);
解决中文乱码(header头前不能有输出)
数据库密码错误时也可以访问test数据库
php是一种解析型语言(弱类型语言),只需拿解析器解析。因为网站脚本语言没有必要编译后再使用,一般需要编译的语言都是强类型语言,例如c,java
三种变量输出:
echo //输出变量
var_dump //输出数组,并打印类型和长度
print_r //输出数组
常量的定义:
const COUNT=0.8;
define(“HOST”,“localhost”);
常量一旦被定义就不能被修改
- const可在类中使用,define不能。
- const定义的常量大小写敏感,而define可通过第三个参数(为TRUE表示大小写不敏感)来指定大小写是否敏感。define(‘TXE’,100,TRUE);
- const不能在条件语句中定义常量,而define函数可以。if($a>10){define(‘LE’,‘hello’);}
- const与#define的区别和优点:https://blog.csdn.net/weibo1230123/article/details/81981384
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)
sublime中 :%s/班级/学员/g 把文档内字符串中的“班级”全部替换成“学员”
isset 变量是否存在
不存在的情况:1.没有定义
2.定义的值为null
empty 变量是否为空
为空的情况:1.0
2.""
3."0"
4.false
5.array()
6.null
7.没有定义
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
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 : 当前月的天数
数组由多个元素组成,每个元素由key-value对组成,value分为8种变量类型
索引数组:下标是数字的是索引数组
关联数组:下标是字符串的是关联数组
数组遍历foreach和while…list…each
foreach($arr as $key=>$val){
echo "{$key}:{$val}";
}
while(list($key,$val)=each($arr)){
echo "$key.$val";
$_SERVER 查看服务器信息
$_GET 获取get提交的数据
$_POST 获取post提交的数据
$_REQUEST 获取a标签get或表单post提交的数据
$_FILES 获取表单中的文件,并生成一个数组
$_COOKIES 同一个变量在多个页面获取到(用户登录)
$_SESSION 同一个变量在多个页面获取到(用户登录)
$GLOBALS
(超全局变量:在页面的任何一个地方都可以使用,无论在函数内还是函数外)
array_values(); 获取数组中的值
array_keys(); 获取数组中的键
in_array(); 检查一个值是否在数组中
array_key_exists(); 检查一个键是否在数组中
array_flip(); 键和值对调
array_reverse(); 数组中的值反转
count(); 统计数组中元素的个数
array_count_values(); 统计数组中值出现的次数
array_unique(); 删除数组中重复值
array_filter(); 数组值过滤
array_map() ; 将回调函数作用到给定数组的单元上
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. 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. 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
ltrim() 去除左空格
rtrim() 去除右空格
trim() 去除左右空格
str_pad() 用另一个字符填充字符串到指定长度
str_repeat() 重复一个字符串
strtolower() 全部转换成小写
strtoupper() 全部转换成大写
ucfirst() 首单词首字母大写
ucwords() 每个单词的首字母大写
strrev() 字符串翻转
strlen() 获取字符串长度
number_format() 格式化数字字符串
md5() 单向不可逆加密,32位字符串
str_shuffle() 随机输出字符串
nl2br() 把\n转成br标签
htmlspecialchars() 转实体,转""、>、<、&
strip_tags($str,""); 去掉html标签,也可以保留一部分""里的标签
addslashes() 转义'、"、\,在它们前面加\,默认php开启
stripslashes() 去掉addslashes默认加的\
. 任意一个字符
* 任意多个字符
() 模式单元,()内所有字符代表一个单元
[] 原子表,[]中的任意一个字符
[^] 除了[]中字符的其他任意字符
转义字符:
\d 数字
\D 非数字
\w 字母、数字、下划线
\W 除了字母、数字、下划线
\s 空白字符、空格、tab
\S 除了空白字符、空格、tab
* 0个、一个、多个
+ 一个、多个
? 0个、一个
| 或
^ 以什么开头
$ 以什么结尾
\b 词边缘
\B 非词边缘
{2} 2个原子
{2,} 2个以上原子
{2,5} 2-5个前面的原子
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)电话号码
万年历:https://blog.csdn.net/weixin_43376075/article/details/104088225
关闭和开启报错
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 //错误日志文件路径
验证码
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(); #读取目录
遍历目录
目录大小
删除目录
复制目录
剪切目录
文件上传和下载
文件上传:
<form action="upload.php" method='post' enctype='multipart/from-data'>
<input type="file" name="file">
form>
上传的php页面
move_uploaded_file — 将上传的文件移动到新位置
错误编码
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);
常见数据格式:
- 图片文件:image/gif,iamge/jpg,image/jpeg,image/png
- 纯文件和html: text/plain,text/html
- 二进制文件: application/octet-stream
- 音频格式: audio.mpeg
- 视频格式: 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);