Skip to content

CakePHP ZipComponent

by Vinícius Krolow on maio 1st, 2009

Precisava criar um componete muito simples para o PHP, poderia eu nem ter criado um coponent, pois minha necessidade era apenas descompactar arquivos zip, para um determinado diretório, para isso no PHP 5 temos a classe ZipArchive, porém o simples pode complicar então resolvi desenvolver a feature de descompactar o arquivo Zip, utilizando em forma de component.

Segue o mesmo a seguir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
< ?php
class ZipComponent extends Object {
 
	public $zipFile;
	private $zip;
	public $extractDirectory;
 
	public function setFile($zipFile) {
		$this->zipFile = $zipFile;
		$this->zip = new ZipArchive();
	}
 
	public function setExtractDirectory($extractDirectory) {
		$this->extractDirectory = $extractDirectory;
	}
 
	public function extract($zipFile = null, $extractDirectory = null) {
		if (!is_null($zipFile)) {
			$this->setFile($zipFile);
		}
		if (!is_null($extractDirectory)) {
			$this->setExtractDirectory($extractDirectory);
		}
		if ($this->zip->open($this->zipFile)) {
			$this->zip->extractTo($this->extractDirectory);
    		$this->zip->close();
 
    		return true;
		}
 
		return false;
	}
 
}
?>

Para utilizar o mesmo basta no controller usar:

1
2
3
4
5
6
7
8
9
public $components = array('Zip');
 
public function add() {
    if ($this->Zip->extract($zipFile, $directory)) {
        print 'yes';
    } else {
        print 'no';
    }
}

Preciso melhorar o component, verificar se o diretório tem permissão de escrita, verificar os arquivos dentro do zip que são válidos e excluir os não validos, mas por início ele está assim e funciona.

One Comment

Trackbacks & Pingbacks

  1. Twitted by krolow

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS