1. /**
  2. * PHP高效遍历文件夹(大量文件不会卡死)
  3. * @param string $path 目录路径
  4. * @param integer $level 目录深度
  5. */
  6. function fn_scandir($path = './', $level = 0) {
  7. $file = new FilesystemIterator($path);
  8. $filename = '';
  9. $prefix = '';
  10. $url = '';
  11. foreach ($file as $fileinfo) {
  12. $filename = $fileinfo->getFilename();
  13. $filepath = $path . $filename;
  14. $prefix = $level > 0 ? ('|' . str_repeat('--', $level)) : '';
  15. if ($fileinfo->isDir()) {
  16. $filepath = $filepath . '/';
  17. $url = '<a title="[dir] '.$filepath.'" href="?path=' . $filepath . '">' . $filename . '</a> [<a title="delete" href="?path=' . $filepath . '&action=del" onclick="return confirm(\'您确定要删除吗?\')">x</a>]';
  18. echo '<strong>' . $prefix . $url . '/</strong>' . '<br />';
  19. } else {
  20. $url = '<a title="[file] '.$filepath.'" href="?path=' . $filepath . '">' . $filename . '</a> [<a title="delete" href="?path=' . $filepath . '&action=del" onclick="return confirm(\'您确定要删除吗?\')">x</a>]';
  21. echo $prefix . $url . '<br />';
  22. }
  23. if ($fileinfo->isDir()) {
  24. fn_scandir($filepath, $level + 1);
  25. }
  26. }
  27. }
  28.  
  29. /**
  30. * 删除非空目录里面所有文件和子目录
  31. * @param string $dir
  32. * @return boolean
  33. */
  34. function fn_rmdir($dir) {
  35. //先删除目录下的文件:
  36. $dh = opendir($dir);
  37. while ($file = readdir($dh)) {
  38. if ($file != "." && $file != "..") {
  39. $fullpath = $dir . "/" . $file;
  40. if (is_dir($fullpath)) {
  41. fn_rmdir($fullpath);
  42. } else {
  43. unlink($fullpath);
  44. }
  45. }
  46. }
  47. closedir($dh);
  48. //删除当前文件夹:
  49. if (rmdir($dir)) {
  50. return true;
  51. } else {
  52. return false;
  53. }
  54. }
  55.  
  56. /**
  57. * PHP高效读取文件
  58. * @param string $filepath
  59. * @return string
  60. */
  61. function fn_tail($filepath) {
  62. if (file_exists($filepath)) {
  63. $fp = fopen($filepath, "r");
  64. $str = "";
  65. $buffer = 1024; //每次读取 1024 字节
  66. while (!feof($fp)) {//循环读取,直至读取完整个文件
  67. $str .= fread($fp, $buffer);
  68. }
  69. return $str;
  70. }
  71. }
  72.  
  73. /**
  74. * PHP高效写入文件(支持并发)
  75. * @param string $filepath
  76. * @param string $content
  77. */
  78. function fn_write($filepath, $content) {
  79. if ($fp = fopen($filepath, 'a')) {
  80. $startTime = microtime();
  81. // 对文件进行加锁时,设置一个超时时间为1ms,如果这里时间内没有获得锁,就反复获得,直接获得到对文件操作权为止,当然。如果超时限制已到,就必需马上退出,让出锁让其它进程来进行操作。
  82. do {
  83. $canWrite = flock($fp, LOCK_EX);
  84. if (!$canWrite) {
  85. usleep(round(rand(0, 100) * 1000));
  86. }
  87. } while ((!$canWrite) && ((microtime() - $startTime) < 1000));
  88. if ($canWrite) {
  89. fwrite($fp, $content);
  90. }
  91. fclose($fp);
  92. }
  93. }

示例文件:[下载]

版权声明:本文采用署名-非商业性使用-相同方式共享(CC BY-NC-SA 3.0 CN)国际许可协议进行许可,转载请注明作者及出处。
本文标题:php高效遍历文件夹、高效读取文件
本文链接:http://www.cnblogs.com/sochishun/p/7375328.html
本文作者:SoChishun (邮箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)
发表日期:2017年8月16日

