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、移动文件封装方法

© 版权声明
文章未经允许请勿转载。
THE END
暂无评论内容