PHP文件操作入门_file_use_include_path-程序员宅基地

技术标签: php  PHP基础  

文件读写

1、读取文件
file_get_contents():将文件中的内容读取到一个字符串中

file_get_contents($filename,$use_include_path,$context,$offset,$maxlen);

$filename:指定要读取的文件路径;其他参数为可选参数
$use_include_path,若想在php.ini中配置的 include_path路径中搜寻文件,可以将该参数设置1;
$context,用于资源流上下文操作
$offset,用于指定在文件中开始读取的位置,默认从文件头开始
$maxlen,用于指定读取的最大字节数,默认为整个文件的大小

除了文本文件,file_get_contents()还可以读取图片等其他类型的文件

  header('Content-type:image/jpeg');
  var_dump(file_get_contents('.\img\123.jpg'));

通过header函数告知浏览器图片的类型,需要注意的是,整个脚本中不能有其他的输出内容,并且这个文件必须是一个正确的图片文件
2、按行读取文件
file()函数可以将整个文件读入到数组中。如果执行成功返回一个数组,数组中的每个元素都是文件中的一行,包括换行符在内。如果执行失败,则返回false

file($filename,$flogs)

$filename指定读取的文件路径;
$flogs可选参数,指定读取方式的选项,具体如下:
FILE_USE_INCLUDE_PATH:在include_path中查找文件
FILE_IGNORE_NEW_LINES:指定返回值数组的每个元素值末尾不添加换行符
FILE_SKIP_EMPTY_LINES:跳过空行
实列:

 $arr=file('./new_file.txt');
 foreach($arr as $index=>$val){
    
 	print_r($index.": ".$val.'<br />');
 }

3、写入文件
file_put_contents()

file_put_contents($filename, $data,$flags)

$filename指定读取的文件路径;$data指定要写入的内容;$flags指定要写入的形式,如:FILE_USE_INCLUDE_PATH:在include_path中查找文件;FILE_APPEND表示追加写入。函数执行成功返回写入到文件内数据的字节数,失败返回false
**注意:**在php脚本中书写中文字符时,字符串的编码取决与php脚本文件所使用的编码,为了更好地处理字符编码,php提供了iconv()函数用于编码转换

  //在utf-8编码的php脚本中书写的字符串是utf-8编码
  $data="测试";
  //将utf-8编码转换为gbk编码,保存到文件中
  $data=iconv('UTF-8', 'GBK', $data);
  file_put_contents('./new_file.txt', $data);
  //输出文件,并告知浏览器使用gbk编码显示
  header('Content-type:text/html;charset=GBK'); //charset不要写错
  echo file_get_contents('./new_file.txt');

4、读取远程文件
file_get_contents()和file()除了可以读取本地文件,还可以读取远程文件。在使用前,应确保php.ini中的allow_url_fopen配置处于开启状态,否则不允许远程请求

文件常用操作

1、文件重命名和移动文件
rename()函数用于实现文件的重命名或移动文件

rename($oldname, $newname)

$oldname表示原文件路径,$newname表示目标路径。如果两个路径在同一个目录下是重命名操作,否则执行移动操作。
==注:==若目标路径是已经存在的文件,会自动覆盖。另外,若rename()函数的第一个参数是目录,则可以对目录进行重命名或移动的操作。若目标路径已经存在,或目标路径的上级目录不存在时,会失败
2、文件复制

copy($source, $dest)

$source表示原文件路径,$dest表示目标路径。当文件复制成功时返回true,失败时返回false
3、文件删除

unlink($filename)

$filename指定读取的文件路径,如果成功返回true,否则返回false。如果文件不存在,则会提示warning
4、判断文件是否存在

file_exists($filename)  //判断指定文件或目录是否存在
is_file($filename)   //判断指定文件是否存在
is_dir($filename)   //判断指定目录是否存在

文件类型和属性

1、获取文件类型
filetype($filename)
2、获取文件属性

函数 功能
filesize($filename) 获取文件大小
filectime($filename) 获取文件的创建时间
fileatime($filename) 获取文件的上一次访问时间
filemtime($filename) 获取文件的修改时间
is_readable($filename) 判断文件是否可读
is_writable($filename) 判断文件是否可写
is_executable($filename) 判断文件是否可执行

