04、PHP常用操作

一、文件操作

文件目录函数库

文件相关

//获取文件
$file_name = "./text.txt";
//返回文件类型
echo filetype($file_name),'<br>';

//返回文件大小(字节数)
echo filesize($file_name),'<br>';

//返回文件创建时间戳
echo filectime($file_name),'<br>';
echo date('Y年m月d日 H:i:s',filectime($file_name)),'<br>';

//返回文件修改时间
echo filemtime($file_name),'<br>';

//返回文件最后访问时间
echo fileatime($file_name),'<br>';

//检测是否为文件
var_dump(is_file($file_name));
echo '<br>';

//检测文件是否可读、可写、可执行
var_dump(
    is_readable($file_name),
    is_writable($file_name),
    is_executable($file_name)
);

 

文件路径相关

$pathinfo = pathinfo($file_name);
print_r($pathinfo);
echo pathinfo($file_name,PATHINFO_DIRNAME),'<br>';//dirname:若是当前目录就为 .
echo pathinfo($file_name,PATHINFO_BASENAME),'<br>';//basename:文件名(包含扩展名)
echo pathinfo($file_name,PATHINFO_FILENAME),'<br>';//filename:文件名
echo pathinfo($file_name,PATHINFO_EXTENSION),'<br>';//extension:扩展名

//输出当前文件完整路径
$file_name = __FILE__; //获取$file_name的完整路径,包含文件名
echo $file_name,'<br>';

//返回路径中的文件名(含扩展名)
echo basename($file_name),'<br>';
//返回路径中的文件名(过滤掉.php后缀)
echo basename($file_name,'.php'),'<br>';
//返回当前文件的所在路径
echo dirname($file_name),'<br>';

//检测文件或目录是否存在
var_dump(file_exists($file_name));

 

文件操作相关

//创建文件,若文件存在则进行覆盖
$file = '哈哈哈.txt';
if(touch($file))
    echo '文件创建成功';

//删除文件,若文件不存在,还执行删除就会报错
if(file_exists($file) && unlink($file))
    echo '文件删除成功';
else
    echo '文件删除失败';

//重命名 || 剪切文件
if(file_exists($file) && rename($file,'我是新名字的.txt'))
    echo '重命名成功';
else
    echo '重命名失败';
//剪切只是在重命名的基础上添加路径
if(file_exists($file) && rename($file,'../我是新名字的.txt'))
    echo '剪切成功';
else
    echo '剪切失败';

//拷贝文件
if(file_exists($file) && copy($file,'../'.$file))
    echo '文件拷贝成功';
else
    echo '文件拷贝失败';
//也可拷贝远程文件,需要php.ini 开启 allow_url_fopen=On
if(copy('http://baijia-admin.solomore.net/new_baijiabackend/back_end/cover_mp4/upload/1606124640不吼不叫+主动+夫妻.mp4','bbc.mp4'))
    echo '文件拷贝成功';
else
    echo '文件拷贝失败';

 

文件内容(打开文件)

$filename = './text.txt';

//打开文件
$handle = fopen($filename,'r');
//第一个参数为文件路径
//第二个参数指定以什么形式打开文件。

 

 

 

文件内容(读取文件)

$filename = './text.txt';

//打开文件
$handle = fopen($filename,'r');

//读取文件
//$res =  fread($handle,3);
//第一个参数为文件句柄
//第二个参数为读取多少个字节
//注意:若读取到3的位置,指针也会在3的位置,下一次读取的时候是不会从头开始读的

$res = fread($handle,filesize($filename)); //读取全部文件
//echo $res;

 

 更好的读取文件操作

//header("content-type:image/jpeg");
header("content-type:video/mp4"); //记得添加输出的文件类型
$filename = './bbc.mp4';
//打开文件
$handle = fopen($filename,'rb+');
//注意:为了更好的兼容性,在选择打开方式的时候在后面追加一个b

//读取文件
$res =  fread($handle,filesize($filename));
echo $res;

//关闭文件
fclose($handle);

 

按字节读 / 按行读

//打开文件
$handle = fopen($filename,'ab+');

while (!feof($handle)){ //判断当前指针是否已经到文件末尾
    //一个字节一个字节地读
//    echo fgetc($handle)."\n";

    //一行一行地读
//    echo fgets($handle)."\n";

    //一行一行的读,过滤html标签
    echo strip_tags(fgets($handle))."\n";
}

 

 

 

文件内容(文件指针)

//获取当前指针的位置
echo ftell($handle);
//第一个参数为文件句柄

//设置指针的位置
fseek($handle,2);
//第一个参数为文件句柄
//第二个参数为指针移动到的位置下标

 

 

文件内容(关闭文件)

$filename = './text.txt';

//打开文件
$handle = fopen($filename,'r');

//读取文件
$res =  fread($handle,3);
echo $res;

//关闭文件
fclose($handle);
//第一个参数为文件句柄
//注意:关闭文件后,文件获取到的文件句柄将不可用

 

 

文件内容(写入文件)

fwrite的别名是fputs,两者是等价的

以读写的形式写入文件r+

//打开文件
$handle = fopen($filename,'rb+');

