核心编程笔记 文件 目录 HTTP协议 数据采集(curl)

文件操作

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);//返回:resource(3, stream)

3. 关闭文件

fclose(handle);

    handle是fopen()函数返回的资源

    用于判断handle所指向的文件

$filename="./data.txt";
$return=fopen($filename,'r');
fclose($return);
var_dump($return);//返回resource(3, Unknown)

4. 写入文件fwrite()

fwrite(handle,data) -
handle fopen()函数返回的资源
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()示例:

==图片1==

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);//10秒后解锁

目录操作

1. 创建目录

mkdir(path,mode,recursive); -
part 所要创建的文件夹
mode 权限,主要体现在Linux
recursive 取值为布尔值,表示要创建层级文件夹
//创建单个文件夹
$folder='Parent';
mkdir($folder);
//创建多级文件夹
$folder='Parent/Childen/';
mkdir($folder,1,true);

2. 打开目录

opendir(folder); -
folder 表示文件夹目录的一个字符串
如果打开成功返回一个资源类型

3. 关闭目录

closedir(handle); -
handle opendir函数的返回值

4. 目录重命名

rename(source,dest); -
source 原文件夹
dest 新文件夹名

5. 删除目录

rmdir(folder);

6. 读取目录内容

readdir(handle);

用于读取文件夹的内容,只能读取当前层级内容,不能读取子文件夹中的内容

每次只读取一个条目,并将指针下移一行

7. 扫描目录

scandir(folder);

一次性将当前文件夹(不包含子文件夹)中所有内容读取到数组中,并返还这个数组

==图片2==

8.判断文件夹

is_dir(dir);

dir就是一个表示文件夹的字符串

用于判断文件夹

9.遍历文件夹

//遍历制定文件夹中的所以内容
//1、设置一个函数,输出给定的文件夹中所有的内容
//2、如果是文件夹以红色显示,如果是文件以蓝色显示(区分文件夹与文件)
//3.如果是子文件夹,再遍历出子文件夹左右内容
$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协议的特点

  1. 支持c/s(客户端/服务器)结构
  2. 简单,客户端向服务器端发起请求时,只需要传递所请求的文件即可
  3. 灵活,服务器端向客户端响应数据,可通过content-type,来设置返回的数据类型
  4. 无连接,服务器每次只处理一个请求,请求结束后断开与客户端的连接
  5. 无状态,由于服务器与客户端具有无连接的特性,所以不了解客户端的本次请求,服务器并不知道本次请求与上次请求是否来源于同一个客户端,无法跟踪客户端的状态

3.HTTP协议的组成

两部分组成:

(1).由客户端发起的请求部分

(2).由服务器端对客户端的响应部分

==图片3==

4.HTTP请求

http的请求是由浏览器根据用户输入的URL,或点击某个页面上的按钮,而自动进行组织的
==图片4==

HTTP请求由三部分组成

(1). 请求头

==图片5==

说明 代码
请求方式 GET
URI(请求的文件名) /yzf/demo/file.html
协议及版本号 HTTP/1.1

(2). 报头

==图片6==

常见 说明
Host 请求的主机名
Connect 保持连接
User-Agent 浏览器的相关信息,会自动携带给服务器
Accept 浏览器所能处理的数据的格式
Accept-Encoding 浏览器所支持的压缩格式
Accept-Language 浏览器所支持的语言
If-Modified-Since 用于询问当前所请求的内容,自从上次是否有修改过

(3). 空行

空行作用是用于分隔协议头与实际的数据

5.HTTP响应

HTTP协议的响应是由web服务器根据用户的请求,进行处理后,自动进行组织的

(1).响应行

==图片7==

- -
协议及版本号 HTTP/1.1
状态码 200
状态描述 OK
常见的状态码 描述
200 成功
404 请求文件不存在
403 没有权限

(2).响应的报头

==图片8==

- 说明
Date 时间
Server 服务器的相关信息
Last-Modified 与客户端请求头中的Last-Modified-Since对应
Content-Type 此次响应的数据是什么格式,默认都是text/html
Accept-Length 所返回的数据的长度317
Accept-Range 返回的数据的单位

(3). 空行

空行作用是用于分隔协议头与响应的实际的数据

6.PHP操作和HTTP响应头

默认HTTP协议的响应头是由web服务器自动组织,PHP为我们提供了一个设置HTTP响应的协议头的函数header

(1).设置浏览器显示编码

header(‘Content-Type:text/html;charset=utf8’);

(2).用于进行跳转

header(‘location:url’);

(3).下载

//1.通过协议头告诉浏览器端,将要发送的数据,不能使用图片格式,而应该作为一个应用程序数据
header('Content-Type:application/octet-stream');

//2.通过协议头告诉浏览器,将要发送的数据,作为附件下载
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()
==图片9==

(2).设置参数(输入地址)

curl_setopt(curl,参数名,参数值); -
curl 就是curl_init的返回值
参数名 参数都是以常量的形式设计的
CURLOPT_URL 用于设置所请求的网址
CURLOPT_RETURNTRANSFER 取值若为1,表示不将收到的数据直接返回给浏览器,而是作为curl_exec()函数的返回值
CURLOPT_POST 取值为1
CURLOPT_POSTFIELDS 用于设置post请求所携带的数据

(3).执行curl(回车)

curl_exec(); 用于执行某个curl工具

//1.初始化curl(打开一个浏览器)
$ci=curl_init();

//2.设置curl选项(输入地址)
curl_setopt($ci,CURLOPT_URL,'http://www.baidu.com');
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);

//3.执行curl(回车)
$html= curl_exec($ci);

file_put_contents('test.txt',$html);

4.模拟get请求

5.模拟post请求

//1.初始化curl(打开一个浏览器)
$ci=curl_init();

//2.设置curl选项(输入地址)
$url='http://localhost/yzf/news/php/insertNews.php';
curl_setopt($ci,CURLOPT_URL,$url);
curl_setopt($ci,CURLOPT_RETURNTRANSFER,1);

//设置post请求方式
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++) {
//3.执行curl(回车)
    curl_exec($ci);

==图片10==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章