dewwwald
8/1/2016 - 2:03 PM

Cake Zip Component

Cake Zip Component

CakePHP ZipComponent

For unzipping stuff.

##TODO

  • Add zip functionality
<?php

namespace App\Controller\Component;

use Cake\Controller\Component;

class ZipComponent extends Component
{
    public function remove_ext ($filename)
    {
        $fnArray = explode('.', $filename);
        unset($fnArray[count($fnArray) - 1]);
        return implode('-', $fnArray);
    }

    public function mkdir ($dirr)
    {
        if (!file_exists($dirr)) {
            mkdir($dirr);
        }
    }

    public function unzip_file ($file, $toFolder = false)
    {
        $fullpath = ROOT . '/' . $file;
        $zip = zip_open($fullpath);
        if ($zip)
        {
            if (!$toFolder)
            {
                $toFolder = ROOT . '/' . $this->remove_ext($file);
            }
            else
            {
                $toFolder = ROOT . '/' . $toFolder;
            }
            $this->mkdir($toFolder);
            while ($zip_entry = zip_read($zip))
            {
                $zip_content = $toFolder.'/'.zip_entry_name($zip_entry);

                if (substr($zip_content, strlen($zip_content) - 1, 1) == '/' && !file_exists($zip_content)) {
                    mkdir($zip_content);
                }
                else if (!file_exists($zip_content)) {
                    $fp = fopen($toFolder.'/'.zip_entry_name($zip_entry), "w");
                    if (zip_entry_open($zip, $zip_entry, "r"))
                    {
                        $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                        fwrite($fp,"$buf");
                        zip_entry_close($zip_entry);
                        fclose($fp);
                    }
                }
            }
            zip_close($zip);
        }
        unlink($fullpath);
    }
}