递归和快速排序.docx
《递归和快速排序.docx》由会员分享,可在线阅读,更多相关《递归和快速排序.docx(17页珍藏版)》请在冰豆网上搜索。
递归和快速排序
昨日回顾
文件上传
1、前端界面,form表单中的Input表单输入元素
enctyp:
用于设置二进制数据传递,
取值:
application/x-www-form-urlencoded(默认)
multiplart/form-data用于二进制数据传递
method:
用于设置数据提交方式
post可以传递文本数据与二进制数据
2、后台处理
开启文件上传功能php.ini
file_uploads=on
upload_tmp_dir设置临时文件夹(特点,脚本执行结束,其中文件就会被删除,所以需要将此目录中的上传的文件移动其他位置)
move_uploaded_file($source,$target)
用于移动文件
$source与$target是一个完整的文件名(包含路径与文件名)
$source文件名的获取:
$_FILES
$_FILES专用于存储上传文件信息的一个超全局变量(数组)
一维的键名:
form表单的name属性值
键值又是一个数组,其中包含:
name键名,记录的是客户端上传的文件的原名
type键名,记录的是客户端上传的文件的类型(MIME)
tmp_name键名,记录的是服务器临时目录中的文件(需要被移走文件)
error键名,记录的是上传文件过程中出现的错误
size键名,记录的是上传文件的大小
文件的操作
文件:
文件与目录,目录也是一个文件,目录的作用是用于存储文件的的文件。
文件的操作:
file_exists($filename);
判断文件是否存在
filemtime($filename);
获取文件的创建时间
fileatime($filename);
获取文件的修改时间
文件的属性:
is_readable($filename);
is_writeable($filename);
is_executable($filename);
copy($source,$target);用于复制文件
说明:
$source是原文件名
$target是新文件名
rename($source,$target);
说明:
$source是原文件名
$target是新文件名
文件中数据的操作
fopen($filename,$mode);
说明:
用于打开一个文件,返回一个资源
$filename是一个文件的完整路径
$mode是文件的打开模式
r以只读取的方式打开
r+读写方式向头部写入
示例:
w
w+
以读写的方式打开,如果文件不存,则创建,如果存在,则覆盖全部内容
a
a+
以读写的方式打开,向文件尾部写入
文件指针:
fseek($fp,位置)
示例:
ftell($fp);
用于获取指针的位置
文件锁定
当对某一个文件进行并发写入的时候,A用户在向某个文件进行写的时,B用户又向该文件写入数据。
flock($fp,mode);
说明:
$fp是文件资源
mode锁定的方式
LOCK_SH共享锁
LOCK_EX排他锁
LOCK_UN取消锁定
示例:
fgetc($fp)
说明:
c表示character,字符(单个)
每次读取一个字符,并将文件指针下移
示例:
fgets($fp)
说明:
每次读取一行内容,并将文件指针下移
file($filename)
说明:
将文件的每一行作为数组的一个元素
示例:
readfile($filename)
说明:
直接将整个文件的内容放到输出缓冲区(不需要echo)
示例:
file_get_contents($fp)
用于读取所有的文件内容
示例:
fwrite($fp,'内容');
说明:
向文件$fp中写入内容(写入的位置根据fopen打开文件的模式而定)
file_put_contents($filename,'内容');
说明:
$filename是文件名(URI)
不需打开文件
示例:
unlink($filename);
说明:
用于删除文件
对目录的操作:
首先需要明确目录也是一个文件。
opendir($filename)
说明:
用于打开一个目录
scandir($filename);
说明:
用于扫描目录内容,并以数组的形式返回
示例:
closedir($handle)
说明:
用于关闭目录
chdir($dir)
说明:
用于更改目录
getcwd()
说明:
用于获取当前工作目录
递归:
函数自己调用自己。
函数是用于完成某一功能,在处理实际问题时,在写函数体时,发现其后完成的功用,与已写好的函数的功用一样,此时就可以在函数体,此位置调用函数本身。
提示:
递归是层级一层层调用自己,但实现递归时只考虑一层
递归两要素:
递归点:
函数其后的功能与已完成的代码一致时,使用函数自己调用自己。
递归出口:
根据需求设置函数的返回条件。
遍历某文件夹中所有的内容(包含子文件夹中的内容与文件夹)
第1步:
只遍历一层目录内容
第2步:
找到递归点
第3步:
递归出口
is_dir($filename);
说明:
用于判$filename是否是一个目录,如果是返回true,否则返回false
$filename是一个绝对路径
算法:
快速排序
思想:
将一个数组分为左右两部分进行比较,再对左边与右边执行相同的操作,
当最层的函数returnmerge($left,array($tmp),$right),最内层的上一层,则有机会以执行returnmerge(...)
示例:
文件下载
两种方式:
一、使用a链接,实现下载
示例:
缺点:
只能是不能被浏览器解析的文件
会暴露文件的路径(服务器的目录结构会被显示出来)
二、使用php来操作http协议实现文件下载
1、告诉浏览器不要解析此文件。
header('content-type:
application/octet-stream');
2、告诉浏览器此数据需要作为数据进行下载
header('content-disposition:
attachment;filename=保存的文件名');
3、传递数据
php读取文件中的内容,再使用echo输出至缓冲区即可。
示例:
前端界面
后台php处理
MySQL
Database只要是用于存储数据的介质都可以称之为数据库。
在计算机中数据库就是用于高效率的对数据进行读取软件。
数据库的分类:
关系型数据库
只要是存储在硬盘中的数据库就可理解为关系型数据库。
就是使用关系型来组织数据的数据库即为关系型数据库。
非关系型数据库
只要是存储在内存中的数据库就是非关系型数据库。
没有使用关系型来组织数据的数据库即为非关系型数据库
关系型数据库与非关系型数据库的区别:
关系型数据库特点:
1、事务一致性,事务就是现实中的某件事,体现在数据库中就是对数据库的操作。
现实中的某一件事务,可能需要数据库执行多步。
例如:
银行中,A用户转帐给B用户,就是一个完整的事务,现实是不能再拆分。
在数据库的本质是:
A操作,对A用户减少金额;B操作,对B用户增金额。
是由两步操作完成,由这是一个完整事务,数据库中A操作与B的操作必须全成功,才算现实的成功。
所以关系型数据库,可以应用于任何对一致性有要求的系统,典型的代表银行系统。
2、另一个特点,使用关系模型来组织数据,换句话说就是使用二维表来存储数据,二维表就是对数据的一种约束。
非关系型数据库
使用的不是二维来存储数据,使用的是Key=>Value,键值对存储数据。
1、用于高并发,高读写能力数据库,典型的代表Redis
2、适用于海量数据的查询
特点:
在海量数据中可以进行快速查找(中文),典型的代码MongoDB
MySQL数据库中的对象:
DBMS数据库管理系统
DB数据库
Table数据表
Record记录
Field字段
MySQL服务的维护
1、图形界面
服务对MySQL进行启动、重启、关闭。
2、cmd命令行
netstop服务名
用于停止指定的服务器
netstart服务名
用于启动mysql服务
示例:
MySQL的登陆
MySQL是一种C/S结构
MySQL的客户端:
cmd、可视化图形界面、php代码
MySQL客户端与服务器端
登陆语法:
mysql-h主机名-P端口号-u用户名-p密码数据库名
mysql命令在cmd窗口的任何位置都可以运行的前提:
必须设置环境变量。
将mysql.exe文件所在的目录,粘贴至window的系统环境变量中。
示例:
SQL命令
数据库的操作也就是SQL命令
SQL(StructuredQueryLanguage)
结构化查询语言,虽然是查询语言,也是一种编程语言,但是执行查询操作。
根据数据的操作对象,可以将SQL语句分为几类。
DDL(DataDefinationLanguage)数据定义语言
createdatabase、createtable、createview、createfunction、createprocedure
dropdatabase.....
DML(DataModifyLanguage)数据修改语言
update、insert、delete
DQL(DataQueryLanguage)数据查询语言
select
DCL(DataControlLanguage)数据控制语言(通过用户权限)
createuser、grant权限
TCL(TransactionControlLanguage)事务控制语言
transaction、commit、rollback
数据库的操作
创建一个数据库
语法:
createdatabase数据库名【charsetutf8】;
示例:
创建数据库的本质:
会在my.ini中的datadir配置选项指定的目录中创建一个与数据库同名的目录。
在数据库同名目录中会存在一个db.opt文本文件示例:
说明:
字符集,是用于存储数据库的编码方式
校验集,就是某一个字符集内比较规则
my.ini中的datadir示例:
查看数据库
查看所有的数据库
语法:
showdatabases;
示例:
test数据库,可以删除
mysql数据库,mysql的核心数据库,msyql用于管理其他数据库的数据库。
建议不要轻易修改里面的数据。
information_schema数据库,记录着mysql用于管理其他数据库的相关信息。
performance_schema数据库,性能数据库,主要记录了服务器的运行性信息。
查看数据库的创建语句
语法;
showcreatedatabase数据库名;
示例:
修改数据库
只能修改字符集与校验集。
alterdatabase数据库名charset字符集;
示例:
删除数据库
语法:
dropdatabase数据库名;
示例:
示例:
set_time_limit(0);
content-type:
application/octet-stream
content-disposition:
attachment;filename='filename';
echofile_get_contents