zoukankan      html  css  js  c++  java
  • PHP 面试时常考的文件操作函数

    前两天面试的时候,笔试要求写一些文件操作类函数,什么遍历目录获取文件扩展名之类的,回来后大致总结了一下PHP中一些常见的文件操作函数分享一下。

    1、使用递归删除目录及目录下所有文件的方法。

    function delDir($dir){
    @$dh=opendir($dir); //打开目录流
    while(!!$file=@readdir($dh)){
    if($file!='.' && $file!='..'){
    $fullpath=$dir.'/'.$file;
    if(!is_dir($fullpath)){ //如果是文件直接删除
    unlink($fullpath);
    }else{ //如果是目录 递归调用本身
    delDir($fullpath);
    }
    }
    }
    @closedir($dh); //关闭目录流
    if(@rmdir($dir)){ //删除目录本身
    return true;
    }else{
    return false;
    }
    }

     2、写出一个能创建多级目录的PHP函数

    function createdirlist($path,$mode){
    if (is_dir($path)){
    //判断目录存在否,存在不创建
    echo "目录'" . $path . "'已经存在";
    //已经存在则输入路径
    }else{ //不存在则创建目录
    $re=mkdir($path,$mode,true);
    //第三个参数为true即可以创建多极目录
    if ($re){
    echo "目录创建成功";//目录创建成功
    }else{
    echo "目录创建失败";
    }
    }
    }
    $path="../a/x/cc/cd"; //要创建的目录
    $mode=0755; //创建目录的模式,即权限.
    createdirlist($path,$mode);//测试

    3、写出一个函数统计某个目录下所有文件大小

    function getDirSize($dirname){
    $dirsize = 0;//初始化一个大小为0
    $handle = opendir($dirname);//打开这个目录
    //从目录句柄中循环读取条目,并按照系统中的顺序返回目录中下一个文件的文件名
    while($fliename = readdir($handle)){//readdir函数用于从目录中读取条目
    if($fliename != "." && $fliename != ".."){
    $file = $dirname.'/'.$fliename;
    //判断给定文件名是否是一个目录
    if(is_dir($file)){
    //如果是一个目录,则调用函数getDirSize()
    $dirsize+=getDirSize($file);
    }else{
    //如果不是目录是一个文件,则取得其大小并且累加到变量$diesize
    $dirsize+=filesize($file);//filesize获取文件大小
    }
    }
    }
    closedir($handle);//关闭目录句柄
    return $dirsize;//返回累加的大小
    }
    $dirname = "E:/www";//指定要遍历的目录
    echo $dirname."目录中文件的总大小为:".getDirSize($dirname)."B";

     

    4、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹

    方法一:
    function dir_recurse($dir) {
    $i = 1;
    if($handle = opendir($dir)) {//打开这个目录
    while(false !== ($file = readdir($handle))) {//readdir函数用于从目录中读取条目
    if($file != "." && $file != ".." ) {
    if(is_dir($dir."/".$file) == true) {//判断是否是一个目录
    $fullpath = $dir."/".$file;
    dir_recurse($fullpath);
    echo "$fullpath "."<br>";
    $i++;
    }else {
    $fullpath = $dir."/".$file;
    echo "$fullpath "."<br>";
    $i++;
    }
    }
    }
    closedir($handle);
    }
    }
    $dir = "E:/KuGou";
    dir_recurse($dir);
    方法二:
    function my_scandir($dir)
    {
    $files=array();
    if(is_dir($dir))//判断是否是目录
    {
    if($handle=opendir($dir))//打开目录句柄
    {
    while(($file=readdir($handle))!==false)//从目录句柄中读取条目
    {
    if($file!= "." && $file!="..")
    {
    if(is_dir($dir."/".$file))
    {
    $files[$file]=my_scandir($dir."/".$file);
    }
    else
    {
    $files[]=$dir."/".$file;
    }
    }
    }
    closedir($handle);
    return $files;
    }
    }
    }
    $dir = "E:/KuGou";
    echo "<pre>";
    print_r(my_scandir($dir));

    5、使用五种以上方式获取一个文件的扩展名

    要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
    必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数

    第一种:
    function get_ext1($file_name){
    return strrchr($file_name, '.');
    }
    第二种:
    function get_ext2($file_name){
    return substr($file_name, strrpos($file_name, '.'));
    }
    第三种:
    function get_ext3($file_name){
    $p=explode('.', $file_name);
    return array_pop($p);
    }
    第四种:
    function get_ext4($file_name){
    $p = pathinfo($file_name);
    return $p['extension'];
    }
    第五种:
    function get_ext5($file_name){
    return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));
    }
    第六种:
    function get_text6($file_name){
    return end(explode('.',$file_name));
    }

    一般面试常考的也就是这些了,欢迎补充。

  • 相关阅读:
    dotweb框架之旅 [三]
    dotweb框架之旅 [二]
    dotweb框架之旅 [一]
    对 dotweb 框架进行统一的自定义错误处理
    go服务端----使用dotweb框架搭建简易服务
    Nginx日志文件切割
    linux安装PHP-memcache-redis扩展
    图与最短路径
    素数(质数)的一个用法
    一个手机号码剔重的问题
  • 原文地址:https://www.cnblogs.com/luokakale/p/7242866.html
Copyright © 2011-2022 走看看