PHP压缩文件夹的方法

PHP压缩文件夹的方法

 public function addFileToZip($path, $zip)
    {
        $handler = opendir($path); //打开当前文件夹由$path指定。
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {
//文件夹文件名字为'.'和‘..',不要对他们进行操作
                if (is_dir($path . "/" . $filename)) {
                    // 如果读取的某个对象是文件夹,则递归
                    $this->addFileToZip($path . "/" . $filename, $zip);
                } else {
                    //将文件加入zip对象
                    $zip->addFile($path . "/" . $filename);
                }
            }
        }
        closedir($path);
    }

    public function testyasuo()
    {

        $zip         = new \ZipArchive();
        $xiangmupath = $this->getxiangmupath();
        $filename    = './moban/css.zip';

        if ($zip->open($filename, \ZipArchive::OVERWRITE) === true) {

        	$zip->addFile('./moban/email.xlsx', 'email.xlsx');
            $this->addFileToZip('./moban/css/', $zip); 
            $zip->close(); //关闭处理的zip文件
        }

    }

ps:
1 这个PHP是自带的不需要装php_zip扩展模块
2 如果没有zip没创建 如果有了就会覆盖
3 创建好zip 一定要添加文件到zip 不然创建不了zip
4 路径都用./这样 解压出来的文件夹就会按照他的来

php递归删除文件夹

php递归删除文件夹

   public function deldir($path)
    {

        //如果是目录则继续
        if (is_dir($path)) {

            //扫描一个文件夹内的所有文件夹和文件并返回数组
            $p = $this->my_scandir($path);
         
            foreach ($p as $val) {
              
                //如果是目录则递归子目录,继续操作
                if (is_dir($path . $val)) {
                    //子目录中操作删除文件夹和文件
                    $this->deldir($path . $val . '/');
                    //目录清空后删除空文件夹

                    @rmdir($path . $val . '/');
              
                } else {
                    //如果是文件直接删除
                    unlink($path . $val);
                }
            }

        }
    }


    public function my_scandir($dir)
    {
        if (!is_dir($dir)) {
            $errmsg = '文件夹不存在';
            echo '<script>alert("' . $dir . $errmsg . '")</script>';
            echo $dir . $errmsg;
            exit();
        }
        $filearray = array();
        $handler   = opendir($dir);
        while (($filename = readdir($handler)) !== false) {
            if ($filename != "." && $filename != "..") {

                $filearray[] = $filename;
            }}
        closedir($handler);
        return $filearray;

    }

php 环境require(): open_basedir restriction in effect 错误

php 环境require(): open_basedir restriction in effect 错误

错误日志显示,访问脚本不在 open_basedir的限定目录里面

解决方法
打开fastcgi.conf
设置如下
fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/:/data/web/”;
ps:/data/web改成项目路径 这样就没有限制了

jquery swiper3自定义切换效果的方法

jquery swiper3自定义切换效果的方法


   <div class="swiper-slide">
                <div class="wrapslide bg">
                    <img class="ani bg loadimg" swiper-animate-effect="fadeInUp"  swiper-animate-duration="1s" swiper-animate-delay="0s" loadimg="{$yuming}/images/3/p3_bg.jpg" />
                    <img class="ani p3_wz1  loadimg" swiper-animate-effect="suoxiaofadeIn"  swiper-animate-duration="1s" swiper-animate-delay="0s" loadimg="{$yuming}/images/3/p3_wz1.png" />
                    <img class="ani p3_wz2  loadimg" swiper-animate-effect="suoxiaofadeIn"  swiper-animate-duration="1s" swiper-animate-delay="0.5s" loadimg="{$yuming}/images/3/p3_wz2.png" />
                </div>
            </div>
      /*切换时就触发 用于做出场动画*/
            onSlideChangeStart: function(swiper) {
               $('.swiper-slide-prev .wrapslide').addClass('rotate')
            },
onTransitionEnd: function(swiper) {
              
            },
   onTransitionEnd: function(swiper) {
                // $('.wrapslide').removeClass('rotate');
            },

ps: 因为slide不方便做动画 所以里面加了个wrapslide 做出场动画就不冲突了 入场动画bg上一定要加动画 适当的时候切换时间用speed控制(一般不用)

jquery序列帧播放(支持视频自动播放和不是全屏播放)

jquery序列帧播放 这个弊端就是到时候需要升级下带宽 至少10MB 保证不卡。。 ae导出序列真的时候 每秒10帧 就是代码每秒播放10张图片 尺寸适当的可以压小点

  
 <php>
        for($i=0;$i<200;$i++){

          if($i<10){
               $ss='00'.$i;
            }else if($i>=10 && $i<100){
               $ss='0'.$i;
             }else{
                 $ss=$i;
             }
      echo'<img class="bg noshow loadimg dss" loadimg="'.$yuming.'/images/1/in_00'.$ss.'.jpg?v=2" />';
         }
     for($i=200;$i<508;$i++){
        
          if($i<10){
               $ss='00'.$i;
            }else if($i>10 && $i<100){
               $ss='0'.$i;
             }else{
                 $ss=$i;
             }
      echo'<img class="bg noshow loadimg1 dss" loadimg1="'.$yuming.'/images/1/in_00'.$ss.'.jpg?v=2" />';
         }         
    </php>


