php学习第十章文件目录操作

一、判断普通文件和目录
1.is_file()//判断给定文件名是否为一个正常的文件
2.is_dir()//判断给定文件名是否是一个目录
二、文件的属性
1.file_exists()//检查文件或目录是否存在
2.filesize()//取得普通文件大小 注意是普通文件的大小不是目录
3.is_readable()//判断给定文件名是否可读
4.is_writable()//判断给定的文件名是否可写
5.filectime()//获取文件的创建时间
在这里插入图片描述
6.filemtime()//获取文件的修改时间
7.fileatime()//取得文件的上次访问时间
8.stat()//获取文件大部分属性值
三、目录的基本操作
1.basename()//返回路径中的文件名部分
在这里插入图片描述
2.dirname()//返回路径中的目录部分
在这里插入图片描述
3.pathinfo()//返回文件路径的信息
在这里插入图片描述
4.opendir()//打开目录句柄
5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名

在这里插入图片描述在这里插入图片描述6.rewinddir()//倒回目录句柄 相当于回到最初那个状态
在这里插入图片描述在这里插入图片描述
7.closedir()//关闭目录句柄
在这里插入图片描述
8.mkdir()//新建目录
在这里插入图片描述
9.rmdir()//删除指定的空目录
10.scandir()//列出指定路径中的文件和目录

四、文件的基本操作
1.fopen()//打开文件或者 URL

‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘x’ 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
‘x+’ 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

在这里插入图片描述<?php header('Content-type:text/html;charset=utf-8'); $file=fopen('test.txt','r'); var_dump(fread($file,3));//中文在utf-8里占了3个字节

2.fread()//读取文件

3.fgets()//从文件指针中读取一行
4.feof()//测试文件指针是否到了文件结束的位置

<?php 
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','r');//返回资源句柄
var_dump(fgets($file));  //一次读一行
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(feof($file));
var_dump(fgets($file));
var_dump(feof($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(feof($file));//4.feof()//测试文件指针是否到了文件结束的位置   想到与输出孙胜利有没有到最后一个,到最后一个为true
?>

5.fwrite()//写入文件
在这里插入图片描述在这里插入图片描述
6.rewind()//倒回文件指针的位置

7.flock()//轻便的咨询文件锁定

要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
◾ 要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
◾ 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
◾ 如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。

<?php 
	//写入test.txt文件
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','a+'); //a+将文件指针指向文件末尾k
if(flock($file,LOCK_EX)){  //判断加锁是否成功  //独占锁   先读它  和另一个页面一起,会先等它执行完,下个页面也能执行 这个是相当于排队
	sleep(10); //延时几秒执行  ,等待10秒
	var_dump(fwrite($file,'我是2.php文件写的!'));
	flock($file,LOCK_UN);//解锁
}else{
	echo '文件加锁失败!';
}

?>
<?php 
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','a+');
if(flock($file,LOCK_EX+LOCK_NB)){//不希望在加锁的时候发生堵塞       //直接文件加锁失败
	var_dump(fwrite($file,'我是3.php文件写的!'));
	flock($file,LOCK_UN);
}else{
	echo '文件加锁失败!';
}
fclose($file);//关闭文件句柄
?>

8.ftruncate()//将文件截断到给定的长度
9.fclose()//关闭一个已打开的文件指针
10.file() //把整个文件读入一个数组中
11.copy()//拷贝文件
12.unlink()//删除文件

13.file_get_contents()//将整个文件读入一个字符串
14.file_put_contents()//将字符串写入文件中

<?php 
header('Content-type:text/html;charset=utf-8');
//var_dump(file_get_contents('http://baidu.com'));
file_put_contents('test.txt',file_get_contents('http://sifangku.com'));
?>

15.rename()//重命名一个文件或目录
16.readfile()//读入一个文件并写入到输出缓冲

五、文件的上传
文件的上传的过程这些细节我们是不需要管的,都是自动的,上传的文件默认是放在一个临时的目录里面的,我们要做的就是把这些临时目录
里面的文件移动到我们需要的地方就OK啦!

五、文件的上传
1.html标签需要做的上传设置
1) form标签属性设置
1>method设置为post
2>enctype设置为multipart/form-data
3>form表单中设置隐藏类型的input,其中name值设置为MAX_FILE_SIZE,VALUE值设置为需要限制的上传文件的大小(单位为字节)
2.在服务器端通过PHP处理上传文件,涉及到下面的几条信息
1)与上传有关的 php配置选项(php.ini)
配置项 可能值 功能描述
file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传
memory_limit 8M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_filesize 2M 限制PHP处理上传文件的最大值,此值必须小于post_max_size值
post_max_size 8M 限制通过POST方法可以接受的信息最大量
upload_tmp_dir F:/wamp/tmp 上传文件存放的临时路径,可以是一个绝对路径。这个目录对于拥有此服务器进程用户必须是可写的。
2)$_FILES多维数组:用于存储各种与上传有关的信息
$_FILES[‘file’][‘name’] 客户端机器文件的原名称,包含扩展名
$_FILES[‘file’][‘size’] 已上传文件的大小,单位为字节
$_FILES[‘file’][‘tmp_name’] 文件上传之后,在服务器端存储的临时文件名
$_FILES[‘file’][‘error’] 文件上传时产生的错误
0:表示没有发生任何错误,文件上传成功
1:表示上传文件的大小超出了再PHP配置文件中upload_max_filesize选项限制的值
2:表示上传文件大小超出了HTML表单中MAX_FILE_SIZE选项所指定的值
3:表示文件只被部分上传
4:表示没有上传任何文件
$_FILES[‘file’][‘type’] 获取客户端上传文件的MIME类型,MIME类型规定了各种文件格式的类型。每种MIME类型都是由/分隔的主类型和子类型组成
3)PHP的文件上传处理函数:用于上传文件的后续处理
1>is_uploaded_file()判断指定的文件是否通过HTTP POST上传的
2>move_uploaded_file()文件上传后,首先会存储于服务器的临时目录中,可以使用该函数将上传的文件移动到新位置

