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);

浙公网安备 33010602011771号