文件操作
PHP也提供了一套文件操作系统函数。通过这套函数进行文件管理,创建文件、删除、改名、存储数据,读取数据。 文件的理解:在文件管理系统文件分为两种 其一就是文件,用于存储数据 其二是文件夹,用于存储文件的文件
1. 文件相关信息
函数说明备注
file_exists(filename);用于判断一个文件是否存在filename是一个表示文件的完整名的一个字符串filemtime($filename);用于获取文件修改的时间获得时间戳,用date()转换为具体时间filesize($filename);用于获取文件的大小单位为字节basename(path);用于获取文件名realpath(path);用于判断path是否是真实存在的一个路径如果不是返回的是布尔false。如果是那么会将‘/’转换为‘\’,并将相对路径转换为绝对路径
2. 打开文件fopen()
fopen(filename,code);用于打开一个文件,用于之后的对文件内容的读写操作
filename是一个表示文件的完整名的一个字符串mode表示打开的方式
mode取值打开文件方式说明
r读文件不存在则报错r+读写文件不存在则报错w写文件不存在则创建文件,如果文件存在则清空文件w+读写文件不存在则创建文件,如果文件存在则清空文件a追加文件不存在则创建文件,如果文件存在并不会清空文件a+追加及读文件不存在则创建文件,如果文件存在并不会清空文件
如果以r、r+打开的文件,那么文件指针位于头部 如果以a、a+打开的文件,那么文件指针位于尾部
如果打开成功返回的是一个资源类型:
$filename="./data.txt";
$return=fopen($filename,'r');
var_dump($return);
3. 关闭文件
fclose(handle); handle是fopen()函数返回的资源 用于判断handle所指向的文件
$filename="./data.txt";
$return=fopen($filename,'r');
fclose($return);
var_dump($return);
4. 写入文件fwrite()
fwrite(handle,data)-
handlefopen()函数返回的资源data所要写的数据如果写入成功则返回写入字节数如果写入失败则返回0
file_put_contents(filename,data); 用于向文件中写入数据,特点是文件不需要打开,如果文件存在则清空文件内容
5. 读取文件内容
函数说明
fgetc(handle);每次从handle所代表的文件中读取一个字符,文件的指针会下移一行fgets(handle,len);len表示读取的字节个数-1,默认是1024当遇到换行回车时就结束读取fread(handle,len);len表示读取的字节个数,不可以省略当遇到换行回车时,不受影响file(filename);将文件中的每一行读取的一个元素,并返还整个数组readfile(filename);filename用于表示文件的字符串将读取到的内容自动放到输出缓存(直接输出,不需要echo)file_get_contents(filename);一次性将所有文件读取出来
file()示例:
6. 拷贝文件
copy(source,dest);用于复制一个文件,复制文件时可以改名
source源文件dest目录文件
7. 删除文件
unlink(filename);用于删除文件
8. 文件的判断
is_file(filename);主要用于区分文件还是文件夹(文件是否存在)
9. 文件指针(了解)
函数说明
ftell(handle);用于获取文件的指针位置fseek(handle,n,【whence】);用于移动文件的指针位置注:-handle是fopen函数的返回值,代表实际的文件n偏移量whence移动的相对位置,取值:SEEK_SET 相对于文件头SEEK_END 相对于文件尾SEEK_CUR 相对于当前位置
/打开文件
$filename="./data.txt";
$handle=fopen($filename,'r');
$return=fseek($handle,-3,SEEK_END);
echo fgetc($handle);
10. 文件锁(了解)
flock(handle,type);-
type锁的类型
$filename="./data.txt";
$handle=fopen($filename,'r');
flock($handle,LOCK_EX);
sleep(10);
目录操作
1. 创建目录
mkdir(path,mode,recursive);-
part所要创建的文件夹mode权限,主要体现在Linuxrecursive取值为布尔值,表示要创建层级文件夹
$folder='Parent';
mkdir($folder);
$folder='Parent/Childen/';
mkdir($folder,1,true);
2. 打开目录
opendir(folder);-
folder表示文件夹目录的一个字符串如果打开成功返回一个资源类型
3. 关闭目录
closedir(handle);-
handleopendir函数的返回值
4. 目录重命名
rename(source,dest);-
source原文件夹dest新文件夹名
5. 删除目录
rmdir(folder);
6. 读取目录内容
readdir(handle); 用于读取文件夹的内容,只能读取当前层级内容,不能读取子文件夹中的内容 每次只读取一个条目,并将指针下移一行
7. 扫描目录
scandir(folder); 一次性将当前文件夹(不包含子文件夹)中所有内容读取到数组中,并返还这个数组
8.判断文件夹
is_dir(dir); dir就是一个表示文件夹的字符串 用于判断文件夹
9.遍历文件夹
$dir='../demo';
function getTree($dir){
$arr=scandir($dir);
foreach ($arr as $v){
$item=$dir.'/'.$v;
if(is_dir($item)) {
if($v=='.'||$v=='..'){
continue;
}
echo '<font color="red">' . $item . '</font>', '<BR>';
getTree($item);
}else{
echo '<font color="blue">' . $item . '</font>', '<BR>';
}
}
}
getTree($dir);
HTTP协议
1.概念
HyperText Transformation Protocol(超文本传输协议) HTTP互联网一个基石,就是客户端与web服务的通讯规则,规定了通讯双方通许时所采用的格式,以及格式的含义
2.HTTP协议的特点
支持c/s(客户端/服务器)结构简单,客户端向服务器端发起请求时,只需要传递所请求的文件即可灵活,服务器端向客户端响应数据,可通过content-type,来设置返回的数据类型无连接,服务器每次只处理一个请求,请求结束后断开与客户端的连接无状态,由于服务器与客户端具有无连接的特性,所以不了解客户端的本次请求,服务器并不知道本次请求与上次请求是否来源于同一个客户端,无法跟踪客户端的状态
3.HTTP协议的组成
两部分组成:
(1).由客户端发起的请求部分
(2).由服务器端对客户端的响应部分
4.HTTP请求
http的请求是由浏览器根据用户输入的URL,或点击某个页面上的按钮,而自动进行组织的
HTTP请求由三部分组成
(1). 请求头
说明代码
请求方式GETURI(请求的文件名)/yzf/demo/file.html协议及版本号HTTP/1.1
(2). 报头
常见说明
Host请求的主机名Connect保持连接User-Agent浏览器的相关信息,会自动携带给服务器Accept浏览器所能处理的数据的格式Accept-Encoding浏览器所支持的压缩格式Accept-Language浏览器所支持的语言If-Modified-Since用于询问当前所请求的内容,自从上次是否有修改过
(3). 空行
空行作用是用于分隔协议头与实际的数据
5.HTTP响应
HTTP协议的响应是由web服务器根据用户的请求,进行处理后,自动进行组织的
(1).响应行
--
协议及版本号HTTP/1.1状态码200状态描述OK
常见的状态码描述
200成功404请求文件不存在403没有权限
(2).响应的报头
-说明
Date时间Server服务器的相关信息Last-Modified与客户端请求头中的Last-Modified-Since对应Content-Type此次响应的数据是什么格式,默认都是text/htmlAccept-Length所返回的数据的长度317Accept-Range返回的数据的单位
(3). 空行
空行作用是用于分隔协议头与响应的实际的数据
6.PHP操作和HTTP响应头
默认HTTP协议的响应头是由web服务器自动组织,PHP为我们提供了一个设置HTTP响应的协议头的函数header
(1).设置浏览器显示编码
header(‘Content-Type:text/html;charset=utf8’);
(2).用于进行跳转
header(‘location:url’);
(3).下载
header('Content-Type:application/octet-stream');
header('Content-disposition:attachment;filename=ok..png');
$return=file_get_contents('3.png');
数据采集(了解)
1.什么是数据采集
我们创建网站是为了显示数据,但有一些数据的获取成本非常高。所谓的数据采集就是将别人网站的数据,为我们所用。
2.curl函数
Curl是一个代码版的浏览器。允许我们在代码中像使用浏览器一样访问别人的页面。默认PHP并没有开启对curl的支持,需要自己在配置文件中手动开启。 提示:如果开启后也无法使用,需要将php目录中的4个文件libeay32.dll、libss32.dll、ssleay32.dll、php5ts.dll文件复制到Apache的bin目录中 一般配置好wamp64都是默认开启的
3.curl函数的使用
(1).初始化curl(打开一个浏览器)
curl_init()
(2).设置参数(输入地址)
curl_setopt(curl,参数名,参数值);-
curl就是curl_init的返回值参数名参数都是以常量的形式设计的CURLOPT_URL用于设置所请求的网址CURLOPT_RETURNTRANSFER取值若为1,表示不将收到的数据直接返回给浏览器,而是作为curl_exec()函数的返回值CURLOPT_POST取值为1CURLOPT_POSTFIELDS用于设置post请求所携带的数据
(3).执行curl(回车)
curl_exec(); 用于执行某个curl工具
$ci=curl_init();
curl_setopt($ci,CURLOPT_URL,'http://www.baidu.com');
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);
$html= curl_exec($ci);
file_put_contents('test.txt',$html);
4.模拟get请求
5.模拟post请求
$ci=curl_init();
$url='http://localhost/yzf/news/php/insertNews.php';
curl_setopt($ci,CURLOPT_URL,$url);
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ci,CURLOPT_POST,1);
$data=['n_name'=>'^_^','n_id'=>2,'n_sort'=>100,'n_dest'=>'测试','n_content'=>'unstopable'];
curl_setopt($ci,CURLOPT_POSTFIELDS,$data);
for($i=0;$i<3;$i++) {
curl_exec($ci);