<?php
header('Content-type:text/html;charset=utf-8');
if(isset($_POST['submit'])){    //判断是否有这个变量     判断是否点了这个  看html代码里  post信息里会有的
	if(is_uploaded_file($_FILES['myfile']['tmp_name'])){//is_uploaded_file()判断指定的文件是否通过HTTP POST上传的
//myfile 是name的值,tmp_name 路径传过去判断是否通过         判断一下是比较安全的



          //9-19是移动临时文件  在移动的时候把扩展名获取到  还有设置一个新的文件名,不然文件名都是一样的,会被替换掉
		$arr=pathinfo($_FILES['myfile']['name']);        //获取扩张名
		$newName=date('YmdGis').rand(1000,9999);//获取当天时间就会不冲突了,后面是随机数

		//move_uploaded_file移动的地方                             $_FILES['myfile']['tmp_name']把临时的文件移动到新的地方                 //移到uploads文件下   后面是扩张名
		//uploads/a          不能全叫a  为了不把上传上来的文件把上一次上传进来的文件替换掉,那我们就要不一样   获取当天时间uploads/'.$newName 也可以这样
		if(move_uploaded_file($_FILES['myfile']['tmp_name'],"uploads/{$newName}.{$arr['extension']}")){//之所以要.{$arr['extension']  是因为扩展名前面有.
			echo '恭喜你!上传成功!';
		}else{
			echo '对不起移动文件失败!';
		}
		
		
		
	}else{
		exit('可能有攻击,请你做合法的事情!');
	}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>上传页面</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
	<input type="file" name="myfile" />
	<input type="submit" name="submit" value="开始上传" />
</form>
</body>
</html>

六、文件的下载
获取文件的MIME类型
http://localhost/demo10_4/index.php
就相当于
localhost/demo10_4/a.rar

1)发送指定的文件MIME类型的头信息
header(‘Content-type:MIME类型’);
2)指定下载文件的描述
header(‘Content-Disposition:attachement;filename=文件名称’);
3)指定下载文件的大小
header(‘Content-Length:文件大小’);
4)读取文件内容至输出缓冲区
readfile();

<?php
	
	//通过php文件来模仿另外一个文件
	
	
	//提示判断是否开启扩张
if(!function_exists('finfo_open')){
	header('Content-type:text/html;charset=utf-8');
	exit('请先开启PHP扩展:fileinfo!');
}

//扩张要  安装
	//并不希望用户看到放的这个文件的路径,通过php文件访问a.rar文件,
$file='a.rar';
$fileinfo=finfo_open(FILEINFO_MIME_TYPE);//开始的时候传进一个标识符这样一个预定义常量进去常量,来表示它做什么事情,这里表示我要一个资源句柄,我要用它来返回一个MIME类型
$mimeType=finfo_file($fileinfo,$file);//现在保存起来就可以
finfo_close($fileinfo);//释放资源
//发送指定的文件MIME类型的头信息
header('Content-type:'.$mimeType);//返回这样的一个类型的文件
//指定下载文件的描述
header('Content-Disposition:attachment;filename='.basename($file));//.basename获取文件的名字
//指定文件的大小
header('Content-Length:'.filesize($file)); //filesize获取文件的大小
//读取文件内容至输出缓冲区,返回这个文件               也就是发送给用户
readfile($file);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值