Como Subir Y Desconprimir Archivos Con Yii

Hola necesito saber si yii tiene algún componente o extención que me permita subir archivos comprimidos y descomprimirlos al guardarlos.O que me dijeran alguna forma de hacer eso.Muchas gracias.

Desconozco si hay alguna extensión que lo haga, (y creo que se debe a la sencillez del procedimiento). Algunas páginas con ejemplos y clases:

http://www.atlantiscode.com/blog/descomprimir-archivos-tar-o-zip-con-php/

http://www.programacion.com/articulo/comprimir_y_descomprimir_archivos_con_php_utilizando_zlib_427 (recomendada)

http://www.onsoni.com/2011/09/comprimir-y-descomprimir-archivos-php.html (recomendada 2)

Muchas gracias por tu respuesta ha sido muy util.No sabia que era tan sencillo y por eso necesitaba saber si yii ya tenia algo predeterminado para hacer esto.Una ultima pregunta estás librerias ya vienen instaladas con el php o tengo que integrarselas a yii de alguna forma?

La librería zlib no necesariamente está instalado por defecto (aunque generalmente lo está); igual para la extensión de PHP, así que hay que verificar que ambos existen: "zlib" (para el caso de archivos ZIP) y la extensión de PHP (extension=php_bz2.dll para uso de bzip)

Saludos

ok muchas gracias

Disculpa que me haya demorado tanto para preguntarte esto pero es que estaba haciendo otras cosas.Vi los ejemplos que me mostrastes pero me da este error cuando lo utilizo.


gzfile(/temp/archivos/d-PRI 25-1.zip) [<a href='function.gzfile'>function.gzfile</a>]: failed to open stream: No such file or directory 

Aqui te dejo el código de como lo estoy usando.


public function actionCreate()

	{

		$model=new Periodicos;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Periodicos']))

		{

			$model->attributes=$_POST['Periodicos'];

            $perio=$model->nombrep;

            $uploadedFile=CUploadedFile::getInstance($model,'dir_archivos');

            $fileName = "{$perio}-{$uploadedFile}";

            $model->dir_archivos = $fileName;

			if($model->save())

				

                if(!empty($uploadedFile))  // checkeamos si el archivo subido esta seteado o no

                   {

                  $uploadedFile->saveAs(Yii::app()->basePath.'/../archivos/'.$fileName); 

                  $this->descomprimir(Yii::app()->baseUrl.'/archivos/'.$fileName, Yii::app()->baseUrl.'/archivos/'); 

                //}

                 }

                 

                 $this->redirect(array('view','id'=>$model->id_periodico));

                 

		}

       

		$this->render('create',array(

			'model'=>$model,

		));

	

y este es el metodo de descoprimir que me distes:


 

    public function descomprimir($origen, $destino) {

     $string = implode("", gzfile($origen));

     $fp = fopen($destino, "w");

     fwrite($fp, $string, strlen($string));

     fclose($fp);

    }

Saludos.

hola a todos, ya he encontrado porque es que me daba el error que les comenté anteriormente lo que pasaba era que donde estaba llamando la función comprimir, todavia el archivo.zip no se habia guardado.Ahora lo que ando buscando es en que parte de mi controller puedo llamar a la función descomprimir, para que cuando el usuario suba el archivo automáticamente se descomprima.Gracias.