目录操作

1、创建目录
mkdir()

mkdir($pathname,$mode,$recursive)
 mkdir('./img/a/b',077,TRUE);

$pathname,指定要创建的目录;$mode指定目录的访问权限(用于Linux环境),默认为077;$recursive指定是否递归创建目录,默认为false。该函数执行成功返回true,失败返回false
$mode,$recursive均为可选参数,如果要递归创建$mode参数不能缺少
2、删除目录
rmdir()函数用于删除目录,成功返回true,失败返回false

rmdir($dirname)

$dirname,指定要删除的目录名,对于非空目录会删除失败
3、遍历目录
glob()函数用于寻找与模式匹配的文件路径,也可以用于遍历目录。函数的返回值是查找后的文件列表数组
例:

header('Content-type:text/html;charset=GBK');
var_dump(glob('./*'));  //获取当前目录下的文件列表
var_dump(glob('./*.html'));   //获取当前目录下所用的html扩展名的文件

注:需要设置字符格式(因为中文名可能会出现乱码)
4、查看磁盘大小和可用空间

disk_free_space($directory)  //可用空间
disk_total_space($directory) //总空间
disk_free_space('D:')

$directory:磁盘;这两个函数只对磁盘根目录起作用

解析路径

1、返回路径中的文件名

basename($path,$suffix)

$path指定的路径名,$suffix可选参数,如果指定了该参数且文件名使用该参数结尾的,则返回结果中会去掉这一部分字符
2返回路径中的目录部分、

dirname($path,$leves)

$leves可选参数,表示上移目录的层数,注该参数是php7中的参数,若低于该版本将不能使用该参数

   $path="c:/a/b/c/d/e.txt";
   print_r(dirname($path));  //结果:c:/a/b/c/d
   print_r(dirname($path,2));  //结果:c:/a/b/c  

3、pathinfo($path)
用于以数组形式返回路径中的信息,包括目录名、文件名和扩展名等

$path="c:/a/b/c/d/e.txt";
var_dump(pathinfo($path));
echo pathinfo($path)['basename'];

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41897680/article/details/103767855

智能推荐

第六章:定制数据对象-程序员宅基地

文章浏览阅读106次。第5章最后一个程序输出的正是这个教练想要的结果,但是还有一个缺陷:从这个输出无法判断是哪个选手的数据Kelly认为他有办法,他已经向各个数据增加是标识数据cat sarch2.txtSarah Sweeney,2002-6-17,2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55第一个是选手名字,第二个是选手出生日期,需要..._def sanitize(time_string):

Redis六种内存淘汰策略_以下哪个不是redix内存淘汰算法-程序员宅基地

文章浏览阅读428次。翻译:Redis在满内存情况下会选择何种方式删除数据,你可以选择以下5种方式(其实是6种,redis备注写错了):noeviction(默认策略):就是当内存满了,再执行set之类的要申请内存的动作,直接报错。allkeys-lru:所有key都使用LRU(最近最少使用)算法进行淘汰,优先移除最近很少使用的key,回收内存。volatile-lru:所有设置了过期时间的key使用LRU算法进行淘汰。针对设置了过期时间的键值对,直接回收最近没使用的。allkeys-random:随._以下哪个不是redix内存淘汰算法

jpa-实体类自动生成数据库表格失败_jpa could not determine type at table:-程序员宅基地

文章浏览阅读509次。今天设计完实体类在生成数据库时遇到了错误。_jpa could not determine type at table:

一起来学 SpringBoot 2.x | 第三篇:SpringBoot 日志配置-程序员宅基地

文章浏览阅读3.6k次。摘要: 原创出处 http://blog.battcn.com/2018/04/23/springboot/v2-config-logs/ 「唐亚峰」欢迎转载,保留摘要,谢谢!日志格式日志输出颜色编码编码对照表文件保存自定义日志配置Logback扩展配置springProfilespringProperty总结说点什么SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一...

基于javaweb固定资产管理系统的设计与实现(论文+程序设计源码+数据库文件)_电脑资产管理系统web源码-程序员宅基地

