开发者社区> 乌云上> 正文

PHP学习7——文件系统

简介: 主要内容: 打开和关闭文件 文件类型 文件处理 目录处理 访问远程文件 文件锁定 文件上传   数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接。 打开和关闭文件 打开fopen($filepath,$mode) 关闭fclose($file) 注意,我的test.
+关注继续查看

主要内容:

  1. 打开和关闭文件
  2. 文件类型
  3. 文件处理
  4. 目录处理
  5. 访问远程文件
  6. 文件锁定
  7. 文件上传

 

数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接。

打开和关闭文件

  • 打开fopen($filepath,$mode)
  • 关闭fclose($file)

注意,我的test.txt文件和demo.php在同一个目录下

 

demo.php

<?php
	//打开文件r只读,r+读写,打开成功返回true,否则false
	$file=fopen("C:/xampp/htdocs/test.txt","r");//绝对路径
	if($file){
		echo "文件test.txt打开了<br/>";
	}else{
		echo "文件test.txt打开失败文件打开了<br/>";
	}
	
	$file2=fopen("./test.txt","r");//相对路径
	if($file2){
		echo "文件test.txt打开了<br/>";
	}else{
		echo "文件test.txt打开失败<br/>";
	}
	
	if(fclose($file)){
		echo "文件test.txt成功关闭<br/>";
	}
	if(fclose($file2)){
		echo "文件test.txt成功关闭<br/>";
	}
?>

  输出

文件test.txt打开了
文件test.txt打开了
文件test.txt成功关闭
文件test.txt成功关闭

文件类型

无论是txt文件还是jpg文件,还是doc文件,都属于同一种文件类型,file

文件夹是另外一种文件类型,dir

文件类型:

  1. file普通文件
  2. dir目录类型
  3. char字符串设备,键盘,打印机
  4. block块设备,某个磁盘分区
  5. link快捷方式,指针的指针
  6. fifo管道,用于把一个进程传到另外一个进程
  7. unknow未知文件

使用filetype($filename)判断文件的类型,返回字符串

stat($filename)可以输出文件的大部分属性

stat.php

<?php	
	print_r(stat("./test.txt"));
?>

  输出

Array ( [0] => 2 [1] => 0 [2] => 33206 [3] => 1 [4] => 0 [5] => 0 [6] => 2 [7] => 12 [8] => 1533566405 [9] => 1533566414 [10] => 1533566405 [11] => -1 [12] => -1 [dev] => 2 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 2 [size] => 12 [atime] => 1533566405 [mtime] => 1533566414 [ctime] => 1533566405 [blksize] => -1 [blocks] => -1 )

文件处理

readfile($filename)读取文件内容写入输出缓冲,并返回文件字符串大小,报错返回false

fgets($filename)从文件指针读取一行,出错返回false

fgetc($filename)从文件指针读取一个字符,出错返回false

readfile.php

<?php	
	readfile("./test.txt");
?>

test.txt

 

输出

这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试

fwrite($filename,$date)向文件中写入信息

fwrite.php

<?php
	//使用@隐藏提示信息,@叫做错误控制运算符
	$file=@fopen("./test.txt","r+");
	echo $file."<br/>";
	$num=fwrite($file,"今天是个好日子,心想的事儿都能成");
	if($num){
		echo "写入成功,写入了$num 字符";
	}else{
		echo "写入失败";
	}
?>

输出

Resource id #3
写入成功,写入了48 字符

test.txt

 

但是使用r+模式,会覆盖原先的内容,如果不想覆盖原先的内容,而是在原先基础上增加内容,应该使用追加模式,这里不研究。

常用方法:

  • copy($source,$dest)复制文件到指定路径
  • rename($oldname,$newname)重命名文件
  • unlink($filename)删除文件
  • pathinfo($path,$options)返回文件的路径信息
  • realpath($path)返回文件的绝对路径
  • is_file($filename)判断是否是文件

目录处理

 目录是一种特殊的文件类型

判断是否是目录isdir($path)

打开目录opendir($path)

关闭目录closedir($path)

dir.php

<?php
	$path="D:\资料";
	if(is_dir($path)){
		//打开目录
		$dir=opendir($path);
		echo "文件打开成功<br/>";
	}else{
		echo "打开失败,程序退出<br/>";
		exit();
	}
	closedir($dir);

?>

  输出

文件打开成功

操作目录方法:

readdir($path)浏览目录,返回一个文件名

mkdir($pathname)创建目录

rmdir($pathname)删除目录

chdir($pathname)改变目录

dir_operate.php

<?php
	if(chdir("D:/")){
		echo "切换到D:/<br/>";
	}//成功返回1
	if(mkdir("D:/test")){
		echo "创建文件夹D:/test<br/>";
	}//成功返回1
	if(rmdir("D:/test")){
		echo "删除文件夹D:/test<br/>";
	}//成功返回1
?>

  输出

切换到D:/
创建文件夹D:/test
删除文件夹D:/test