php高效遍历文件夹、高效读取文件的更多相关文章

  1. R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

    一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...

  2. node遍历文件夹并读取文件内容

    var fs = require('fs'); var path = require('path');//解析需要遍历的文件夹 var filePath = path.resolve('./dist' ...

  3. python 语料处理(从文件夹中读取文件夹中文件,分词,去停用词,去单个字)

    # -*- coding:utf8 -*- import os import jieba def splitSentence(inputFile): fin = open(inputFile, 'r' ...

  4. Storm监控文件夹变化 统计文件单词数量

    监控指定文件夹,读取文件(新文件动态读取)里的内容,统计单词的数量. FileSpout.java,监控文件夹,读取新文件内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  5. TypeScript ES6-Promise 递归遍历文件夹中的文件

    貌似很多人都爱用这个作为写文章的初尝试,那来吧.遍历文件夹下的所有文件,如遍历文件夹下并操作HTML/CSS/JS/PNG/JPG步骤如下:1.传入一个路径,读取路径里面所有的文件:2.遍历读取的文件 ...

  6. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  7. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  8. python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件

    命令:os 用到的:os.walk   os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...

  9. php读取excel,以及php打包文件夹为zip文件

    1.把文件下载到本地,放在在Apache环境下2.d.xlsx是某游戏的服务器名和玩家列表,本程序只适合此种xlsx文件结构,其他结构请修改index.php源码3.访问zip.php的功能是把生成的 ...

  10. PHP遍历文件夹下的文件和获取到input name的值

    <?php$dir = dirname(__FILE__); //要遍历的目录名字 ->当前文件所在的文件夹//$dir='D:\PHP\wamp\www\admin\hosts\admi ...

随机推荐

  1. Centos7 安装与破解 Confluence 6.7.1

    1.1硬件需求建议: CPU:32/64 bit 2.27GHz双核心以上之CPU: 内存:8GB以上: 硬盘:300GB,7200转以上: 建议数据库.Confluence等各自独立一台服务器(本测 ...

  2. Python模块xlwt对excel进行写入操作

    python常用模块目录 1.安装 $ pip install xlwt 2.创建表格和工作表单写入内容 例子: import xlwt # 创建一个workbook 设置编码 workbook = ...

  3. date命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/qmfsun/p/4598650.html date "+今天是%Y-%d-%m,现在是%H:%M:%S&qu ...

  4. Visual Studio win平台 AI环境搭建

    内容提要:我觉得难点主要出在下载上,程序跑的都挺流畅的.下载有时会失败. 1.下载安装git.这一步主要为了下载示例和自动安装环境的python代码,直接去github上用网页下载也是一样的,git不 ...

  5. 团队项目-NABCD

    用户需求分析与NABCD 模拟经营类(SIM)游戏:玩家模拟经营一家软件公司,平台初步定为Android. Need需求 任何一款游戏都要有自己的定位和目标群体,这些 iiMediaResearch数 ...

  6. 5233杨光--Linux第二次实验

    实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分享实 ...

  7. servlet的方法解析

    一般来说servlet继承了HttpServlet,我们可以覆盖某些方法来实现自己的功能. Init()和Init(ServletConfig config),我们一般只需覆盖后者,因为这个可以从se ...

  8. P2P通讯原理

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  9. Mininet-Wifi 多接入点(Access Point)实验

    实验简介  这个实验来自Mininet-Wifi用户手册.在本实验中,我们会创建一个有三个AP的线式拓扑,并有三个站点(station)与每个AP通过无线相连.将通过这个时间简单演示一些Mininet ...

  10. 读《我是IT小小鸟》有感

    我是一只IT小小鸟,我与IT结缘.书中是作者对个人经历与经验在IT下的体会,却给了我们很好的借鉴. IT这门行业,不仅仅再局限于如我们高中老师教学所要求的内容.IT更加开放,可以通过GitHub.CS ...