1 获得文件信息
1.1 第一种方式
<?php $file_path = './test.txt'; $handle = fopen($file_path, 'r'); // 打开文件或者 URL $file_info_arr = fstat($handle); // 通过已打开的文件指针取得文件信息,返回一个数组 echo '文件的大小为:' . $file_info_arr['size'] . '<br>'; echo '文件的创建时间为:' . date('Y-m-d H:i:s', $file_info_arr['ctime']) . '<br>'; echo '文件的访问时间为:' . date('Y-m-d H:i:s', $file_info_arr['atime']) . '<br>'; echo '文件的修改时间为:' . date('Y-m-d H:i:s', $file_info_arr['mtime']) . '<br>';
1.2 第二种方式
<?php $file_path = './test.txt'; if(file_exists($file_path)){ echo '文件的大小为:' . filesize($file_path) . '<br>'; echo '文件的类型为:' . filetype($file_path) . '<br>'; echo '文件的创建时间为:' . date('Y-m-d H:i:s', filectime($file_path)) . '<br>'; echo '文件的访问时间为:' . date('Y-m-d H:i:s', fileatime($file_path)) . '<br>'; echo '文件的修改时间为:' . date('Y-m-d H:i:s', filemtime($file_path)) . '<br>'; }else{ echo '文件不存在或文件路径有误'; }
2 读取文件的四种方式
2.1 第一种方式
<?php $file_path = './test.txt'; // 一次性读取文件所有内容 if(file_exists($file_path)){ $handle = fopen($file_path, 'r'); $file_size = filesize($file_path); if($file_size != 0){ $file_content = fread($handle, $file_size); // 读取文件 echo $file_content; }else{ echo '对不起,文件的大小为0,没有内容'; } fclose($handle); }else{ echo '文件不存在或文件的信息有误'; }
2.2 第二种方式
<?php $file_path = './test.txt'; if(file_exists($file_path)){ $handle = fopen($file_path, 'r'); $file_size = filesize($file_path); $buffer = 512; // 设置缓冲大小 $file_content = ''; while(!feof($handle)){ $file_content .= fread($handle, $buffer); } echo $file_content; fclose($handle); }else{ echo '文件不存在或路径有误'; }
2.3 第三种方式
$file_path = './test.txt'; if(file_exists($file_path)){ $file_content = file_get_contents($file_path); echo $file_content; }else{ echo '文件不存在,或路径有误'; }
2.4 第四种方式
<?php $file_path = 'test.ini'; if(file_exists($file_path)){ $file_content_arr = parse_ini_file($file_path); var_dump($file_content_arr); }else{ echo '文件不存在或文件路径有误'; }
3 写入内容
3.1 第一种方式fwrite()
<?php $file_path = 'test.txt'; $handle = fopen($file_path, 'a+'); fwrite($handle, 'ABC! ENGLISH'); fclose($handle); echo '写入成功';
3.2 第二种方式file_put_contents()
<?php $file_path = 'message.txt'; $result = file_put_contents($file_path, '哥们儿,手头紧吗?', FILE_APPEND); // 第三个参数默认是覆盖写,FILE_APPEND是追加写
4 重命名文件
<?php $file_path = 'message.txt'; $new_file_path = '留言板.txt'; $new_file_path = iconv('utf-8', 'gbk', $new_file_path); if(file_exists($file_path)){ if(rename($file_path, $new_file_path)){ echo '文件重命名成功!'; }else{ echo '文件重命名失败!'; } }else{ echo '文件不存在!'; }
5 拷贝文件
<?php $file_path = 'message.txt'; if(file_exists($file_path)){ $new_file_path = 'D:/www/留言板.txt'; $new_file_path = iconv('utf-8', 'gbk', $new_file_path); if(copy($file_path, $new_file_path)){ echo '拷贝成功'; }else{ echo '拷贝失败'; } }else{ echo '文件不存在'; }
6 删除文件
<?php $file_path = 'message.txt'; if(file_exists($file_path)){ if(unlink($file_path)){ // 删除文件 echo '删除成功!'; }else{ echo '删除失败!'; } }else{ echo '文件不存在'; }
7 创建目录
<?php $dir = 'D:/test'; if(!is_dir($dir)){ if(mkdir($dir)){ echo '创建目录成功'; }else{ echo '创建目录失败'; } }else{ echo '目录已经存在,无需创建!'; }
如果我们要创建子目录的话,需要借助mkdir的后面的两个参数
<?php $date = date('Ymd'); $dir = 'D:/test/demo' . $date; if(!is_dir($dir)){ if(mkdir($dir, 0777, true)){ echo '目录创建成功!'; }else{ echo '目录创建失败!'; } }else{ echo '目录已经存在,无需创建!'; }
8 删除目录
<?php $date = date('Ymd'); $dir = 'D:/test/demo/' . $date; if(is_dir($dir)){ if(rmdir($dir)){ echo '删除目录成功!'; }else{ echo '删除目录失败!'; } }else{ echo '不是一个目录或目录不存在,无法删除'; }
9 遍历目录
<?php $dir = 'D:/test'; if(is_dir($dir)){ $dir_handle = opendir($dir); // 打开目录句柄 while($file = readdir($dir_handle)){ // 从目录句柄中读取条目, 成功则返回文件名 或者在失败时返回 FALSE echo $file . '<br>'; } closedir($dir_handle); // 关闭目录句柄 }else{ echo '不是目录'; }
10 自定义一个函数,实现parse_ini_file()函数功能
代码如下:
<?php function my_parse_ini_file($file_path){ // 判断文件是否存在 if(file_exists($file_path)){ $file_handle = fopen($file_path, 'r'); while($line = fgets($file_handle)){ $line = str_replace('', '', $line); $line = str_replace(" ", '', $line); $arr = explode('=', $line); $result[$arr[0]] = $arr[1]; } return $result; }else{ echo '文件不存在,或文件的路径有误'; } } $result = my_parse_ini_file('test.ini'); echo '<pre>'; var_dump($result);
结果如下:
array(2) { ["load"]=> string(7) "loading" ["li"]=> string(5) "zhang" }
11 编写一个程序,具体要求如下图:
<?php $year = date('Y'); $month = date('md'); $full_dir = 'D:/' . $year . '/' . $month; if(!is_dir($full_dir)){ mkdir($full_dir, 0777, true); } $file_path = $full_dir . '/abc.txt'; $file_handle = fopen($file_path, 'w+'); $content = ''; for($i=0; $i<100; $i++){ $content .= 'helloworld' . " "; } fwrite($file_handle, $content); fclose($file_handle); echo '完成操作';
12 遍历某个文件夹下的所有的文件和目录(使用递归)
<?php $dir = 'D:/2018'; function bianLi($dir){ if(is_dir($dir)){ $dir_handle = opendir($dir); while($file = readdir($dir_handle)){ if($file == '.' || $file == '..'){ continue; } if(is_dir($dir . '/' . $file)){ bianLi($dir . '/' . $file); } echo $file . '------------' . filetype($dir . '/' . $file) . '<br>'; } }else{ echo '不是一个目录,无法遍历'; exit(); } } bianLi($dir);
13 统计某个目录所有文件的大小(使用递归)
<?php $dir = 'D:/2018'; function getDirSize($dir){ if(is_dir($dir)){ $dir_handle = opendir($dir); static $size = 0; while(false !== ($file=readdir($dir_handle))){ if($file == '.' || $file == '..'){ continue; } if(!is_dir($dir . '/' . $file)){ $size += filesize($dir . '/' . $file); }else{ getDirSize($dir . '/' . $file); } } }else{ $size = filesize($dir); } return $size; } $size = getDirSize($dir); echo $size;
14 删除某个目录(使用递归)
<?php $dir = 'D:/2018'; function removeDir($dir){ if(is_dir($dir)){ $dir_handle = opendir($dir); // 打开目录句柄 while(false !== ($file=readdir($dir_handle))){ // 从目录句柄中读取条目 if($file == '.' || $file == '..'){ continue; } if(is_dir($dir . '/' . $file)){ removeDir($dir . '/' . $file); }else{ unlink($dir . '/' . $file); // 删除文件 } } closedir($dir_handle); // 关闭目录句柄 rmdir($dir . '/' . $file); // 删除目录 }else{ unlink($dir); // 删除文件 } } removeDir($dir); echo '删除成功!';