//fwrite()执行写入操作
fwrite($handle,'我要写入文字',6);
//第一个参数为文件句柄
//第二个参数为写入的内容
//第三个可选参数,表示写入的长度,默认全部写入
//注意:写入的内容会覆盖原来的内容,写入到哪个地方指针就会在哪里停留
以写入的形式打开文件w。若文件存在则截断为0后写入;若文件不存在则会先创建

//打开文件
$handle = fopen($filename,'w');

//fwrite()执行写入操作
fwrite($handle,'我要'.PHO_EOL.'写入文字'); //PHP_EOL已弃用
//第一个参数为文件句柄
//第二个参数为写入的内容
//第三个可选参数,表示写入的长度,默认全部写入
//注意:写入的内容会覆盖原来的内容,写入到哪个地方指针就会在哪里停留

 

以写入的形式打开文件a  a+是读写的形式
若文件存在,则指针跳到文件末尾后写入;若文件不存在则会先创建

//打开文件b
$handle = fopen($filename,'ab+');

//fwrite()执行写入操作
fwrite($handle,'我要写入文字'."\n");
//第一个参数为文件句柄
//第二个参数为写入的内容
//第三个可选参数,表示写入的长度,默认全部写入
//注意:写入的内容会覆盖原来的内容,写入到哪个地方指针就会在哪里停留

 

 

想要输出追加后的所有内容

//文件写入后想读取文件的所有内容,需要先重置指针
rewind($handle);

$res = fread($handle,filesize($filename));
echo $res;

 

 

想要截断文件,源文件会被修改

//打开文件b
$handle = fopen($filename,'ab+');

//将文件截断成自己需要的部分
ftruncate($handle,9);

 

 

CSV文件操作

将csv里面的数据全部转为数组

//打开文件
$handle = fopen($filename,'rb+');

//读取里面的全部内容,并转为数组
while ($row = fgetcsv($handle)){ //只要$row不等于空就继续循环
    $arr[] = $row;
}
print_r($arr);

 

 

若csv文件里面的分隔符不是 , 的话

//打开文件
$handle = fopen($filename,'rb+');

//读取里面的全部内容,并转为数组
while ($row = fgetcsv($handle,0,'-')){ 
    //第一个参数文件句柄,
    //第二个参数表示读多少行 0表示全读,默认为0
    //第三个参数说明csv里面的分隔符
    $arr[] = $row;
}
print_r($arr);

 

 

将数组写入csv文件

//打开文件
$handle = fopen($filename,'wb+');

$arr =[
    [1,'男',23,'北京','sldkfjl@163.com'],
    [1,'男',23,'北京','sldkfjl@163.com'],
    [1,'男',23,'北京','sldkfjl@163.com'],
    [1,'男',23,'北京','sldkfjl@163.com'],
    [1,'男',23,'北京','sldkfjl@163.com']
];

//写入csv文件
foreach ($arr as $val){
    fputcsv($handle,$val,'-');
    //第一个参数为文件句柄
    //第二个参数为一个一维数组
    //第三个可选参数,表示写入csv文件的分隔符,默认逗号
}

 

 

常用读取文件操作

//读取文件
//$filename = './aa.csv';

//读取视频
//header("content-type:video/mp4");
//$filename = './bbc.mp4';

//读取html
header("content-type:text/html;charset=utf-8");
$filename = 'http://www.baidu.com';

$res = file_get_contents($filename);
echo $res;

 

常用写入文件操作(覆盖原来的)

$filename = 'text.txt';
file_put_contents($filename,'haha,I\'m a text');

 

 

常用写入文件操作(文件最后追加内容)

$filename = 'text.txt';
//获取原来内容
$str = file_get_contents($filename);

//定义新内容
$new_date = $str.'haha,I\'m a new text'."\n";

//进行数据写入
file_put_contents($filename,$new_date);

//显示全部内容
$res = file_get_contents($filename);
echo $res;

//注意:file_put_content函数,若文件不存在会进行创建

 

 

常用写入文件操作(将数组写入文件)

$filename = 'text.txt';
$arr = [
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
];

//先将数组序列化
$date = serialize($arr);
file_put_contents($filename,$date);

 

 

常用写入文件操作(将文件里的序列化数据,转为数组)

$filename = 'text.txt';
//获取文件里面的序列化数据
$date = file_get_contents($filename);

//将序列化数据转为数组
$arr = unserialize($date);
print_r($arr);

 

 

常用写入文件操作(array转json,json转array)

$filename = 'text.txt';
$arr = [
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
    [1,'小明',23,'男','北京'],
];
//将数组转为json字符串,并存入文件
$date = json_encode($arr);
file_put_contents($filename,$date);

/////////////////////////////////////////////

$filename = 'text.txt';
//读取文件里的json数据,并转为数组
$date = file_get_contents($filename);
$arr = json_decode($date);
print_r($arr);

 

 

二、Mysql基础

 

三、PHP操作MySQL

 

 

//连接数据库
$conn = mysqli_connect('host','user','password','new_database','3306');

//判断是否连接成功
if(mysqli_connect_error() != null)
    die('连接失败:'.mysqli_connect_error());