访问远程文件

PHP支持URL格式的文件调用,需要在php.ini中设置一下

url_file.php

<?php
	$html=file_get_contents("http://www.baidu.com/");
	echo $html;
?>

  输出

 

文件锁定

在向一个文件写入内容时,如果其他用户也修改这个文件,可能会造成冲突,为了防止冲突,使用flock()来锁定文件

flock.php

<?php
	$file=fopen("C:/xampp/htdocs/test.txt","r+");
	if(flock($file,LOCK_EX)){
		echo "文件已经锁定,可以安全写入数据";
	}else{
		echo "文件未锁定,写入数据是不安全的";
	}
	fclose($file);
?>

  输出

文件已经锁定,可以安全写入数据

文件上传

首先需要配置php.ini文件

单文件上传

使用move_upload_file($tmpname,$name)

upload.php

<html>
	<form method="post" enctype="multipart/form-data">
		<input type="file" name="upfile" />
		<input type="submit" value="上传" />
	</form>
</html>

<?php
	$file=fopen("C:/xampp/htdocs/test.txt","r+");
	if(!empty($_FILES)){
		foreach($_FILES["upfile"] as $k=>$v){
			echo "$k=>$v<br/>";
		}
	}else{
		echo "没有上传文件";
	}
?>

未上传效果

 

上传文件

上传成功

 

 upload2.php

<html>
	<form method="post" enctype="multipart/form-data">
		<input type="file" name="upfile" />
		<input type="submit" value="上传" />
	</form>
</html>

<?php
	if(!empty($_FILES)){
		$tmpname=$_FILES["upfile"]["tmp_name"];//文件临时名
		$name=$_FILES["upfile"]["name"];//文件原名
		move_uploaded_file($tmpname,$name)or die("文件上传失败,程序退出");
		echo "文件上传成功";
	}else{
		echo "没有上传文件";
	}
?>

  未上传

上传

文件已经上传到跟目录

 

ok,文件上传先到这里

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP架构师的学习路线图是怎样的?具体步骤是怎样的?底层原理是什么?
PHP架构师的学习路线图是怎样的?具体步骤是怎样的?底层原理是什么?
10 0
php进阶编程-easyswoole框架的学习和开发
php进阶编程-easyswoole框架的学习和开发
21 0
PHP 重载学习路径|学习笔记
快速学习 PHP 重载学习路径,重载是面向对象里的重要概念,本章主要学习重载的概念以及实现重载的具体应用。
18 0
PHP 继承学习路径|学习笔记
快速学习 PHP 继承学习路径
20 0
【php学习笔记】文件系统---制作备忘录和修改配置文件(下)
【php学习笔记】文件系统---制作备忘录和修改配置文件
27 0
【php学习笔记】文件系统---制作备忘录和修改配置文件(上)
【php学习笔记】文件系统---制作备忘录和修改配置文件
28 0
PHP学习资源之用户手册
本章向大家推荐一些学习PHP的资源,首先第一个资源必不可少的就是PHP用户手册PHP手册相当于是PHP的“新华词典”,包含了PHP的所有内容,所以在我们的学习生 活中必不可少,有人问可不可以把学习手册背下来,结果肯定是当然可以的,就像你把 新华词典背下来,你会认识所有的汉字,但是这不推荐新手这么做,首先背手册要花费 大量时间,即使你背下来啦,你会发现你依然写不出代码,因为手册并不是按照一个完 整的学习体系来编写的,所以推荐大家把手册下载到本地,然后遇到问题的时候我们再 去查找手册,这样会事半功倍。下面我来教大家如何下载手册.
86 0
为什么很多人学习PHP编程都喜欢自学成才?推荐几个php自学网站
为什么很多人学习PHP编程都喜欢自学成才?推荐几个php自学网站
52 0
学习了php之后再来看php怎样学java
我用了一天时间学会了php,真的。我现在已经可以流畅的用thinkphp框架开发php了。学习过程是这样的:我接了个php的项目,包括两个部分:老系统添加功能和优化,再新做一个系统。已经答应给人家做了,所以“嘣”一声,我就会了。逼上梁山,没有做不了的事。我接到活儿,白天一整天没能把环境跑通,但是我边想边联系了好几个做php的兄弟。当我自己可以将问题问题定位了,也晚上了,估计大家也都有空了。我开始有针对性的问他们问题。最后一个问题是关于nginx配置的,问了好多php大牛的兄弟都说我配置的没有问题,不知道为啥会那样。当问题没有道理
39 0
+关注
乌云上
熟悉MySQL,SQL Server等数据库,熟悉.NET和Java相关领域, 擅长.NET ,PHP,Python,Node.js,SQL Server,jQuery 喜欢音乐和诗歌的技术宅
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PHP安全开发_从白帽角度做安全
立即下载
PHP在机器学习上的应用及云深度学习平台的架构设计与实现
立即下载
复杂PHP系统性能瓶颈排查及优化
立即下载
相关实验场景
更多