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\n"."<br>";
$i++;
}else {
$fullpath = $dir."/".$file;
echo "$fullpath\n"."<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));
}
一般面试常考的也就是这些了,欢迎补充。
PHP 面试时常考的文件操作函数的更多相关文章
- Delphi文件操作函数
文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道.文件的本质是一个数据流,所有的文件实际上是一串二进制序列.文件管理包括:1.文件操作.2.目录操作.3.驱动器操作.三部分. 1.常见文 ...
- PHP常用的文件操作函数集锦
以下是个人总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来. 一 .解析路径: 1 获得文件名:basename();给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件 ...
- C语言样式的文件操作函数
使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...
- Unix无缓冲文件操作函数、文件信息查询
问题描述: Unix无缓冲文件操作函数.文件信息查询 问题解决: struct stat 结构体信息: 具体代码: 具体源文件:
- C语言文件操作函数
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...
- 总结文件操作函数-文件夹(三)-C语言
获取.改变当前文件夹: 原型为: #include <unistd.h> //头文件 char *getcwd(char *buf, size_t size); //获取当前文件夹.相 ...
- 【阅读笔记】《C程序员 从校园到职场》第六章 常用文件操作函数 (Part 1)
参考链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/24926023 让你提前认识软件开发(18):C语言中常用的文件操作函数总结 ...
- Linux C 文件操作函数(~上善止水~)
翻翻笔记,整理一下 C 语言中的文件操作函数 ~~~~~~,多注意细节,maybe 细节决定成败~ 1. fopen /* fopen(打开文件) * * 相关函数 open,fclose * * 表 ...
- 文件操作(FILE)与常用文件操作函数
文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...
随机推荐
- 老的工程移植到AndroidStudio需要修改的注意事项
之前老的工程用android-apt编译,如果要在新的AndroidStudio编译至少需要修改一下几部分: 1. 修改project里的build.gradle dependencies { cla ...
- Crazy Calendar (阶梯博弈变形)
2011 was a crazy year. Many people all over the world proposed on 11-11-11, married on 11-11-11, som ...
- Red and Black
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...
- HTML5 input事件检测输入框变化[转载]
原文:http://www.linuxidc.com/Linux/2015-07/119984.htm 之前一直用change事件来监听输入框内容是否发生变化,只有当输入框失去焦点时才会触发,没想到h ...
- Rem与Px的转换[转载]
原文:http://www.w3cplus.com/preprocessor/sass-px-to-rem-with-mixin-and-function.html rem是CSS3中新增加的一个单位 ...
- 机器翻译评测——BLEU改进后的NIST算法
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...
- express的学习,与使用
最近在学习vue的一个实战项目,碰到一个express,当时很萌,就随便看了看................ expres是基于node 的一个web框架, 首先可以找到它的官网照着学习 这里只讲一 ...
- C#配合利用XML文件构建反射表机制
在设计程序时,无论是界面或是后台代码,我们通常都想留给用户一个较为简单的接口.而我在参与封装语音卡开发函数包的时候,发现各种语音卡的底层函数的接口都是各种整形变量标记值,使用起来极为不变.于是就理解了 ...
- 比特币区块结构Merkle树及简单支付验证分析
在比特币网络中,不是每个节点都有能力储存完整的区块链数据,受限于存储空间的的限制,很多节点是以SPV(Simplified Payment Verification简单支付验证)钱包接入比特币网络,通 ...
- [转载] java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
转载自http://janeky.iteye.com/blog/770441 ------------------------------------------------------------- ...