PHP自动查找指定文件夹下所有文件BOM和删除所有文件

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

<?php

    if (isset($_GET['dir'])){ //设置文件目录
        $basedir=$_GET['dir'];
    }else{
        $basedir = '.';
    }

    $auto = 1;
    checkdir($basedir);

    function checkdir($basedir){
        if ($dh = opendir($basedir)) {
            while (($file = readdir($dh)) !== false) {
                if ($file != '.' && $file != '..'){
                    if (!is_dir($basedir."/".$file)) {
                        
                        //自動查找BOM
                        echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
                        
                        //自動刪除緩存文件
                        $res = unlink("$basedir/$file");
                        $str = $res ? "filename: $basedir/$file is deleted <br>" : "filename: $basedir/$file is not deleted <br>";
                        echo $str;                
                    }else{
                        $dirname = $basedir."/".$file;
                        checkdir($dirname);
                    }
                }
            }

            closedir($dh);
        }
    }

    function checkBOM ($filename) {
        global $auto;
        $contents = file_get_contents($filename);
        $charset[1] = substr($contents, 0, 1);
        $charset[2] = substr($contents, 1, 1);
        $charset[3] = substr($contents, 2, 1);
        if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
            if ($auto == 1) {
                $rest = substr($contents, 3);
                rewrite ($filename, $rest);
                return ("<font color=red>BOM found, automatically removed._<a href=http://www.k686.com>http://www.k686.com</a></font>");
            } else {
                return ("<font color=red>BOM found.</font>");
            }
        }else return ("BOM Not Found.");
    }


    function rewrite ($filename, $data) {
        $filenum = fopen($filename, "w");
        flock($filenum, LOCK_EX);
        fwrite($filenum, $data);
        fclose($filenum);
    }

转载于:https://my.oschina.net/u/1771585/blog/859782

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php支持cs吗,关于composer、phpmd和phpcs于windows中的安装与使用方法

Composer项目地址 https://getcomposer.org中文 http://docs.phpcomposer.com/Composer是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库&#xff0c;它会在你的项目中为你安装他们。一、安装Composer官网有详细介绍安装方法&#xff0c;包括windows和linux系统。以…

jquery 入门与知识

一&#xff09;什么是jQuery&#xff1f; 【以封装的思想&#xff0c;重构<<图片显示和隐藏>>】 第三方组织预先写好的一些实用JS文件、类&#xff0c;方法&#xff0c;都统称为JS实用库&#xff0c;免费放在网上&#xff0c;同时配有相关的学习文档和案例&#xf…

基于ASP.NET Core api 的服务器事件发送

现如今程序员对Web API的调用已经是轻车熟路。但是传统的api调用都是拉模式&#xff0c;也就是主动发起请求去调用一个api.但是程序员往往对另一种很有用的模式很陌生&#xff0c;即推模式。拉模式 - 主动调用并获取结果的模式。推模式 - 订阅并接受数据推送的模式。今天要介绍…

Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题

1、问题 再三星平板(Android 4.2.2系统)我们代码powerManager调用了函数isInteractive方法,出现下面错误 java.lang.NoSuchMethodError:android.os.powerManager.isInteractive 2、解决办法 1、一开始想用try catch来解决,肯定不行,功能没实现,而且进程还是会挂 2…

DDD为何叫好不叫座?兼论DCI与业务分析的方法论

今天&#xff0c;仔细阅读了园子里面的一个朋友写的《一缕阳光&#xff1a;DDD&#xff08;领域驱动设计&#xff09;应对具体业务场景&#xff0c;如何聚焦 Domain Model&#xff08;领域模型&#xff09;&#xff1f;》(http://www.cnblogs.com/xishuai/p/3800656.html)这篇博…

css编写规范

一、注释规范 1、文件顶部注释&#xff08;推荐使用&#xff09; Css代码 /* * description: 中文说明 * author: name * update: name (2013-04-13 18:32) */ 2、模块注释 模块注释必须单独写在一行 Css代码 /* module: module1 by 张三 */ … /* module: module2 …

ng的link和comepile

angularJs应用启动之前&#xff0c;它们是以HTML文本形式存在文本编辑器当中。应用启动会进行编译和链接&#xff0c;作用域会同HTML元素进行绑定。 在编译的阶段&#xff0c;angularJs会遍历整个的文档并根据JavaScript中指令定义来处理页面上的指令。 如果设置了compile函数&…

php 实现的字典序排列算法,字典序的一个生成算法

