PHP操作目录或文件常见方法

1、转化 \ 为 /

/**
* 转化 \ 为 /
* 
* @param   string $path  路径
* @return  string 路径
*/
function dir_path($path) {
   $path = str_replace('\\', '/', $path);
   if(substr($path, -1) != '/') $path = $path.'/';
   return $path;
}

2、创建目录

/**
* 创建目录
* 
* @param   string $path  路径
* @param   string $mode  属性
* @return  string 如果已经存在则返回true,否则为flase
*/
function dir_create($path, $mode = 0777) {
   if(is_dir($path)) return TRUE;
   $ftp_enable = 0;
   $path = dir_path($path);
   $temp = explode('/', $path);
   $cur_dir = '';
   $max = count($temp) - 1;
   for($i=0; $i<$max; $i++) {
      $cur_dir .= $temp[$i].'/';
      if (@is_dir($cur_dir)) continue;
      @mkdir($cur_dir, 0777,true);
      @chmod($cur_dir, 0777);
   }
   return is_dir($path);
}
/**
 * 递归创建文件夹
 *
 * @param     $path
 * @param int $mode 文件夹权限
 *
 * @return bool
 */
if ( ! function_exists('mk_dirs')) {
    function mk_dirs($path, int $mode = 0777): bool
    {
        if ( ! is_dir(dirname($path))) {
            mk_dirs(dirname($path));
        }

        if ( ! file_exists($path)) {
            return mkdir($path, $mode);
        }

        return true;
    }
}

3、拷贝目录及下面所有文件

4、转换目录下面的所有文件编码格式

/**
* 转换目录下面的所有文件编码格式
* 
* @param   string $in_charset       原字符集
* @param   string $out_charset   目标字符集
* @param   string $dir         目录地址
* @param   string $fileexts     转换的文件格式
* @return  string 如果原字符集和目标字符集相同则返回false,否则为true
*/
function dir_iconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml') {
   if($in_charset == $out_charset) return false;
   $list = dir_list($dir);
   foreach($list as $v) {
      if (pathinfo($v, PATHINFO_EXTENSION) == $fileexts && is_file($v)){
         file_put_contents($v, iconv($in_charset, $out_charset, file_get_contents($v)));
      }
   }
   return true;
}

5、列出目录下所有文件

6、设置目录下面的所有文件的访问和修改时间

/**
* 设置目录下面的所有文件的访问和修改时间
* 
* @param   string $path     路径
* @param   int       $mtime    修改时间
* @param   int       $atime    访问时间
* @return  array  不是目录时返回false,否则返回 true
*/
function dir_touch($path, $mtime = TIME, $atime = TIME) {
   if (!is_dir($path)) return false;
   $path = dir_path($path);
   if (!is_dir($path)) touch($path, $mtime, $atime);
   $files = glob($path.'*');
   foreach($files as $v) {
      is_dir($v) ? dir_touch($v, $mtime, $atime) : touch($v, $mtime, $atime);
   }
   return true;
}

7、目录列表

/**
* 目录列表
* 
* @param   string $dir      路径
* @param   int       $parentid  父id
* @param   array  $dirs     传入的目录
* @return  array  返回目录列表
*/
function dir_tree($dir, $parentid = 0, $dirs = array()) {
   global $id;
   if ($parentid == 0) $id = 0;
   $list = glob($dir.'*');
   foreach($list as $v) {
      if (is_dir($v)) {
            $id++;
         $dirs[$id] = array('id'=>$id,'parentid'=>$parentid, 'name'=>basename($v), 'dir'=>$v.'/');
         $dirs = dir_tree($v.'/', $id, $dirs);
      }
   }
   return $dirs;
}

8、删除目录及目录下面的所有文件

9、取得文件扩展名

/**
 * 取得文件扩展
 *
 * @param $filename 文件名
 * @return 扩展名
 */
function fileext($filename) {
   return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
}
/**
 * 获取文件扩展名
 * @param string $filename 文件名
 * @return string 文件扩展名
 */
function cmf_get_file_extension($filename)
{
    $pathinfo = pathinfo($filename);
    return strtolower($pathinfo['extension']);
}

10、查询字符是否存在于某字符串

/**
 * 查询字符是否存在于某字符串
 *
 * @param $haystack 字符串
 * @param $needle 要查找的字符
 * @return bool
 */
function str_exists($haystack, $needle)
{
   return !(strpos($haystack, $needle) === FALSE);
}

11、获取文件目录列表

//获取文件目录列表,该方法返回数组
function getDir($dir) {
    $dirArray[]=NULL;
    if (false != ($handle = opendir ( $dir ))) {
        $i=0;
        while ( false !== ($file = readdir ( $handle )) ) {
            //去掉"“.”、“..”以及带“.xxx”后缀的文件
            if ($file != "." && $file != ".."&&!strpos($file,".")) {
                $dirArray[$i]=$file;
                $i++;
            }
        }
        //关闭句柄
        closedir ( $handle );
    }
    return $dirArray;
} 

12、删除一个路径下的所有文件夹和文件的方法

function deldir($path){
   //如果是目录则继续
   if(is_dir($path)){
    //扫描一个文件夹内的所有文件夹和文件并返回数组
   $p = scandir($path);
   foreach($p as $val){
    //排除目录中的.和..
    if($val !="." && $val !=".."){
     //如果是目录则递归子目录,继续操作
     if(is_dir($path.$val)){
      //子目录中操作删除文件夹和文件
      deldir($path.$val.'/');
      //目录清空后删除空文件夹
      @rmdir($path.$val.'/');
     }else{
      //如果是文件直接删除
      unlink($path.$val);
     }
    }
   }
  }
  }

13、文件下载

14、写入文件日志

/**
 * 记录日志
 *
 * @param $err_arr 日志信息
 * @param $path    日志路径
 *
 * @return bool
 */
function write_error_log($err_arr, $path = '', $file_fix = 'log_')
{
    if (is_array($err_arr)) {
        $message2 = json_encode($err_arr, JSON_UNESCAPED_UNICODE).PHP_EOL;
    } else {
        if (is_string($err_arr)) {
            $message2 = $err_arr.PHP_EOL;
        } else {
            return;
        }
    }
    $dateTime = date('Y-m-d H:i:s');

    $w_msg = '';
    $w_msg .= "【".$dateTime."】".PHP_EOL;
    $w_msg .= $message2;
    $w_msg .= '============================'.PHP_EOL.PHP_EOL;

    $dirPath = dirname(dirname(__FILE__).DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
    $path    = $dirPath."public".DIRECTORY_SEPARATOR."log".DIRECTORY_SEPARATOR.$path;
    if ( ! is_dir($path)) {
        @mkdir($path, 0777, true);
    }
    $dateTime2 = date('Ymd');
    $file      = $path.DIRECTORY_SEPARATOR.$file_fix.$dateTime2.'.txt';
    error_log($w_msg, 3, $file);
}
/**
 * 文件日志
 * @param        $content 要写入的内容
 * @param string $file    日志文件,在web 入口目录
 */
function cmf_log($content, $file = "log.txt")
{
    file_put_contents($file, $content, FILE_APPEND);
}

15、移动文件封装方法

PHP操作目录或文件常见方法
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    blank

    暂无评论内容