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改成项目路径 这样就没有限制了

php imagick 文字居中的方法

php imagick 文字居中的方法

  public function getwenzinfo($nickName)
    {

        $nickNamelen   = mb_strlen($nickName, 'utf-8');
        $wzallkd       = 0;
        $wzallkdlist   = array();
        $wzallkdlist[] = 0;
        $perzifulist   = array();
        for ($i = 0; $i < $nickNamelen; $i++) {
            $perzifu       = mb_substr($nickName, $i, 1, 'utf-8');
            $perzifulist[] = $perzifu;
            if (preg_match("/^[A-Za-z0-9]+$/", $perzifu) == false) {
                // echo '是中文';
                $wzkd = 26;
                $wzallkd += 26;
            } else {
                // echo '不是中文';
                $wzkd = 17;
                $wzallkd += 15;
            }
            $wzallkdlist[] = $wzkd;
        }
        /*因为字符串宽度是 字符本身宽度+字符之间的间隔-最后的字符串间隔*/
        $wzallkd=$wzallkd-2;
        array_pop($wzallkdlist);

        $wenziinfo['wzallkd']     = $wzallkd;
        $wenziinfo['wzallkdlist'] = $wzallkdlist;
        $wenziinfo['perzifulist'] = $perzifulist;

        return $wenziinfo;
    }

   $text = new \Imagick();
        $text->newImage(750, 1206, 'none');

        $text->setImageFormat('png');

        $draw1 = new \ImagickDraw();
        $draw1->setFont(__DIR__ . '/../../../Public/tianyangzhongqiu/ziti/fanzhengdahei.ttf'); //设置中文字体 可以解决中文乱码问题
        /*$draw->setTextAlignment(1);*///1  从文字的左下方开始计算的  2 从文字中下来计算  3 从文字右下来计算 默认为1
        $xingzuocolor = $this->getxingzuocolor($xingzuo);
        $draw1->setFillColor(new \ImagickPixel($xingzuocolor));
        $draw1->setFontSize(27);
        $draw1->setTextAlignment(1);
        $nickName  = '啦啊';
        $wenziinfo = $this->getwenzinfo($nickName);
      
        $wzallkd     = $wenziinfo['wzallkd'];
        $wzallkdlist = $wenziinfo['wzallkdlist'];
        $perzifulist = $wenziinfo['perzifulist'];

        $wenzizuobiao = (750 - $wzallkd) / 2;
        
        foreach ($wzallkdlist as $k => $v) {
            $wenzizuobiao += $v;
        
            $draw1->annotation($wenzizuobiao, 240, $perzifulist[$k]);
        }

        $draw1->annotation(167, 290, $chengji);

        $text->drawImage($draw1);

ps:就是先设置宽度 然后打字 就这样文字宽度我来定 就不会出错了

php 5.5使用 array_column的方法

php 5.5使用 array_column的方法
 public function array_column($input, $columnKey, $indexKey = null)
    {
        $columnKeyIsNumber = (is_numeric($columnKey)) ? true : false;
        $indexKeyIsNull    = (is_null($indexKey)) ? true : false;
        $indexKeyIsNumber  = (is_numeric($indexKey)) ? true : false;
        $result            = array();
        foreach ((array) $input as $key => $row) {
            if ($columnKeyIsNumber) {
                $tmp = array_slice($row, $columnKey, 1);
                $tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
            } else {
                $tmp = isset($row[$columnKey]) ? $row[$columnKey] : null;
            }
            if (!$indexKeyIsNull) {
                if ($indexKeyIsNumber) {
                    $key = array_slice($row, $indexKey, 1);
                    $key = (is_array($key) && !empty($key)) ? current($key) : null;
                    $key = is_null($key) ? 0 : $key;
                } else {
                    $key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
                }
            }
            $result[$key] = $tmp;
        }
        return $result;
    }