/*用于后续加载的*/
function jiazaipic2() {
    var load_img1 = [];
 var loadimg1length = $('.loadimg1').length;
 if(loadimg1length==0){
        alert('你还没有设置loadimg1');
        return false;
    }
    $('.loadimg1').each(function() {
        var loadimg1 = $(this).attr('loadimg1');
        load_img1.push(loadimg1);
    })
    console.log(load_img1);
    window.imgNum1 = 0;
    var qq = -1;
    jQuery.imgpreload(load_img1, {
        each: function() {
            /*this will be called after each image loaded*/
            var status = $(this).data('loaded') ? 'success' : 'error';
            if (status == "success") {
                qq++;
                var v = (parseFloat(++imgNum1) / load_img1.length).toFixed(2);
                console.log(Math.round(v * 100) + "<sup>%</sup>");
                var loadimg1 = $('.loadimg1').eq(qq).attr('loadimg1');
                $('.loadimg1').eq(qq).attr('src', loadimg1)
            } else {
                alert('加载失败,重新刷新');
                window.location.reload();
            }
        },
        all: function() {
$('.jiazaicontainer').css('display', 'none');
            console.log('全部加载完成');
            /*这个地方还是要巩固下 如果万一上面有个失败*/
            $('.loadimg1').each(function() {
                var loadimg1 = $(this).attr('loadimg1');
                $(this).attr('src', loadimg1);
            })
        }
    });
}
 jiazaipic2();

var ii=-1;
  xuliezhenanim();
   function xuliezhenanim() {
    setTimeout(function() {
        if (ii < xuliezhennum) {
            ii++;
            if (ii > 3) {
                $('.dss').eq(ii - 1).css('display', 'none');
            }
            var img = $('.dss').eq(ii).attr('src');
            console.log(img);
            if (iskong(img)) {
                
                $('.jiazaicontainer').css('display', 'block');
                console.log('还没加载完' + ii);
            } else {
                xuliezhenanim();
                $('.dss').eq(ii).css('display', 'block');
            }
        } else {}
    }, 60)
}

ps:此方法不仅可以用于序列真播放还可以用在 后续加载中

javascript采用Broadway实现安卓视频自动播放的方法(这种坑比较多 不建议使用)

javascript采用Broadway实现安卓视频自动播放的方法
Broadway 是一个 H.264 解码器, 比jsmpge清晰度要高 使用 Emscripten 工具从 Android 的 H.264 解码器转化而成,它还针对 WebGL 做了一些优化。

1 先把mp4要转下 ffmpeg -i in.mp4 -s 500×804 -vcodec libx264 -pass 1 -coder 0 -bf 0 -flags -loop -wpredp 0 out.mp4
2 代码如下

<html>
<head>
  <link type="text/css" href="screen.css" rel="stylesheet" />
</head>
<body onload="load()">
  <script src="/moban/js/jquery.min.js"></script>
  <script type="text/javascript" src="Decoder.js"></script>
  <script type="text/javascript" src="YUVCanvas.js"></script>
  <script type="text/javascript" src="Player.js"></script>
  
  <script type="text/javascript" src="stream.js"></script>
  
  <script type="text/javascript" src="mp4.js"></script>
  
  <script type="text/javascript">
    function load() {
    var broadwaynode=$('.broadway')[0];
    var broadway = new Broadway(broadwaynode);
    broadway.play();
    }
  </script>
  

  <div class="broadway" src="mozilla_story.mp4" width="640" height="360" style="float: left; position: relative;" workers="false" render="true" webgl="auto"></div>
</body>
</html>
// 用绝对定位是为了挡住下面的调试信息
canvas{
       width: 100%;
    height: 100%;
    position: absolute;
    left: 0px;
    top: 0px;
    z-index: 101;
}


  var broadwaynode=$('.broadway')[0];
    var broadway = new Broadway(broadwaynode);
    broadway.play();

3 官网资料 https://github.com/mbebenita/Broadway

ps:Unrecognized option ‘wpredp’这个错误 说明 ffmpge不完整 建议用win版本

html5 textarea 写入换行的方法

html5 textarea 写入换行的方法

   <textarea id="fwe" class="selmiao" cols="30" rows="10"></textarea>
  $('#fwe').val('wwe\nffwe');

ps:必须用js的方法写入才可以 直接在html事先写好不行


     var miaoshu = $('#fwe').val();
        miaoshu = miaoshu.replace('\n', '||');
        miaoshu = miaoshu.replace('\n', '||');
        miaoshu = miaoshu.replace('\n', '||');
        miaoshu = miaoshu.replace('\n', '||');

读取 然后读取并看不到\n