php批量删除指定文件夹中指定后缀名文件

 更新时间:2016年11月25日 15:41  点击:2447
这是一个比较实现的函数我们可以自定义要删除那些目录保存在一个数据中,然后我们根据数据进行遍历并且删除目录下指定文件了,具体代码如下。

直接上代码:

下面的例子我们是以删除指定目录的html为例子哦,如果你要其它文件我们只要把html改成你自己要删除的后缀名就可以了。

 代码如下 复制代码
<?php
$lanmu = array("action","tiyu","yizhi","sheji","gaoxiao","maoxian","qipai","celue","minjie","xiuxian","ertong","jingying","webgame");
foreach($lanmu as $v2){
    $mstdel[] =glob(getcwd().DIRECTORY_SEPARATOR.$v2.DIRECTORY_SEPARATOR.'[1-9]*.html');
}
 
//var_dump($mstdel);
 
//var_dump(count($mstdel));
$i=0;
foreach($mstdel as $val){
    foreach($val as $val2){
        //echo $val2."<Br>";
        if(unlink($val2)) $i++;
        //$countval2[] = $val2;
    }
}
 
echo 'del success: '.$i;
 
//echo count($countval2);
//var_dump(glob(getcwd().DIRECTORY_SEPARATOR.'sheji'.DIRECTORY_SEPARATOR.'[1-9]*.html'));
//var_dump(glob('./sheji/[1-9]*.html'));
//var_dump(glob('./sheji/[^index]*.html'));
 
 
//array_walk(glob(getcwd().'/sheji/[1-9]*.html'),'unlink');
//array_walk(glob('./sheji/[1-9]*.html'),'unlink');
//array_walk(glob(getcwd().DIRECTORY_SEPARATOR.'sheji'.DIRECTORY_SEPARATOR.'[1-9]*.html'),'unlink');
//var_dump(DIRECTORY_SEPARATOR);
//var_dump(unlink('D:shanmaowwwwwwroottiantangtvxyxh4cc/sheji/20312.html'));
?>
以前有介绍过一个删除指定目录下的指定文件下面我们来看删除指定目录所的所有文件只删除一级目录不删除下级目录,具体程序例子如下。


例子

public function del(){
    header("Content-Type: text/html; charset=UTF-8");
    echo '点击文件名可以查看:<br>';
    $dir =getcwd()."/html/";
    //获取某目录下所有文件、目录名(不包括子目录下文件、目录名)
    $handler = opendir($dir);
    while (($filename = readdir($handler)) !== false) {//务必使用!==,防止目录下出现类似文件名“0”等情况
        if ($filename != "." && $filename != "..") {
                $files[] = $filename ;
           }
       }
   
    closedir($handler);
     
//打印所有文件名
foreach ($files as $value) {
    $url = 'http://'.$_SERVER['HTTP_HOST']."/html/".$value;
    echo "<a href='".$url."' target='_blank'>".$value."</a> | <a href='/index.php?s=/Index1/dodel/name/".$value."' target='_self'>删除</a><br />";
}
    
 
}
 
 
public function dodel(){
    header("Content-Type: text/html; charset=UTF-8");
    $fname = $this->_get("name");
    $fname = getcwd()."/html/".$fname.".html";
    if(unlink($fname)){
        
        echo $fname.' 文件删除成功!<a href="javascript:history.go(-1);">返回</a>'; 
    }else{
        echo $fname.' 删除失败!<a href="javascript:history.go(-1);">返回</a>';
    }
}


获取目录下所有文件,包括子目录

 代码如下 复制代码
function get_allfiles($path,&$files) {
    if(is_dir($path)){
        $dp = dir($path);
        while ($file = $dp ->read()){
            if($file !="." && $file !=".."){
                get_allfiles($path."/".$file, $files);
            }
        }
        $dp ->close();
    }
    if(is_file($path)){
        $files[] =  $path;
    }
}
   
function get_filenamesbydir($dir){
    $files =  array();
    get_allfiles($dir,$files);
    return $files;
}
   
$filenames = get_filenamesbydir("static/image/");
//打印所有文件名,包括路径
foreach ($filenames as $value) {
    echo $value."<br />";
}


php删除文件夹及其文件夹下所有文件

 代码如下 复制代码
function deldir($dir) {
  //先删除目录下的文件:
  $dh=opendir($dir);
  while ($file=readdir($dh)) {
    if($file!="." && $file!="..") {
      $fullpath=$dir."/".$file;
      if(!is_dir($fullpath)) {
          unlink($fullpath);
      } else {
          deldir($fullpath);
      }
    }
  }
 
  closedir($dh);
  //删除当前文件夹:
  if(rmdir($dir)) {
    return true;
  } else {
    return false;
  }
}
对于cookies读写操作我们如果域名配置没配置好那么可能只有一个域名要使用,像www.111cn.net与111cn.net后者是包括前者的哦,下面来给大家举个例子。

今天本地调试,有个cookies死活都写不进去,环境如下:

域名:111cn.net

浏览器:chrome34

代码:

 代码如下 复制代码
header("Content-type: text/html; charset=utf-8");
if (isset($_COOKIE['test']))
{
    echo '获取到的cookies是:'.$_COOKIE['test'];
}
elseif (setcookie('test', 'okh', time() + 3600, '/', '.111cn.net'))
{
    echo '设置cookies:test';
}
else
{
    echo '什么都没有';
}

用111cn.net访问,上面这段代码在chrome下一直设置成功,但是却一直都没记录。找了半天原因,一朋友从手册上告诉我:

The domain that the cookie is available to. Setting the domain to ‘www.example.com’ will make the cookie available in the www subdomain and higher subdomains. Cookies available to a lower domain, such as ‘example.com’ will be available to higher subdomains, such as ‘www.example.com’. Older browsers still implementing the deprecated » RFC 2109 may require a leading . to match all subdomains.

于是我做了这么一个调整:

用www.111cn.net进行访问
修改之前的代码为
1
setcookie('test', 'okh', time() + 3600, '/', 'www.111cn.net')
这下正常设置,也正常记录了。
但是存在2个问题:

如何设置不带WWW的域名的cookies呢?比如:111cn.net
设置www.111cn.net虽然能在www.111cn.net下使用,但是却不能在111cn.net下使用,如何设置cookies使其通用呢?
通过求助,得知原因如下:
这个域名特殊。火狐、chrome不认为 www.111cn.net 是 111cn.net 的二级域名:

 代码如下 复制代码

var eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
                    .getService(Components.interfaces.nsIEffectiveTLDService);
 
eTLDService.getBaseDomain(gBrowser.selectedTab.linkedBrowser.currentURI);
/*
www.111cn.net
*/

111cn.net 在 effective_tld_names.dat 文件中列出来了:


a.org
b.cn

原来是这么一个小问题,困扰了我一天,原本是为了方便,所以将这个域名作为自己本地开发用,结果出现这个情况,只好将111cn.net修改为1a.com

有的网站有很多的 CSS 文件,如果将它们合并到一起并且进行 Gzip 压缩会减少请求和文件大小,有利于提高网站加载速度。为了方便我不推荐人工压缩和合并 CSS,而是使用 PHP 代码。

首先将所有 CSS 放到一个目录里,然后在此目录新建一个空的 CSS 文件,命名为 css.php(其实除了后缀命名随便)。

然后在 PHP 文件里放下边的代码:

 代码如下 复制代码

<?php
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
 $buffer = preg_replace('!/*[^*]**+([^/][^*]**+)*/!', '', $buffer);
 $buffer = str_replace(array("rn", "r", "n", "t", '  ', '    ', '    '), '', $buffer);
 return $buffer;
}
/*include('colorpicker.css');
include('jquery-ui.css');
include('style.css');
include('switchery.min.css');*/
foreach( glob( "*.css" ) as $filename ) include $filename;
ob_end_flush();

引入 CSS 文件的代码换成引入这个 PHP 文件,例如:


<link rel='stylesheet' id='style-css'  href='/css/css.php' type='text/css' media='all' />


压缩多个css为一个css

 代码如下 复制代码

<?php
/*
Compress multiple CSS files into one and cache for an hour.

Use the same code for Javascript, but replace below "text/css" with "text/javascript" and of course make sure you include .js files instead of .css ones.
*/  www.111cn.net
ob_start("ob_gzhandler");
header("Content-type: text/css; charset: UTF-8");    
header("Expires: ".gmdate("D, d M Y H:i:s", time() + 60*60)." GMT");

include('somefile.css');
echo "nn";
include('anotherfile.css');
echo "nn";

ob_flush();


下面整理可压缩css,js的函数

 代码如下 复制代码


/**
 * 合并css样式为一个文件
 *
 * @param unknown_type $urls
 * @param unknown_type $path
 * @param unknown_type $tmpl_path
 * @return unknown
 */
function parse_css($urls,$path="./static/",$tmpl_path='.'){
    $url = md5(implode(',',$urls));
    $css_url = $path.$url.'.css';
    if(!file_exists($css_url)){
        if(!file_exists($path))mkdir($path,0777);
        $css_content = '';
        foreach($urls as $url){
         $css_content .= @file_get_contents($url);
        }
        $css_content = preg_replace("/[rn]/",'',$css_content);
        $css_content = str_replace("../images/",$tmpl_path."/images/",$css_content);
        @file_put_contents($css_url,$css_content);
    }
    return $css_url;
}
/**
 * 合并js www.111cn.net为一个文件
 *
 * @param unknown_type $urls
 * @param unknown_type $path
 * @return unknown
 */
function parse_script($urls,$path="./static/"){
    $url = md5(implode(',',$urls));
    $js_url = $path.$url.'.js';
    if(!file_exists($js_url))
    {
        if(!file_exists($path))mkdir($path,0777);
        require_once "inc/javascriptpacker.php";
        $js_content = '';
        foreach($urls as $url)
        {
            $append_content = @file_get_contents($url)."rn";
            $packer = new JavaScriptPacker($append_content);
            $append_content = $packer->pack();
            $js_content .= $append_content;
        }
        @file_put_contents($js_url,$js_content);
    }
    return $js_url;
}
前台
js调用
<?php
$pagejs[] = $tplurl."js/jump.js";
$jsfile=parse_script($pagejs,"./template/default/js/",".");
?>
<script type="text/javascript" src="<?=$jsfile?>"></script>
css调用
<?php
$pagecss[] = $tplurl."style/index_top.css";
$pagecss[] = $tplurl."style/index.css";
$cssfile=parse_css($pagecss,"./template/default/style/",".");
?>
<link rel="stylesheet" type="text/css" href="<?=$cssfile?>" />

PHP 文件里就包含了所有被压缩的 CSS 代码,而且可以自动引入 CSS 目录里的所有 CSS 文件,不用在新建 CSS 文件的时候再修改这个 PHP 文件。

前端时间做一个APP后台时用户要求用户的评论以xx分钟前这种格式显示,给用户以良好的体验,于是笔者写了次函数。本函数主要是利用PHP计算两个时间之间的差值,通过差值来转换,虽然代码很简单,但是很实用。
 代码如下 复制代码
<?php
/**
 * 时间差计算
 *
 * @param Timestamp $time 时间差
 * @return String Time Elapsed
 * @author jakehu (http://www.111cn.net/)
 */
function time2Units ($time)
{
$year   = floor($time / 60 / 60 / 24 / 365);
$time  -= $year * 60 * 60 * 24 * 365;
$month  = floor($time / 60 / 60 / 24 / 30);
$time  -= $month * 60 * 60 * 24 * 30;
$week   = floor($time / 60 / 60 / 24 / 7);
$time  -= $week * 60 * 60 * 24 * 7;
$day    = floor($time / 60 / 60 / 24);
$time  -= $day * 60 * 60 * 24;
$hour   = floor($time / 60 / 60);
$time  -= $hour * 60 * 60;
$minute = floor($time / 60);
$time  -= $minute * 60;
$second = $time;
$elapse = '';
 
$unitArr = array('年前'  =>'year', '个月前'=>'month',  '周前'=>'week', '天前'=>'day',
'小时前'=>'hour', '分钟前'=>'minute', '秒前'=>'second'
);
 
foreach ( $unitArr as $cn => $u )
{
if ( $year > 0 ) {//大于一年显示年月日
$elapse = date('Y/m/d',time()-$time);
break;
}
else if ( $$u > 0 )
{
$elapse = $$u . $cn;
break;
}
}
 
return $elapse;
}
 
$past = 1390000000; //起点时间
$diff = time() - $past;//时间差
 
echo '发表于' . time2Units($diff) . '前';
?>
[!--infotagslink--]

相关文章