PHP学习系列之文件处理和操作系统

class Demo3Action extends Action {
	public function test(){
	/*
	 * ==========================处理文件和操作系统==============================
	 *一、文件和目录:
	 *1.获取路径的文件名(是否带后缀):
	 *string basename(string path[,string suffix]);
	 */
	 $path = "public/js/base.js";
	 echo "文件名:".basename($path);//base.js
	 echo "<br>";
	 echo "文件名称:".basename($path,".js");//base
	 /*
	  * 2.获取路径的目录:
	  * string dirname(string path);
	  */
	 echo "<br>";
	 echo "路径名称:".dirname($path);//public/js
	 /*
	  * 3.获取更多关于路径的信息
	  * array pathinfo(string path);
	  */
	 dump(pathinfo($path));
	 /*result:
	  * array
	  * 'dirname' => string 'public/js' (length=9)
	  * 'basename' => string 'base.js' (length=7)
	  * 'extension' => string 'js' (length=2)
	  * 'filename' => string 'base' (length=4)
	  */
	 /*
	  * 4.获取绝对路径
	  * string realpath(string path);
	  */
	 echo "<br>";
	 echo realpath($path);//G:\wamp\www\myFirstProj\public\js\base.js
	 /*
	  *二、计算文件、目录和磁盘大小
	  *1.确定文件的大小
	  *int filesize(string filename);
	  */
	 $filename="public/js/base.js";
	 echo "<br>";
	 echo "base.js大小:".round(filesize($filename)/1024,2)."KB";//3.22KB
	 /*
	  *2.计算磁盘的可用空间
	  *float disk_free_space(string directory);
	  *返回指定的目录所在磁盘分区的可用空间(目录应为该磁盘的第一级目录)
	  */
	 echo "<br>";
	 echo "可用空间大小".round(disk_free_space("/wamp")/1024/1024/1024,2)."GB";//25.66GB
	 /*
	  * 3.计算磁盘的总容量
	  * float disk_total_space(string directory);
	  * 返回指定的目录所在磁盘分区的总容量
	  */
	 echo "<br>";
	 echo "总容量".round(disk_total_space("/wamp")/1024/1024/1024,2)."GB";//41.9GB
	 /*
	  *4.获取目录大小
	  *一般用递归实现
	  */
	 echo "<br>";
	 //echo "目录总大小:".round($this->getDirSize("/wamp")/1024/1024,2)."MB";//386.91MB
	 /*
	  *三、确定访问和修改时间
	  *1.确定文件的最后访问时间
	  *int fileatime(string filename);
	  */
	 echo "<br>";
	 echo "最后访问时间:".date("Y-m-d H:i:s a",fileatime("/wamp/www/UIBMSPHPProj/public/js/base.js"));//2013-04-24 23:09:48 pm
	 echo "<br>";
	 /*
	  * 2.确定文件的最后改变时间
	  * 最后改变时间和最后修改时间的区别:
	  * 最后改变时间:改变权限、所有者、组或其他inode信息的改变
	  * 最后修改时间:文件内容的修改
	  * int filectime(string filename);
	  */
	 echo "最后改变时间:".date("Y-m-d H:i:s a",filectime("/wamp/www/UIBMSPHPProj/public/js/base.js"));//2013-04-24 22:37:01 pm
	 echo "<br>";
	 /*
	  *3.确定文件的最后修改时间
	  *int filemtime(string filename);
	  *
	  */
	 echo "最后修改时间:".date("Y-m-d H:i:s a",filemtime("/wamp/www/UIBMSPHPProj/public/js/base.js"));//2013-04-24 23:09:48 pm
	 echo "<br>";
	 /*
	  *四、文件处理
	  *1.换行
	  *windows 上是\r\n,lunix 上是\n
	  *2.识别文件末尾字符
	  *int feof(string resource)
	  *确定对否到达文件末尾,I/O操作中常用
	  */
	$pathinfo="G:/wamp/www/myFirstProj/public/js/base.js";
/* 	if(file_exists($pathinfo)){
		$fh=fopen($pathinfo, "rt");
		while(!feof($fh)){
	 		//打印出base.js的每一行
	 		//echo fgets($fh)."<br>";
		}
		fclose($fh);
	} */
	/*
	 *3.打开和关闭文件
	 *resource fopen(string resource,string mode[,int use_include_path[,resource zcontext]]);
	 *fopen将文件绑定到一个句柄,绑定之后,脚本就可以通过句柄与文件交互。
	 *boolean fclose(string filehandle);
	 *具体实例如2
	 */

	/*
	 *4.读取文件
	 *a)将文件读入数组
	 *  array file(string filename[,int use_include_path[,resource context]]);
	 *  该函数把一个文件写入数组中,各元素由换行符分隔,同时换行符扔附加在每个元素的末尾
	 *
	 */
	$pathinfo="G:/wamp/www/myFirstProj/aa.txt";
	$str=file($pathinfo);
	dump($str);
	/*
	array
	  0 => string 'dd
	' (length=4)
	  1 => string 'ee
	' (length=4)
	  2 => string '2
	' (length=3)
	  3 => string '3' (length=1)
	 */
	echo strlen($str[2]);//此处输出长度为3,因为window下换行符的\r\n
	/*
	 * b)将文件内容读入到字符串变量
	 *   string file_get_contents(string filename[,int use_include_path[,resource context]]);
	 *
	 */
	$pathinfo="G:/wamp/www/myFirstProj/aa.txt";
	$str=file_get_contents($pathinfo);
	dump(json_decode($str,true));//true返回数组,false 返回对象
	/*
	 * result:
	 array
	  'aa' => string '11' (length=2)
	  'bb' => string '22' (length=2)
	  'cc' => string 'mycoffe' (length=7)
	 */
	/*
	 *c)将csv文件读入数组
	 *  array fgetcsv(resource handle[int length[,string delimiter[,string enclosure]]]);
	 *  遇到换行时读取不会停止,会在读取了length个字符后停止,
	 *  实例:从文本文件中读取出来是出现乱码?
	 *  答:iconv函数转码
	 */
	$dh=fopen("G:/wamp/www/myFirstProj/bb.csv","r");
	while(($data=fgetcsv($dh,1000,","))!== false){
		list($name,$sex,$age)=$data;
		$name=iconv('gbk','utf-8',var_export($name,true));
		$sex=iconv('gbk','utf-8',var_export($sex,true));
		echo "姓名:".$name.",性别:".$sex.",年龄:".$age."<br>";
	}
	/*
	 * 持续中....................
	 */
	}

	/*
	 * 计算目录大小
	 */
	private function getDirSize($dirname){
		$dirsize = 0;
		if($dh=@opendir($dirname)){
			while(($file=readdir($dh))){
				if($file!= "." && $file!== ".."){
					$line=$dirname."/".$file;
					if(is_file($line)){
						$dirsize+= filesize($line);
					}
					if(is_dir($line)){
						$dirsize+=$this->getDirSize($line);
					}
				}
			}
		}
		@closedir($dh);
		return $dirsize;
	}


}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值