PHP基础的遍历文件夹,文件下载,排序
文件操作什么是文件操作广义的文件操作包含两个部分文件夹和文件操作就是对文件夹或者文件进行增删改查。为什么要进行文件操作清理网站中不安全的用户上传的文件系统的配置文件XML配置文件用户在文件上传的时候会因为文件上传量过大需要分层管理文件夹操作如何得到文件夹里面的文件内容读取文件夹内容得到文件夹的资源opendir打开一个文件夹得到当前文件夹对应的一个资源读取文件夹资源里面的内容readdir(资源)从指定资源中获取当前资源指针所指向的文件的文件名字将资源指针下移一位释放资源closedir(资源)关闭不用的资源注意一个对外的资源通常在使用结束之后最好手动关闭遍历文件夹利用readdir会读取一个文件名同时将指针下移配合while循环重置资源指针rewinddir重置资源指针回到第一位系统提供了一个文件夹的遍历方式scandir获得当前文件夹下所有的文件的名字返回一个数组文件夹操作函数file_exists判断一个文件是否存在一般情况下需要指定路径如果不指定的话默认是当前is_dir是否是一个路径is_file是否是一个文件mkdir创建文件夹通常对于文件创建因为有可能文件已经存在就不需要创建可以通过判断来选择具体是否创建简单方法就是使用错误抑制。rmdir删除文件夹与mkdir一致getcwd获取当前工作路径chdir改变当前工作路径遍历当前文件夹文件夹用红色显示文件使用蓝色显示循环遍历文件夹及其子目录做一个函数实现遍历指定文件夹下的所有文件在碰到文件夹的地方递归调用自己去解决问题。给函数增加层级调用不同的层级用不同的变量代替。利用当前层级的变量值来进行缩进。str_repeat(需要缩进的字符,重复的次数)递归函数自己调用自己在函数内部碰到了一个问题问题与函数要解决的问题一致子问题就调用函数自己去解决子问题。递归点子问题与父问题一致调用函数来解决问题遍历到的文件是一个文件夹与父问题一致递归点。递归出口函数不需要再向下执行子问题已经是最优子问题。遍历到的文件是一个文件不是文件夹不需要调用一个文件夹被遍历完之后没有代码可执行形成了递归出口递归原理作业递归的实现阶乘斐波那契数列递归实现递归遍历文件夹及其子目录不输出将遍历得到的结果保存到一个数组中然后最后返回该数组数组能够在外部实现按层级进行输出能够判断出是文件文件夹关联数组层级静态变量中文乱码乱码的原理当前自己的编码与别人显示的编码不一致文件在系统的显示的编码采用的ANSIANSI代表本机操作系统的默认编码在中国默认是GBK或者GB2312脚本文件采用的utf-8编码。如果要在utf-8脚本中去读取文件名字并且最终按照utf-8进行显示的话需要将读取到的数据进行转码。iconv:string iconv ( 原内容编码, 当前脚本编码目标编码 , 目标字符串 )文件操作对文件的增删改查。php在php5以后提供了一种比之前简单的方式。PHP5文件操作从磁盘的角度出发所有的操作就分为两类读和写读file_get_contents获取一个文件中全部的数据内容写入文件file_put_contents将一个字符串存放到指定的文件注意如果文件不存在那么系统会先自动创建该文件然后再往里面写入数据。file_put_contents默认的是会将原有文件的内容给清空后在写入覆盖原来的内容追加内容可以通过函数的第三个参数来实现FILE_USE_INCLUDE_PATH覆盖文件默认的FILE_APPEND追加file函数读取文件里面的内容返回的是一个数组每一行是数组中的一个元素PHP4文件操作php5以前文件的操作是以外部资源方式操作。获取对应的文件资源fopen打开一个文件资源resource fopen ( 文件名 , 操作模式)操作模式当前要打开的这个文件必须事先声明要对这个文件做什么操作。返回资源对资源进行操作读/写fgetcc代表char一次获取一个字节fgetss代表string一次获取指定长度或者一行字符串如果指定长度超过一行那么最终只能返回一行fread获取指定长度的字符串只要字符串长度不超过8192字符不论是那种方式去获取数据最终文件资源的指针都会移动到获取到的数据位置的后一位。fputs/fwrite向一个文件中指针所在位置写入数据。关闭资源fclose()关闭资源r写操作w写操作指针设置可以按照想要的位置进行设置fseekint fseek (资源 ,具体位置)PHP文件操作相关函数copy复制文件unlink删除文件rename重命名文件filemtimem代表modify文件最后被修改的时间filesize文件大小fileperms文件权限Linux文件下载将服务器上的东西保存到浏览器所在的电脑。文件下载有两种方式a标签方式和输出方式a标签下载在a标签的href属性里面指定要下载的文件文件不能被浏览器直接识别一旦被识别浏览器就会自动解析。缺点直接暴露了真实文件路径本身的内容会通过url的形式被暴露能够被下载的数据格式很有限输出方式服务器端将对应的要下载的内容读出来然后按照二进制的形式将数据输出给浏览器为了防止浏览器解析还必须告诉浏览器不要解析按照附件形式进行处理把所有的内容都接收完毕之后再保存到本地header(Content-type: application/octet-stream)告诉浏览器当前输出传输的格式是八进制的流式文件是一个应用文件浏览器不需要解析。header(Content-Disposition: attachment; filenamefilename告诉浏览器内容是一个附件处理的时候应当将内容当做一个附件处理不要解析filename表示服务器当前建议浏览器在保存的时候采用的名字。下载步骤设置content-type设置content-disposition输出数据将数据读入内存然后将最终读到的字符串直接输出好处隐藏目标文件的路径能够隐藏文件的真实内容保证服务器的安全性以上方式有缺点file_get_contents会一次性读取所有内容如果文件本身的内容很大那么会非常的占用内存影响服务器的服务质量。因此如果真要实现文件下载要考虑文件的大小如果文件过大使用fopen打开文件fread/fgets来进行文件的读入然后输出。作业研究算法快速排序递归排序算法将一个数组内部的无序的纯数值进行排序升序|降序排序的算法很多常见的只有四个冒泡排序选择排序插入排序快速排序冒泡排序冒泡排序就是根据冒泡法则对一个无序的数列进行排序按照数据的大小进行比较每次得到一个最大的数据。