字典序的一个生成算法。最近在LeetCode刷题&#xff0c;刷到一个题&#xff0c;链接&#xff1a;https://leetcode-cn.com/problems/permutation-sequence/这个题要求得长度为n的字典序列的第k个排列。我们知道&#xff0c;字典序列是一个长度为n(n>1)&#xff0c;元素为1~n…

MarkDown之typora

windows上面非常适合用typora&#xff0c;地址如下&#xff1a; https://typora.io/

BeetleX服务网关流量控制

为了保障后台服务应用更可靠地运行&#xff0c;网关提供了一些基础流量控制功能&#xff1b;通过这一功能可以限制流转到后台应用服务的处理量&#xff0c;从而让服务在可应对的并发范围内更可靠地运作。服务网关提供了流量控制有基础控制、IP、域名和请求路径。基础配置主要包…

【cocos2d-x】2.0升级为3.0一些常见变化纪录

1.去CC之前2.0的CC**,把CC都去掉&#xff0c;基本的元素都是保留的2.0CCSprite CCCallFunc CCNode ..3.0Sprite CallFunc Node ..2.cc***结构体改变2.0 ccp(x,y) ccpAdd(p1,p2)ccpSubccpMultccpLength(p)ccpDot(p1,p2);ccc3()ccc4()ccWHITECCPointZeroCCSizeZer…

如何查看自己的ubutu系统是32位的还是64位的

1.按ctrlshiftt 快捷键&#xff0c;打开终端&#xff0c;输入sudo uname --m &#xff0c;按下enter2.如果显示i686,你安装了32位操作系统如果显示 x86_64&#xff0c;你安装了64位操作系统3.如果想知道更多信息可以试试如下命令sudo uname --s 显示内核名字ssudo uname --r 显…

Java Web开发——Servlet监听器

一、Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类&#xff0c;用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件&#xff0c;以及监听这些域对象中属性发生修改的事件。 监听对象&#xff1a; 1、ServletContext&#xff1…

java之MessageDigest简单使用总结

1、说明 MessageDigest是Java自带的类2、简单代码 比如我们需要实现md5,或者sha加密public class MD5AndSHA { public final static String MD5_SHA(String s, String method) { char hexDigits[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f }; try { byte[] str…

通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式...

目录&#xff1a;一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解三、通过Dapr实现一个简单的基于.net的微服务电商系统(三)——一步一步教你如何撸Dapr四、通过Dapr实现一个简单的基于.net的微服…

简单直接排序

#!/usr/bin/python #encoding:utf-8 #基本思想:#将一个记录插入到已排序好的有序表中&#xff0c;从而得到一个新&#xff0c;记录数增1的有序表。即&#xff1a;先将序列的第1个记录看成是一个有序的子序列&#xff0c;然后从第2个记录逐个进行>插入&#xff0c;直至整个序…

php怎么关闭oracle连接,PHP 连接 Oracle

起因由于项目的数据库需要用客户购买的Oracle数据库&#xff0c;所以需要php安装oci扩展。运行环境php : 7.2系统: windows10oracle: 11gR2安装相关环境由于php的oci8扩展还是需要使用到oracle的一些包&#xff0c;所以先下载这一些。下载完成后解压缩这个压缩包&#xff0c;并…

MySQL查询,按拼音首字母排序

MySQL按照汉字的拼音排序按照汉字的拼音排序&#xff0c;用的比较多是在人名的排序中&#xff0c;按照姓氏的拼音字母&#xff0c;从A到Z排序&#xff1b;如果存储姓名的字段采用的是GBK字符集&#xff0c;那就好办了&#xff0c;因为GBK内码编码时本身就采用了拼音排序的方法&…

Android Studio之debug调试卡在waiting for debugger界面的解决办法

1、问题 Android Studio debug调试项目卡在waiting for debugger界面2、解决办法 一开始从启adb服务adb stop-server adb start-server 发现没什么用&#xff0c;然后呢&#xff0c;估计是很多app再运行&#xff0c;然后我就重启了Android studio,问题就解决了如果要是万一还不…

.NET 深度指南:Colors

作者 &#xff5c; Peter Huber译者 &#xff5c; 王强策划 &#xff5c; 丁晓昀我不知道你们是什么情况&#xff0c;但我自己在过去多年中都因为.NET 色彩&#xff08;Colors&#xff09;类中可用的色彩数量有限而头痛不已&#xff0c;为此我试图用 ColorPickers 获得匹配的色…