文章浏览阅读3.2k次。目录摘要: 21 绪论 41.1 项目开发背景 41.2 项目开发意义 41.3 项目主要的内容 42 相关技术介绍及系统环境开发条件 42.1相关技术介绍 52.2系统环境开发条件 63 系统的需求分析与设计 63.1可行性分析 73.2需求分析 73.2.1系统总体概述 7如图3-1结构图 73.2.2功能性需求 73.2.3非功能性需求 83.2.4流程图设计 83.2.5系统ER图设计 103.3 数据库设计 123.3.1数据库设计的原则 123.3.2数据_电脑资产管理系统web源码

调用了PagerAdapter.notifyDataSetChanged() 后,ViewPager没有刷新_pageradapter notifydatasetchanged不刷新-程序员宅基地

文章浏览阅读518次。1. 问题:我们知道, 会为每一个ViewPager 设置PagerAdater.当数据改变 时,我们会调用PagerAdapter.notifyDataSetChanged() 去刷新界面(即ViewPager).但是发现即使调用了notifyDataSetChanged() , 界面也没有刷新,即 PagerAdapter.instantiateItem() 没有被回调。2. 结论解决方法是实现PagerAdapter.getItemPosition() 方法, 并返回Pager.._pageradapter notifydatasetchanged不刷新

随便推点

WarGames-Natas(16)_natas数据库入门-程序员宅基地

文章浏览阅读490次。natas(16)<?$key = "";if(array_key_exists("needle", $_REQUEST)) { $key = $_REQUEST["needle"];}if($key != "") { if(preg_match('/[;|&`\'"]/',$key)) { print "Input contains an illegal cha_natas数据库入门</div>

【Python】类的属性和方法的参数加不加self的区别_类中能不能不是self的属性-程序员宅基地

文章浏览阅读7.4k次。先看一段代码class Test(object): ID = 1 def __init__(self): pass def prtID(self): print(self.ID) def classplusOne(self): Test.ID += 1 def ObjplusOne(_类中能不能不是self的属性

Marching squares (triangle)_marching squares生成三角形-程序员宅基地

文章浏览阅读807次。2*2网格划分为三角网def get_triangle_bit(v1, v2, v3): return v1 << 2 | v2 << 1 | v3def get_triangle_shift(bitval): if bitval == 0 or bitval == 7: return (0,None,None,None,None) if bitval == 1 or bitva_marching squares生成三角形

先安装SQL2008 R2后安装AD导致无法正常登陆数据库(无法启动MSSQLSERVER)_sql2008提示ad-程序员宅基地

文章浏览阅读4k次。原文来源:http://hi.baidu.com/nansheng2/item/ce2d041f4a6340f965eabfb0 分析原因:安装AD后,系统改为使用域用户登陆,原先安装SQL时设置的“本地用户”信息已经修改,当前(域)用户没有权限访问MSSQLSERVER实例文件夹或整个SQL文件夹。解决方法:1、打开“服务”,找到SQL Server(MSSQLSERV_sql2008提示ad

使用CSF算法做点云地面滤波处理,分离地面与非地面_首先采用布料模拟滤波 (csf)算法进行点云滤波,实现地面点和非地面点的 分离-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏14次。import laspyimport CSFimport numpy as npinFile = laspy.file.File(r'/home/jiang/桌面/J/jiang/B/132695079545146682-point-cloud - Cloud.las', mode='r') # read a las filepoints = inFile.pointsxyz = np.vstack((inFile.x, inFile.y, inFile.z)).transpose() # e._首先采用布料模拟滤波 (csf)算法进行点云滤波,实现地面点和非地面点的 分离

java 双向链表循环_java实现数据结构-链表(单向,循环,双向)-程序员宅基地

文章浏览阅读147次。1. 什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。每一个链表都包含多个节点,节点又包含两个部分,一个是数据域(储存节点含有的信息),一个是引用域(储存下一个节点或者上一个节点的地址)。2. 链表的特点获取数据麻烦,需要遍历查找,比数组慢方便插入、删除3. 单向链表单向链表是一种简单的数据结构,在单向链表中每个节点中都会有一个引用域..._数据结构java版线性表的双向链表和循环链表存储代码java