else
    echo '连接成功';

//选择数据库
mysqli_select_db($conn,'other_database');

//设置字符集
mysqli_set_charset($conn,'utf8');

//书写sql语句
$sql = 'SELECT * FROM table';

//执行sql
$result = mysqli_query($conn,$sql);

//解析结果集
//$array = mysqli_fetch_array($result);//解析为索引数组
$array = mysqli_fetch_assoc($result);//解析为关联数组

//关闭连接
mysqli_close($conn);

 

 

解析结果集的方法

逐条解析

//索引数组和关联数组并存
mysqli_fetch_array($result);//默认就是MYSQLI_BOTH
mysqli_fetch_array($result,MYSQLI_BOTH);

//只有索引数组
mysqli_fetch_row($result);
mysqli_fetch_array($result,MYSQLI_NUM);

//只有关联数组
mysqli_fetch_assoc($result);
mysqli_fetch_array($result,MYSQLI_ASSOC);

//解析成对象形式
mysqli_fetch_object($result);

 

 

全部解析

//索引数组和关联数组并存
mysqli_fetch_all($result,MYSQLI_BOTH);

//只有索引数组
mysqli_fetch_all($result);
mysqli_fetch_all($result,MYSQLI_NUM);//默认

//只有关联数组
mysqli_fetch_all($result,MYSQLI_ASSOC);

 

 

功能性函数

//获取到的结果的行
$n = mysqli_num_rows($result);

//获取到结果的列数
$colum = mysqli_num_fields($result);

//还可以查询刚才插入的数据id
$id = mysqli_insert_id($conn);

//执行完sql语句可以查询到影响的行数
$num = mysqli_affected_rows($conn);

//逐条解析时的,循环输出
while($row = mysqli_fetch_assoc($result)){
    print_r($row);
}

 

 

四、会话控制

会话控制的方式

1、COOKIE

2、SESSION

3、其他:

Json Web Tocken:json格式令牌,用于系统间交互

Authorized Tocken:用于系统对用授权

Access Tocken + Secret Tocken:用于对用户进行资源的访问限制

 

COOKIE

作用:cookie可以标记用户、标记客户端、存储简单值

 

工作原理:在http响应时,给客户端设置cookie;在cookie有效期内,每次请求都会携带cookie的值

 

cookie的生命周期:

在http请求中携带cookie

1、只可访问域名相同,路径匹配并在有效期内的cookie

2、通过cookie指令发送具有访问权限的cookie值

3、多个cookie的值用分号; 隔开

cookie失效

1、cookie过期

2、用户手动删除cookie

3、服务器清楚cookie有效性

 

 

SESSION

作用:cookie可以标记用户、标记客户端、存储数据 (其中可以大数据)

 

工作原理:

1、在http响应中设置cookie,并在临时文件中保存session值

2、通过客户端请求中的cookie定位到相应的session文件

3、读取并处理session的内容

 

SESSION的生命周期:

启用并设置cookie:

1、在http响应中设置客户端的唯一cookie

2、将相应的session内容写入临时文件

读取并处理session:

1、客户端在http请求中携带cookie的值

2、服务器通过cookie值定位到session文件

3、读取并处理session内容

SESSION失效 / 清除:

1、cookie过期(关闭浏览器)

2、用户手动删除cookie

3、服务端删除session文件 或 清空session内容

 

 

SESSION的使用

session开启前设置(若需要的话)

//获取 / 设置SESSION NAME 的值
session_name('se_name'); //设置了session_name的值
echo session_name();//获取了session_name的值

//获取 / 设置SESSION ID 的值
session_id('2323');
echo session_id();

//获取 / 设置SESSION文件的保存路径
session_save_path('/');
echo session_save_path();

//设置SESSION中的COOKIE参数
session_set_cookie_params();
//第一个参数:cookie生存时间 int
//第二个参数:cookie的有效路径 string
//第三个参数:有效域名 string
//第四个参数:安全限制,默认false bool
//第五个参数:访问限制,默认false bool

//注意:以上设置需要在session开启之前设置

 

 

开启session并使用

//开启session
session_start();

//设置session的值
$_SESSION['user'] = array(
    'username' => '人',
    'age' => 23
);

//读取session的内容
var_dump($_SESSION['user']);

//清空session数据,session文件还会存在
session_unset();
//删除session文件
session_destroy();

 

 

利用COOKIE实现记住用户登录状态

登录成功后设置cookie保存到本地

setcookie('username',$username,time() + 7 * 24 * 3600);//设置用户名、和cookie有效时间7天

 

网页中检查cookie是否存在 并 合法性。若是检查无误后,设置Session值

session_start();

if(isset($_SESSION['username']) && $_SESSION['username']=='people')
    echo '登录成功';
else if(isset($_COOKIE['username']) && $_COOKIE['username']=='people'){
    $_SESSION['username'] = 'people';
    echo '登录成功';
}
else
    header("Location:login.php");

 

注销登录时,不仅要清楚session,还要清除cookie

session_unset();
setcookie('username','',time()-33);

 

posted @ 2020-12-06 23:34  JaydenQiu  阅读(128)  评论(0)    收藏  举报